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:
    - butil::RandInt
    - EXPECT_EQ
    - EXPECT_NE
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - butil::fast_rand_in
    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:
    - butil::RandDouble
    - butil::fast_rand_double
    - EXPECT_GT
    - 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:
    - std::unique
    - butil::RandBytes
    - EXPECT_GT
    - memset
    - std::sort
    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
    - butil::RandBytesAsString
    - EXPECT_EQ
    - std::string::size
    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::RandGenerator
    - butil::fast_rand_less_than
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - ASSERT_LT
    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
    - butil::RandUint64
    - FAIL
    - LOG
    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
    - butil::TimeTicks::HighResNow
    - InMicroseconds
    - LOG
    - scoped_ptr::get
    - uint8_t::uint8_t
    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::fast_rand_less_than
    - LOG
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - Cache::rend
    - EXPECT_EQ
    - ASSERT_TRUE
    - Cache::begin
    - Cache::Put
    - Cache::rbegin
    - Cache::Clear
    - Cache::size
    - EXPECT_TRUE
    - Cache::Peek
    - Cache::Erase
    - Cache::end
    - 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:
    - Cache::rend
    - EXPECT_EQ
    - ASSERT_TRUE
    - Cache::Peek
    - Cache::Put
    - Cache::ShrinkToSize
    - Cache::rbegin
    - Cache::end
    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:
    - Cache::rend
    - EXPECT_EQ
    - ASSERT_TRUE
    - Cache::begin
    - Cache::Put
    - Cache::size
    - Cache::ShrinkToSize
    - Cache::rbegin
    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:
    - CachedItem::CachedItem
    - EXPECT_EQ
    - Cache::begin
    - Cache::Put
    - Cache::Clear
    - Cache::size
    - EXPECT_TRUE
    - Cache::Erase
    - Cache::end
    - 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:
    - CachedItem::CachedItem
    - Cache::size
    - EXPECT_EQ
    - Cache::Put
    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_EQ
    - Cache::Put
    - Cache::ShrinkToSize
    - EXPECT_TRUE
    - 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:
    - ASSERT_STREQ
    - berror
    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:
    - printf
    - ASSERT_STREQ
    - berror
    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:34,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:35,1
    - Dst: bthread::WorkStealingQueue*::steal
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:40,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:41,1
    - Dst: cpu_relax
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 47
    functionName: steal_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<value_type>::vector<value_type>
    - cpu_relax
    - std::vector*::reserve
    - bthread::WorkStealingQueue*::steal
    - std::vector*::push_back
    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:55,1
    - Dst: bthread::WorkStealingQueue*::push
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:56,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 67
    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:70,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:71,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:76,1
    - Dst: bthread::WorkStealingQueue*::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:77,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:78,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:80,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 84
    functionName: pop_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<value_type>::vector<value_type>
    - std::vector*::reserve
    - pthread_mutex_lock
    - bthread::WorkStealingQueue*::pop
    - std::vector*::push_back
    - pthread_mutex_unlock
    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:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:89,1
    - Dst: bthread::WorkStealingQueue::init
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:89,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:93,1
    - Dst: pthread_create
      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:95,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:96,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:96,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:99,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:101,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:103,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:104,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:105,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:109,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:111,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:112,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:113,1
    - Dst: bthread::WorkStealingQueue::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:118,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:119,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:122,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:122,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:122,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:125,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 132
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - bthread::WorkStealingQueue::WorkStealingQueue
    - std::vector::reserve
    - std::vector::push_back
    - std::vector::resize
    - std::unique
    - pthread_join
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::vector*::size
    - std::sort
    - bthread::WorkStealingQueue::pop
    - bthread::WorkStealingQueue::init
    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:34,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:35,1
    - Dst: bthread::WorkStealingQueue*::steal
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:40,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:41,1
    - Dst: cpu_relax
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:43,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 47
    functionName: steal_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<value_type>::vector<value_type>
    - cpu_relax
    - std::vector*::reserve
    - bthread::WorkStealingQueue*::steal
    - std::vector*::push_back
    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:55,1
    - Dst: bthread::WorkStealingQueue*::push
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:56,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:57,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 67
    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:70,1
    - Dst: std::vector*::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:71,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:76,1
    - Dst: bthread::WorkStealingQueue*::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:77,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:78,1
    - Dst: std::vector*::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:80,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 69
    functionDepth: 1
    functionLinenumber: 69
    functionLinenumberEnd: 84
    functionName: pop_thread
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector<value_type>::vector<value_type>
    - std::vector*::reserve
    - pthread_mutex_lock
    - bthread::WorkStealingQueue*::pop
    - std::vector*::push_back
    - pthread_mutex_unlock
    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:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:89,1
    - Dst: bthread::WorkStealingQueue::init
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:89,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:93,1
    - Dst: pthread_create
      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:95,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:96,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:96,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:99,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:101,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:103,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:104,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:105,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:109,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:111,1
    - Dst: std::vector*::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:112,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:113,1
    - Dst: bthread::WorkStealingQueue::pop
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:118,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:119,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:122,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:122,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:122,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:125,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp:127,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 132
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_work_stealing_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - bthread::WorkStealingQueue::WorkStealingQueue
    - std::vector::reserve
    - std::vector::push_back
    - std::vector::resize
    - std::unique
    - pthread_join
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::vector*::size
    - std::sort
    - bthread::WorkStealingQueue::pop
    - bthread::WorkStealingQueue::init
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - butil::UTF8ToUTF16AndAdjustOffsets
    - butil::UTF16ToUTF8AndAdjustOffsets
    - ARRAYSIZE_UNSAFE
    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:
    - EXPECT_EQ
    - std::for_each
    - std::vector::push_back
    - LimitOffset
    - std::vector::clear
    - std::vector::end
    - std::vector::begin
    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:
    - EXPECT_EQ
    - butil::OffsetAdjuster::AdjustOffsets
    - std::vector::push_back
    - std::vector::size
    - OffsetAdjuster::Adjustment
    - OffsetAdjuster::Adjustments::push_back
    - arraysize
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - arraysize
    - std::vector::size
    - OffsetAdjuster::Adjustment
    - OffsetAdjuster::Adjustments::push_back
    - butil::OffsetAdjuster::UnadjustOffsets
    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:
    - EXPECT_EQ
    - OffsetAdjuster::Adjustments::size
    - ASSERT_EQ
    - OffsetAdjuster::Adjustment
    - butil::OffsetAdjuster::MergeSequentialAdjustments
    - OffsetAdjuster::Adjustments::push_back
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - butil::UTF8ToUTF16AndAdjustOffsets
    - butil::UTF16ToUTF8AndAdjustOffsets
    - ARRAYSIZE_UNSAFE
    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:
    - EXPECT_EQ
    - std::for_each
    - std::vector::push_back
    - LimitOffset
    - std::vector::clear
    - std::vector::end
    - std::vector::begin
    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:
    - EXPECT_EQ
    - butil::OffsetAdjuster::AdjustOffsets
    - std::vector::push_back
    - std::vector::size
    - OffsetAdjuster::Adjustment
    - OffsetAdjuster::Adjustments::push_back
    - arraysize
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - arraysize
    - std::vector::size
    - OffsetAdjuster::Adjustment
    - OffsetAdjuster::Adjustments::push_back
    - butil::OffsetAdjuster::UnadjustOffsets
    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:
    - EXPECT_EQ
    - OffsetAdjuster::Adjustments::size
    - ASSERT_EQ
    - OffsetAdjuster::Adjustment
    - butil::OffsetAdjuster::MergeSequentialAdjustments
    - OffsetAdjuster::Adjustments::push_back
    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:
    - Lock::Release
    - Lock::Acquire
    - ConditionVariable::TimedWait
    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:
    - Lock::Release
    - butil::TimeTicks::Now
    - EXPECT_TRUE
    - ConditionVariable::TimedWait
    - butil::TimeDelta::FromMilliseconds
    - Lock::Acquire
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::Time::Now
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::SetAllowHelp
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SetAllowHelp
    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:
    - butil::WorkQueue::SetTaskCount
    - butil::WorkQueue::ResetHistory
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_GE
    - PlatformThreadHandle::PlatformThreadHandle
    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
    - SetShutdown
    - EXPECT_EQ
    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:
    - butil::WorkQueue::EveryIdWasAllocated
    - DCHECK
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - Signal
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - 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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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::WorkIsCompleted
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::allow_help_requests
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::shutdown
    - butil::WorkQueue::GetAnAssignment
    - ConditionVariable::TimedWait
    - butil::WorkQueue::GetThreadId
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    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:
    - Lock::Release
    - Lock::Acquire
    - ConditionVariable::TimedWait
    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:
    - Lock::Release
    - butil::TimeTicks::Now
    - EXPECT_TRUE
    - ConditionVariable::TimedWait
    - butil::TimeDelta::FromMilliseconds
    - Lock::Acquire
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::Time::Now
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::SetAllowHelp
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SetAllowHelp
    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:
    - butil::WorkQueue::SetTaskCount
    - butil::WorkQueue::ResetHistory
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_GE
    - PlatformThreadHandle::PlatformThreadHandle
    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
    - SetShutdown
    - EXPECT_EQ
    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:
    - butil::WorkQueue::EveryIdWasAllocated
    - DCHECK
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - Signal
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - 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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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::WorkIsCompleted
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::allow_help_requests
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::shutdown
    - butil::WorkQueue::GetAnAssignment
    - ConditionVariable::TimedWait
    - butil::WorkQueue::GetThreadId
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    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:
    - Lock::Release
    - Lock::Acquire
    - ConditionVariable::TimedWait
    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:
    - Lock::Release
    - butil::TimeTicks::Now
    - EXPECT_TRUE
    - ConditionVariable::TimedWait
    - butil::TimeDelta::FromMilliseconds
    - Lock::Acquire
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::Time::Now
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::SetAllowHelp
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SetAllowHelp
    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:
    - butil::WorkQueue::SetTaskCount
    - butil::WorkQueue::ResetHistory
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_GE
    - PlatformThreadHandle::PlatformThreadHandle
    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
    - SetShutdown
    - EXPECT_EQ
    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:
    - butil::WorkQueue::EveryIdWasAllocated
    - DCHECK
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - Signal
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - 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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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::WorkIsCompleted
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::allow_help_requests
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::shutdown
    - butil::WorkQueue::GetAnAssignment
    - ConditionVariable::TimedWait
    - butil::WorkQueue::GetThreadId
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    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:
    - Lock::Release
    - Lock::Acquire
    - ConditionVariable::TimedWait
    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:
    - Lock::Release
    - butil::TimeTicks::Now
    - EXPECT_TRUE
    - ConditionVariable::TimedWait
    - butil::TimeDelta::FromMilliseconds
    - Lock::Acquire
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::Time::Now
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SpinUntilTaskCountLessThan
    - WorkQueue::SetAllowHelp
    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::SetTaskCount
    - WorkQueue::no_more_tasks
    - WorkQueue::all_threads_have_ids
    - WorkQueue::GetNumThreadsCompletingTasks
    - WorkQueue::GetMinCompletionsByWorkerThread
    - WorkQueue::EveryIdWasAllocated
    - WorkQueue::lock
    - WorkQueue::work_is_available
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WorkQueue::SpinUntilAllThreadsAreWaiting
    - WorkQueue::GetNumThreadsTakingAssignments
    - WorkQueue::ResetHistory
    - WorkQueue::task_count
    - EXPECT_EQ
    - EXPECT_LE
    - butil::TimeDelta::FromMinutes
    - WorkQueue::GetNumberOfCompletedTasks
    - WorkQueue::GetMaxCompletionsByWorkerThread
    - WorkQueue::SetWorkTime
    - WorkQueue::ThreadSafeCheckShutdown
    - WorkQueue::SetShutdown
    - WorkQueue::SetAllowHelp
    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:
    - butil::WorkQueue::SetTaskCount
    - butil::WorkQueue::ResetHistory
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    - butil::WorkQueue::SetWorkTime
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_GE
    - PlatformThreadHandle::PlatformThreadHandle
    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
    - SetShutdown
    - EXPECT_EQ
    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:
    - butil::WorkQueue::EveryIdWasAllocated
    - DCHECK
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - Signal
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - 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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - AssertAcquired
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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::WorkIsCompleted
    - butil::WorkQueue::all_threads_have_ids
    - butil::WorkQueue::allow_help_requests
    - butil::WorkQueue::work_is_available
    - butil::WorkQueue::shutdown
    - butil::WorkQueue::GetAnAssignment
    - ConditionVariable::TimedWait
    - butil::WorkQueue::GetThreadId
    - butil::TimeDelta::FromMilliseconds
    - butil::WorkQueue::thread_shutting_down
    - butil::WorkQueue::EveryIdWasAllocated
    - butil::WorkQueue::task_count
    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:
    - Get
    - Set
    - EXPECT_EQ
    - static_cast<int*>
    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*>
    - Set
    - ASSERT_NE
    - ASSERT_GE
    - 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:
    - Get
    - Set
    - EXPECT_EQ
    - static_cast<int*>
    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*>
    - Set
    - ASSERT_NE
    - ASSERT_GE
    - 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:
    - ThreadLocalStorage::Slot::Set
    - EXPECT_EQ
    - ThreadLocalStorage::Slot::Get
    - reinterpret_cast<intptr_t>
    - reinterpret_cast<void*>
    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:
    - Start
    - EXPECT_EQ
    - butil::Free
    - DelegateSimpleThread::DelegateSimpleThread
    - Join
    - ThreadLocalStorageRunner::ThreadLocalStorageRunner
    - Initialize
    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:
    - Get
    - Set
    - EXPECT_EQ
    - static_cast<int*>
    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*>
    - Set
    - ASSERT_NE
    - ASSERT_GE
    - 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:
    - Get
    - Set
    - EXPECT_EQ
    - static_cast<int*>
    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*>
    - Set
    - ASSERT_NE
    - ASSERT_GE
    - 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:
    - ThreadLocalStorage::Slot::Set
    - EXPECT_EQ
    - ThreadLocalStorage::Slot::Get
    - reinterpret_cast<intptr_t>
    - reinterpret_cast<void*>
    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:
    - Start
    - EXPECT_EQ
    - butil::Free
    - DelegateSimpleThread::DelegateSimpleThread
    - Join
    - ThreadLocalStorageRunner::ThreadLocalStorageRunner
    - Initialize
    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: 45
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 45
    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: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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: 54
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 54
    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:61,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:64,1
    - Dst: StreamAccept
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:64,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:65,1
    - Dst: action
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:67,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: 69
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 69
    functionName: MyServiceWithStream::Echo
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - StreamAccept
    - action
    - ::test::EchoRequest*::message
    - LOG
    - ASSERT_EQ
    - ::test::EchoResponse*::set_message
    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:77,1
    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: 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: 78
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 78
    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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - state
    argTypes:
    - BatchStreamFeedbackRaceState*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 104
    functionName: BatchStreamClientHandler::BatchStreamClientHandler
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BatchStreamClientHandler(BatchStreamFeedbackRaceState* state)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:114,1
    - Dst: clear
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:115,1
    - Dst: client_got_first_msg::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:118,1
    - Dst: client_got_second_msg::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:120,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - id
    - messages
    - size
    argTypes:
    - brpc::StreamId
    - butil::IOBuf*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 124
    functionName: BatchStreamClientHandler::on_received_messages
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear
    - client_got_second_msg::store
    - client_got_first_msg::store
    - length
    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: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    functionName: BatchStreamClientHandler::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: client_closed_count::fetch_add
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp: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: BatchStreamClientHandler::on_closed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - client_closed_count::fetch_add
    linkageType: ''
    returnType: void
    signature: void on_closed(brpc::StreamId /*id*/) override
  - 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: BatchStreamClientHandler::on_failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void on_failed(brpc::StreamId /*id*/, int /*error_code*/, const std::string&
      /*error_text*/) override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<BatchStreamFeedbackRaceState*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:139,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:143,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:145,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:147,1
    - Dst: static_cast<brpc::Stream*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:148,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:148,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:154,1
    - Dst: auto*::server_first_write_rc::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:158,1
    - Dst: auto*::server_second_write_rc::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:159,1
    - Dst: auto*::server_write_done::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:160,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:168,1
    - Dst: auto*::server_first_write_rc::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:169,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:169,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:174,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:176,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:177,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:178,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:179,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:186,1
    - Dst: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:187,1
    - Dst: auto*::server_second_write_rc::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:189,1
    - Dst: auto*::server_write_done::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:190,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 192
    functionName: SendTwoMessagesOnServerExtraStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto*::server_write_done::store
    - auto*::server_first_write_rc::store
    - butil::gettimeofday_us
    - static_cast<BatchStreamFeedbackRaceState*>
    - brpc::SetTrackMeAddress
    - butil::milliseconds_from_now
    - butil::IOBuf::append
    - brpc::SocketUniquePtr::conn
    - auto*::server_second_write_rc::store
    - butil::IOBuf::IOBuf
    - usleep
    - brpc::StreamWait
    - brpc::StreamWrite
    - static_cast<brpc::Stream*>
    linkageType: ''
    returnType: void
    signature: void * SendTwoMessagesOnServerExtraStream(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - ' options'
    - state
    argTypes:
    - brpc::StreamOptions
    - BatchStreamFeedbackRaceState*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 198
    functionName: MyServiceWithBatchStream::MyServiceWithBatchStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MyServiceWithBatchStream(const brpc::StreamOptions& options,\n
      \                            BatchStreamFeedbackRaceState* state)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:205,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:205,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:209,1
    - Dst: brpc::StreamAccept
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:210,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:215,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:215,1
    - Dst: server_send_started::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 220
    functionName: MyServiceWithBatchStream::Echo
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ASSERT_EQ
    - brpc::StreamAccept
    - server_send_started::store
    - brpc::StreamIds::size
    - ::test::EchoResponse*::set_message
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* controller,\n              const
      ::test::EchoRequest* request,\n              ::test::EchoResponse* response,\n
      \             ::google::protobuf::Closure* done) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic<bool>*::store
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - std::atomic<bool>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 229
    functionName: SetAtomicTrue
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::atomic<bool>*::store
    linkageType: ''
    returnType: void
    signature: void SetAtomicTrue(std::atomic<bool>* f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:233,1
    - Dst: pred
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:234,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:234,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:235,1
    - Dst: pred
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:237,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - pred
    - timeout_ms
    argTypes:
    - Pred
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 238
    functionName: WaitForTrue
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - usleep
    - pred
    - butil::gettimeofday_us
    linkageType: ''
    returnType: bool
    signature: bool WaitForTrue(Pred pred, int timeout_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:241,1
    - Dst: load
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' f'
    - timeout_ms
    argTypes:
    - std::atomic<bool>
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 242
    functionName: WaitForTrue
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 1
    functionsReached:
    - load
    - WaitForTrue
    linkageType: ''
    returnType: bool
    signature: bool WaitForTrue(const std::atomic<bool>& f, int timeout_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:245,1
    - Dst: MyServiceWithStream::MyServiceWithStream
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:247,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:248,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:248,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:250,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:250,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:253,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:253,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:256,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:257,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:257,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:257,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:258,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:259,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:260,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 262
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - MyServiceWithStream::MyServiceWithStream
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::StreamClose
    - brpc::Channel::Channel
    - usleep
    - StreamCreate
    - brpc::Server::Join
    - brpc::Server::Stop
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:274,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:275,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:275,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:278,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:278,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:285,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:286,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:291,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:291,1
    - Dst: static_cast<brpc::Stream*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:292,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:292,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:293,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:298,1
    - Dst: if
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:304,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:305,1
    - Dst: if
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:307,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:308,1
    - Dst: for
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:310,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:311,1
    - Dst: if
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:314,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:315,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:317,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:318,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:325,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:330,1
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:331,1
    - Dst: BatchStreamFeedbackRaceState::client_closed_count::load
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:332,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 335
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - brpc::StreamCreate
    - WaitForTrue
    - brpc::SocketUniquePtr::conn
    - ASSERT_EQ
    - brpc::Server::Join
    - static_cast<brpc::Stream*>
    - brpc::SocketUniquePtr::reset
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - bthread_mutex_lock
    - brpc::Server::Stop
    - bthread_mutex_unlock
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::SetTrackMeAddress
    - for
    - BatchStreamFeedbackRaceState::client_closed_count::load
    - brpc::Server::AddService
    - if
    - brpc::StreamClose
    - brpc::StreamIds::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, batch_create_stream_feedback_race)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 296
    functionDepth: 1
    functionLinenumber: 296
    functionLinenumberEnd: 300
    functionName: ~UnlockGuard()
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_unlock
    linkageType: ''
    returnType: void
    signature: void ~UnlockGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 363
    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: 375
      start: 369
    functionDepth: 0
    functionLinenumber: 369
    functionLinenumberEnd: 375
    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:382,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:386,1
    - Dst: length
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:386,1
    - Dst: cutn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:388,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:389,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:389,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - messages
    - size
    argTypes:
    - butil::IOBuf*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 392
    functionName: OrderedInputHandler::on_received_messages
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ntohl
    - CHECK
    - length
    - cutn
    - usleep
    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: 396
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 396
    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:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 398
    functionDepth: 0
    functionLinenumber: 398
    functionLinenumberEnd: 401
    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:405,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - error_code
    argTypes:
    - brpc::StreamId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 408
    functionName: OrderedInputHandler::on_failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_NE
    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: 410
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 410
    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: 411
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 411
    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: 412
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 412
    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:422,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:428,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:429,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:429,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:431,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:431,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:436,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:436,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:439,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:440,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:440,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:440,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:443,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:444,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:446,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:448,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:448,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:449,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:450,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:451,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:452,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:454,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:455,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:456,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 457
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - OrderedInputHandler::stopped
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - OrderedInputHandler::OrderedInputHandler
    - StreamCreate
    - brpc::StreamWrite
    - OrderedInputHandler::idle_times
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::failed
    - brpc::StreamClose
    - htonl
    - butil::IOBuf::IOBuf
    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:463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - arg
    - error_code
    argTypes:
    - void*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 464
    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:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:476,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:477,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:477,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:479,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:479,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:485,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:485,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:487,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:488,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:488,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:488,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:491,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:492,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:494,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:494,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:498,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:500,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:500,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:510,1
    - Dst: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:510,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:511,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:512,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:514,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:514,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:516,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:518,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:518,1
    - Dst: std::make_pair
      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: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:522,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:526,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:530,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:532,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:534,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:537,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:538,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:540,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:540,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:542,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:544,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:544,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:545,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:547,1
    - Dst: brpc::StreamWait
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:548,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:550,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:552,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:555,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:555,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:556,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:557,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:560,1
    - Dst: OrderedInputHandler::failed
      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: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:562,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 66
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 466
    functionDepth: 1
    functionLinenumber: 466
    functionLinenumberEnd: 563
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - std::make_pair
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - butil::microseconds_from_now
    - brpc::Channel::Channel
    - brpc::StreamWait
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - OrderedInputHandler::stopped
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - StreamCreate
    - brpc::StreamWrite
    - OrderedInputHandler::idle_times
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::failed
    - brpc::StreamClose
    - htonl
    - butil::IOBuf::IOBuf
    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:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:575,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:576,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:576,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:578,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:578,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:579,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:583,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:583,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:586,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:587,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:587,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:591,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:591,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:592,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:593,1
    - Dst: brpc::Stream*::_host_socket::SetFailed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:594,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:597,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:598,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:600,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:600,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:601,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:602,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:604,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:605,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:606,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 607
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 607
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Stream*::_host_socket::SetFailed
    - brpc::SocketUniquePtr::conn
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Server
    - brpc::Server::Start
    - OrderedInputHandler::stopped
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - StreamCreate
    - brpc::StreamWrite
    - OrderedInputHandler::idle_times
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::failed
    - butil::IOBuf::IOBuf
    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:610,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:616,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:617,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:617,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:619,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:619,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:624,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:624,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:627,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:628,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:628,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:628,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:631,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:632,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:634,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:634,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:642,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:642,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:643,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:644,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:645,1
    - Dst: brpc::Stream*::_remote_settings::stream_id
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:646,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:649,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:650,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:651,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:651,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:652,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:654,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:655,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:656,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 657
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::conn
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Stream*::_remote_settings::stream_id
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - OrderedInputHandler::stopped
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - OrderedInputHandler::OrderedInputHandler
    - StreamCreate
    - brpc::StreamWrite
    - OrderedInputHandler::idle_times
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::failed
    - htonl
    - butil::IOBuf::IOBuf
    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:668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:670,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:671,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:671,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:673,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:673,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:678,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:678,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:681,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:682,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:682,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:682,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:684,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:684,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:685,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:686,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:688,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:691,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 659
    functionDepth: 1
    functionLinenumber: 659
    functionLinenumberEnd: 692
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - OrderedInputHandler::stopped
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - OrderedInputHandler::failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::StreamClose
    - brpc::Channel::Channel
    - usleep
    - StreamCreate
    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:700,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:705,1
    - Dst: length
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:705,1
    - Dst: cutn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:707,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:708,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:711,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:713,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:714,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:715,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:717,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: 720
      start: 696
    functionDepth: 1
    functionLinenumber: 696
    functionLinenumberEnd: 720
    functionName: PingPongHandler::on_received_messages
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ntohl
    - CHECK
    - LOG
    - length
    - butil::IOBuf::append
    - cutn
    - brpc::StreamWrite
    - htonl
    - butil::IOBuf::IOBuf
    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: 724
      start: 722
    functionDepth: 0
    functionLinenumber: 722
    functionLinenumberEnd: 724
    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:727,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 729
      start: 726
    functionDepth: 0
    functionLinenumber: 726
    functionLinenumberEnd: 729
    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:734,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:735,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - id
    - error_code
    argTypes:
    - brpc::StreamId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 732
    functionDepth: 0
    functionLinenumber: 732
    functionLinenumberEnd: 737
    functionName: PingPongHandler::on_failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_NE
    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: 739
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 739
    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: 740
      start: 740
    functionDepth: 0
    functionLinenumber: 740
    functionLinenumberEnd: 740
    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: 741
      start: 741
    functionDepth: 0
    functionLinenumber: 741
    functionLinenumberEnd: 741
    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: 742
      start: 742
    functionDepth: 0
    functionLinenumber: 742
    functionLinenumberEnd: 742
    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:757,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:759,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:760,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:760,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:761,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:762,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:762,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:770,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:770,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:773,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:774,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:774,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:774,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:776,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:777,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:778,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:778,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:780,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:780,1
    - Dst: PingPongHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:781,1
    - Dst: PingPongHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:781,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:782,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:784,1
    - Dst: PingPongHandler::error
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:784,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:785,1
    - Dst: PingPongHandler::error
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:786,1
    - Dst: PingPongHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:787,1
    - Dst: PingPongHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:787,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 751
    functionDepth: 1
    functionLinenumber: 751
    functionLinenumberEnd: 788
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - PingPongHandler::stopped
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - StreamCreate
    - brpc::StreamWrite
    - PingPongHandler::error
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::StreamClose
    - PingPongHandler::idle_times
    - butil::IOBuf::IOBuf
    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: 793
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 793
    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:796,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:797,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:798,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:799,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:799,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 801
      start: 794
    functionDepth: 1
    functionLinenumber: 794
    functionLinenumberEnd: 801
    functionName: SendNAfterAcceptStream::action
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::StreamWrite
    - htonl
    - 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:811,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:813,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:814,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:814,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:816,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:816,1
    - Dst: OrderedInputHandler::OrderedInputHandler
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:817,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:821,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:822,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:822,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:825,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:826,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:826,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:826,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:831,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:831,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:832,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:833,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:835,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:836,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:836,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 837
      start: 806
    functionDepth: 1
    functionLinenumber: 806
    functionLinenumberEnd: 837
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - ASSERT_FALSE
    - OrderedInputHandler::idle_times
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - OrderedInputHandler::stopped
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - OrderedInputHandler::failed
    - OrderedInputHandler::OrderedInputHandler
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::StreamClose
    - brpc::Channel::Channel
    - usleep
    - StreamCreate
    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:840,1
    - Dst: OrderedInputHandler::OrderedInputHandler
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:841,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:847,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:847,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:848,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:848,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:849,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:850,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:850,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:854,1
    - Dst: StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:854,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:857,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:858,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:858,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:858,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:861,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:862,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:864,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:870,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:870,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:871,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:872,1
    - Dst: brpc::Stream*::_host_socket::ReAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:873,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:876,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:876,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:877,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:878,1
    - Dst: OrderedInputHandler::stopped
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:879,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:880,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:882,1
    - Dst: brpc::SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:883,1
    - Dst: brpc::SocketUniquePtr::GetStat
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:885,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:886,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:887,1
    - Dst: OrderedInputHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:888,1
    - Dst: OrderedInputHandler::idle_times
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:888,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:889,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:890,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 839
    functionDepth: 1
    functionLinenumber: 839
    functionLinenumberEnd: 891
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Stream*::_host_socket::ReAddress
    - brpc::SocketUniquePtr::UpdateStatsEverySecond
    - brpc::SocketUniquePtr::conn
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::SocketUniquePtr::GetStat
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - OrderedInputHandler::stopped
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - OrderedInputHandler::OrderedInputHandler
    - StreamCreate
    - brpc::StreamWrite
    - OrderedInputHandler::idle_times
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - OrderedInputHandler::failed
    - butil::cpuwide_time_ms
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - brpc::StreamClose
    - ASSERT_LT
    - htonl
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, segment_stream_data_automatically)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:894,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:897,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:897,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:901,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:901,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:902,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 903
      start: 893
    functionDepth: 1
    functionLinenumber: 893
    functionLinenumberEnd: 903
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::StreamCreate
    - brpc::Controller::Controller
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, create_request_stream_twice_on_same_controller_returns_error)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: length
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:915,1
    - Dst: cutn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:920,1
    - Dst: ntohl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:921,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 3
    argNames:
    - id
    - messages
    - size
    argTypes:
    - brpc::StreamId
    - butil::IOBuf*[]
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 930
      start: 910
    functionDepth: 0
    functionLinenumber: 910
    functionLinenumberEnd: 930
    functionName: MultiStreamHandler::on_received_messages
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - cutn
    - ntohl
    - length
    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: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 932
    functionDepth: 0
    functionLinenumber: 932
    functionLinenumberEnd: 932
    functionName: MultiStreamHandler::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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - brpc::StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 937
      start: 934
    functionDepth: 0
    functionLinenumber: 934
    functionLinenumberEnd: 937
    functionName: MultiStreamHandler::on_closed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void on_closed(brpc::StreamId id) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 943
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 943
    functionName: MultiStreamHandler::on_failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    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: 1
    argNames:
    - id
    argTypes:
    - brpc::StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 948
      start: 945
    functionDepth: 0
    functionLinenumber: 945
    functionLinenumberEnd: 948
    functionName: MultiStreamHandler::received
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t received(brpc::StreamId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - brpc::StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 952
      start: 949
    functionDepth: 0
    functionLinenumber: 949
    functionLinenumberEnd: 952
    functionName: MultiStreamHandler::closed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t closed(brpc::StreamId id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 960
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 960
    functionName: MultiStreamHandler::total_received
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t total_received()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:963,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 0
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: MultiStreamHandler::num_streams
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t num_streams()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 968
      start: 965
    functionDepth: 0
    functionLinenumber: 965
    functionLinenumberEnd: 968
    functionName: MultiStreamHandler::error
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool error()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 972
      start: 969
    functionDepth: 0
    functionLinenumber: 969
    functionLinenumberEnd: 972
    functionName: MultiStreamHandler::failed
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool failed()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' options'
    - stream_count
    - n
    argTypes:
    - brpc::StreamOptions
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 989
      start: 987
    functionDepth: 0
    functionLinenumber: 987
    functionLinenumberEnd: 989
    functionName: MyServiceWithExtraStream::MyServiceWithExtraStream
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void MyServiceWithExtraStream(const brpc::StreamOptions& options,\n
      \                            size_t stream_count, int n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:996,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:997,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1000,1
    - Dst: brpc::StreamAccept
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1001,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1001,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1004,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1006,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1007,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1008,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1009,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1009,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - controller
    - request
    - response
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 991
    functionDepth: 1
    functionLinenumber: 991
    functionLinenumberEnd: 1013
    functionName: MyServiceWithExtraStream::Echo
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - butil::IOBuf::append
    - ASSERT_EQ
    - htonl
    - butil::IOBuf::IOBuf
    - brpc::StreamAccept
    - brpc::StreamWrite
    - brpc::StreamIds::size
    - ::test::EchoResponse*::set_message
    linkageType: ''
    returnType: void
    signature: "void Echo(::google::protobuf::RpcController* controller,\n              const
      ::test::EchoRequest* request,\n              ::test::EchoResponse* response,\n
      \             ::google::protobuf::Closure* done) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1030,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1032,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1033,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1033,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1035,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1036,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1036,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1038,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1042,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1042,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1044,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1044,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1047,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1048,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1048,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1048,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1051,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1053,1
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1053,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1055,1
    - Dst: static_cast<brpc::Stream*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1058,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1058,1
    - Dst: brpc::Stream*::_connected::load
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1060,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1065,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1067,1
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1067,1
    - Dst: MultiStreamHandler::received
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1068,1
    - Dst: MultiStreamHandler::received
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1071,1
    - Dst: MultiStreamHandler::received
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1071,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1073,1
    - Dst: MultiStreamHandler::error
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1073,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1074,1
    - Dst: MultiStreamHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1074,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1077,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1079,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1080,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1084,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1086,1
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1086,1
    - Dst: MultiStreamHandler::closed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1087,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1090
      start: 1021
    functionDepth: 1
    functionLinenumber: 1021
    functionLinenumberEnd: 1090
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - MultiStreamHandler::received
    - brpc::StreamCreate
    - WaitForTrue
    - brpc::SocketUniquePtr::conn
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - static_cast<brpc::Stream*>
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - MultiStreamHandler::failed
    - brpc::Server::Stop
    - MultiStreamHandler::closed
    - brpc::Server::Server
    - MultiStreamHandler::error
    - brpc::Server::Start
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::Stream*::_connected::load
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::StreamClose
    - brpc::StreamIds::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, batch_create_extra_stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1113,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1114,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1114,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1117,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1117,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1124,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1126,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1126,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1129,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1130,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1130,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1130,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1136,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1138,1
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1138,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1140,1
    - Dst: static_cast<brpc::Stream*>
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1143,1
    - Dst: brpc::SocketUniquePtr::conn
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1143,1
    - Dst: brpc::Stream*::_connected::load
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1145,1
    - Dst: brpc::StreamIds::size
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1150,1
    - Dst: htonl
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1152,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1153,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1155,1
    - Dst: brpc::StreamWrite
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1164,1
    - Dst: WaitForTrue
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1164,1
    - Dst: MultiStreamHandler::total_received
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1165,1
    - Dst: MultiStreamHandler::total_received
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1167,1
    - Dst: MultiStreamHandler::total_received
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1168,1
    - Dst: MultiStreamHandler::num_streams
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1168,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1169,1
    - Dst: MultiStreamHandler::error
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1169,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1170,1
    - Dst: MultiStreamHandler::failed
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1170,1
    - Dst: brpc::StreamClose
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1173,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1175,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_streaming_rpc_unittest.cpp:1176,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1177
      start: 1100
    functionDepth: 1
    functionLinenumber: 1100
    functionLinenumberEnd: 1177
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_streaming_rpc_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::StreamCreate
    - WaitForTrue
    - brpc::SocketUniquePtr::conn
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - MultiStreamHandler::num_streams
    - brpc::Server::Join
    - static_cast<brpc::Stream*>
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - MultiStreamHandler::failed
    - brpc::Server::Stop
    - brpc::Server::Server
    - MultiStreamHandler::error
    - brpc::Server::Start
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - brpc::StreamWrite
    - MultiStreamHandler::total_received
    - brpc::Stream*::_connected::load
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::StreamClose
    - htonl
    - brpc::StreamIds::size
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(StreamingRpcTest, batch_create_extra_stream_upstream_only)
  - 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: 1
    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: 1
    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: 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: 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: 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: 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:
    - EXPECT_TRUE
    - LOG_IS_ON
    - SetMinLogLevel
    - EXPECT_FALSE
    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
    - DPLOG_IF
    - DLOG_ASSERT
    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: 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: 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:
    - EXPECT_EQ
    - DCHECK_IS_ON
    - SetLogAssertHandler
    - DCHECK
    - EXPECT_TRUE
    - DLOG_IS_ON
    - DCHECK_EQ
    - DPCHECK
    - EXPECT_FALSE
    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:
    - DCHECK
    - DCHECK_EQ
    - DPCHECK
    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:
    - PLOG
    - LOG
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: 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: 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:
    - ::logging::StringSink::find
    - LOG_AT
    - ASSERT_NE
    - SetLogSink
    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:
    - VLOG_NE
    - VLOG_IF
    - EXPECT_EQ
    - ASSERT_TRUE
    - VLOG2_NE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - EXPECT_FALSE
    - LOG_STREAM
    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_LE
    - CHECK_GT
    - CHECK_GE
    - CHECK_LT
    - CHECK
    - CHECK_EQ
    - CHECK_NE
    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_ONCE
    - LOG_BACKTRACE_IF_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:
    - DLOG
    - LOG
    - logging::foo
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_EQ
    - DVLOG
    - DVLOG2
    - EXPECT_FALSE
    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:
    - ASSERT_EQ
    - LOG_STREAM
    - LOG
    - logging::need_ostream
    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_EVERY_N
    - VLOG_EVERY_SECOND
    - VLOG_ONCE
    - usleep
    - LOG_EVERY_SECOND
    - LOG_ONCE
    - VLOG_EVERY_N
    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: 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: 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:
    - ::logging::StringSink::find
    - PLOG
    - SetLogSink
    - ASSERT_NE
    - VLOG
    - VLOG_STREAM
    - LOG
    - DCHECK
    - ASSERT_EQ
    - LOG_AT
    - EXPECT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - PLOG_STREAM
    - LOG_STREAM
    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:
    - fetch_add
    - LOG
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:511,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:
    - sleep
    - load
    - pthread_create
    - std::string::c_str
    - std::strtol
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - pthread_join
    - butil::read_command_output
    - ASSERT_LE
    - butil::TempFile::fname
    - ASSERT_EQ
    - usleep
    - butil::TempFile::TempFile
    - std::ostringstream::str
    - butil::string_printf
    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
    - fetch_add
    - LOG
    - butil::Timer::start
    - usleep
    - butil::Timer::n_elapsed
    - 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:
    - sleep
    - pthread_create
    - pthread_join
    - ProfilerStop
    - ASSERT_EQ
    - usleep
    - snprintf
    - ProfilerStart
    - size
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:634,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:
    - sleep
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - butil::BaseIteratorRangeToNumberTraits::max
    - 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: 1
    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: 1
    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: 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: 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: 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: 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:
    - EXPECT_TRUE
    - LOG_IS_ON
    - SetMinLogLevel
    - EXPECT_FALSE
    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
    - DPLOG_IF
    - DLOG_ASSERT
    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: 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: 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:
    - EXPECT_EQ
    - DCHECK_IS_ON
    - SetLogAssertHandler
    - DCHECK
    - EXPECT_TRUE
    - DLOG_IS_ON
    - DCHECK_EQ
    - DPCHECK
    - EXPECT_FALSE
    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:
    - DCHECK
    - DCHECK_EQ
    - DPCHECK
    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:
    - PLOG
    - LOG
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: 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: 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:
    - ::logging::StringSink::find
    - LOG_AT
    - ASSERT_NE
    - SetLogSink
    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:
    - VLOG_NE
    - VLOG_IF
    - EXPECT_EQ
    - ASSERT_TRUE
    - VLOG2_NE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - EXPECT_FALSE
    - LOG_STREAM
    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_LE
    - CHECK_GT
    - CHECK_GE
    - CHECK_LT
    - CHECK
    - CHECK_EQ
    - CHECK_NE
    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_ONCE
    - LOG_BACKTRACE_IF_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:
    - DLOG
    - LOG
    - logging::foo
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_EQ
    - DVLOG
    - DVLOG2
    - EXPECT_FALSE
    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:
    - ASSERT_EQ
    - LOG_STREAM
    - LOG
    - logging::need_ostream
    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_EVERY_N
    - VLOG_EVERY_SECOND
    - VLOG_ONCE
    - usleep
    - LOG_EVERY_SECOND
    - LOG_ONCE
    - VLOG_EVERY_N
    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: 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: 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:
    - ::logging::StringSink::find
    - PLOG
    - SetLogSink
    - ASSERT_NE
    - VLOG
    - VLOG_STREAM
    - LOG
    - DCHECK
    - ASSERT_EQ
    - LOG_AT
    - EXPECT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - PLOG_STREAM
    - LOG_STREAM
    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:
    - fetch_add
    - LOG
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:511,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:
    - sleep
    - load
    - pthread_create
    - std::string::c_str
    - std::strtol
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - pthread_join
    - butil::read_command_output
    - ASSERT_LE
    - butil::TempFile::fname
    - ASSERT_EQ
    - usleep
    - butil::TempFile::TempFile
    - std::ostringstream::str
    - butil::string_printf
    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
    - fetch_add
    - LOG
    - butil::Timer::start
    - usleep
    - butil::Timer::n_elapsed
    - 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:
    - sleep
    - pthread_create
    - pthread_join
    - ProfilerStop
    - ASSERT_EQ
    - usleep
    - snprintf
    - ProfilerStart
    - size
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:634,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:
    - sleep
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - butil::BaseIteratorRangeToNumberTraits::max
    - 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: 1
    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: 1
    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: 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: 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: 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: 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:
    - EXPECT_TRUE
    - LOG_IS_ON
    - SetMinLogLevel
    - EXPECT_FALSE
    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
    - DPLOG_IF
    - DLOG_ASSERT
    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: 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: 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:
    - EXPECT_EQ
    - DCHECK_IS_ON
    - SetLogAssertHandler
    - DCHECK
    - EXPECT_TRUE
    - DLOG_IS_ON
    - DCHECK_EQ
    - DPCHECK
    - EXPECT_FALSE
    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:
    - DCHECK
    - DCHECK_EQ
    - DPCHECK
    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:
    - PLOG
    - LOG
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: 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: 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:
    - ::logging::StringSink::find
    - LOG_AT
    - ASSERT_NE
    - SetLogSink
    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:
    - VLOG_NE
    - VLOG_IF
    - EXPECT_EQ
    - ASSERT_TRUE
    - VLOG2_NE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - EXPECT_FALSE
    - LOG_STREAM
    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_LE
    - CHECK_GT
    - CHECK_GE
    - CHECK_LT
    - CHECK
    - CHECK_EQ
    - CHECK_NE
    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_ONCE
    - LOG_BACKTRACE_IF_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:
    - DLOG
    - LOG
    - logging::foo
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_EQ
    - DVLOG
    - DVLOG2
    - EXPECT_FALSE
    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:
    - ASSERT_EQ
    - LOG_STREAM
    - LOG
    - logging::need_ostream
    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_EVERY_N
    - VLOG_EVERY_SECOND
    - VLOG_ONCE
    - usleep
    - LOG_EVERY_SECOND
    - LOG_ONCE
    - VLOG_EVERY_N
    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: 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: 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:
    - ::logging::StringSink::find
    - PLOG
    - SetLogSink
    - ASSERT_NE
    - VLOG
    - VLOG_STREAM
    - LOG
    - DCHECK
    - ASSERT_EQ
    - LOG_AT
    - EXPECT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - PLOG_STREAM
    - LOG_STREAM
    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:
    - fetch_add
    - LOG
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:511,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:
    - sleep
    - load
    - pthread_create
    - std::string::c_str
    - std::strtol
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - pthread_join
    - butil::read_command_output
    - ASSERT_LE
    - butil::TempFile::fname
    - ASSERT_EQ
    - usleep
    - butil::TempFile::TempFile
    - std::ostringstream::str
    - butil::string_printf
    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
    - fetch_add
    - LOG
    - butil::Timer::start
    - usleep
    - butil::Timer::n_elapsed
    - 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:
    - sleep
    - pthread_create
    - pthread_join
    - ProfilerStop
    - ASSERT_EQ
    - usleep
    - snprintf
    - ProfilerStart
    - size
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:634,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:
    - sleep
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - butil::BaseIteratorRangeToNumberTraits::max
    - 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: 1
    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: 1
    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: 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: 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: 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: 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:
    - EXPECT_TRUE
    - LOG_IS_ON
    - SetMinLogLevel
    - EXPECT_FALSE
    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
    - DPLOG_IF
    - DLOG_ASSERT
    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: 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: 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:
    - EXPECT_EQ
    - DCHECK_IS_ON
    - SetLogAssertHandler
    - DCHECK
    - EXPECT_TRUE
    - DLOG_IS_ON
    - DCHECK_EQ
    - DPCHECK
    - EXPECT_FALSE
    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:
    - DCHECK
    - DCHECK_EQ
    - DPCHECK
    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:
    - PLOG
    - LOG
    - ASSERT_EQ
    - PLOG_STREAM
    - LOG_STREAM
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoggingTest, streaming_log_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: 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: 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:
    - ::logging::StringSink::find
    - LOG_AT
    - ASSERT_NE
    - SetLogSink
    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:
    - VLOG_NE
    - VLOG_IF
    - EXPECT_EQ
    - ASSERT_TRUE
    - VLOG2_NE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - EXPECT_FALSE
    - LOG_STREAM
    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_LE
    - CHECK_GT
    - CHECK_GE
    - CHECK_LT
    - CHECK
    - CHECK_EQ
    - CHECK_NE
    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_ONCE
    - LOG_BACKTRACE_IF_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:
    - DLOG
    - LOG
    - logging::foo
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_EQ
    - DVLOG
    - DVLOG2
    - EXPECT_FALSE
    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:
    - ASSERT_EQ
    - LOG_STREAM
    - LOG
    - logging::need_ostream
    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_EVERY_N
    - VLOG_EVERY_SECOND
    - VLOG_ONCE
    - usleep
    - LOG_EVERY_SECOND
    - LOG_ONCE
    - VLOG_EVERY_N
    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: 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: 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:
    - ::logging::StringSink::find
    - PLOG
    - SetLogSink
    - ASSERT_NE
    - VLOG
    - VLOG_STREAM
    - LOG
    - DCHECK
    - ASSERT_EQ
    - LOG_AT
    - EXPECT_FALSE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - PLOG_STREAM
    - LOG_STREAM
    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:
    - fetch_add
    - LOG
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:511,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:
    - sleep
    - load
    - pthread_create
    - std::string::c_str
    - std::strtol
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - pthread_join
    - butil::read_command_output
    - ASSERT_LE
    - butil::TempFile::fname
    - ASSERT_EQ
    - usleep
    - butil::TempFile::TempFile
    - std::ostringstream::str
    - butil::string_printf
    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
    - fetch_add
    - LOG
    - butil::Timer::start
    - usleep
    - butil::Timer::n_elapsed
    - 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:
    - sleep
    - pthread_create
    - pthread_join
    - ProfilerStop
    - ASSERT_EQ
    - usleep
    - snprintf
    - ProfilerStart
    - size
    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: LoggingSettings::LoggingSettings
      Src: /src/brpc/test/logging_unittest.cc:634,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:
    - sleep
    - LoggingSettings::LoggingSettings
    - logging::InitLogging
    - butil::BaseIteratorRangeToNumberTraits::max
    - 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:
    - EXPECT_ALIGNED
    - AlignedMemory::void_data
    - ALIGNOF
    - EXPECT_EQ
    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:
    - EXPECT_ALIGNED
    - AlignedMemory::void_data
    - ALIGNOF
    - EXPECT_EQ
    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:
    - EXPECT_ALIGNED
    - EXPECT_TRUE
    - butil::AlignedAlloc
    - butil::AlignedFree
    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_ALIGNED
    - static_cast<float*>
    - butil::AlignedAlloc
    - EXPECT_TRUE
    - scoped_ptr::get
    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:
    - EXPECT_ALIGNED
    - AlignedMemory::void_data
    - ALIGNOF
    - EXPECT_EQ
    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:
    - EXPECT_ALIGNED
    - AlignedMemory::void_data
    - ALIGNOF
    - EXPECT_EQ
    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:
    - EXPECT_ALIGNED
    - EXPECT_TRUE
    - butil::AlignedAlloc
    - butil::AlignedFree
    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_ALIGNED
    - static_cast<float*>
    - butil::AlignedAlloc
    - EXPECT_TRUE
    - scoped_ptr::get
    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:
    - EXPECT_EQ
    - brpc::Controller*::response_attachment
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    - brpc::Controller*::auth_context
    - brpc::Controller*::request_attachment
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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:
    - ReAddress
    - EXPECT_TRUE
    - brpc::policy::VerifyHuluRequest
    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:
    - get
    - SetEOF
    - PostponeEOF
    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:
    - SerializeToZeroCopyStream
    - test::EchoRequest::SerializeToZeroCopyStream
    - EXPECT_TRUE
    - 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:
    - test::EchoResponse::set_message
    - SerializeToZeroCopyStream
    - EXPECT_TRUE
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::SerializeToZeroCopyStream
    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:
    - butil::IOPortal::IOPortal
    - brpc::policy::ParseHuluMessage
    - EXPECT_EQ
    - EXPECT_GT
    - EXPECT_TRUE
    - ioctl
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - brpc::policy::HuluRpcResponseMeta::error_code
    - brpc::policy::HuluRpcResponseMeta::ParseFromZeroCopyStream
    - 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_FALSE
    - brpc::policy::ParseHuluMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - HuluTest::ProcessMessage
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - brpc::policy::PackHuluRequest
    - butil::IOBuf::IOBuf
    - brpc::Controller::call_id
    - HuluTest::CheckResponseCode
    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:
    - SetFailed
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    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:
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    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:
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    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:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - brpc::policy::HuluRpcResponseMeta::set_error_code
    - ASSERT_EQ
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - brpc::Controller::call_id
    - brpc::policy::ParseHuluMessage
    - ProcessMessage
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ParseResult::error
    - brpc::SerializeRequestDefault
    - VerifyMessage
    - brpc::policy::PackHuluRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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_FALSE
    - brpc::policy::ParseHuluMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - Failed
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_close_fd
    - butil::IOBuf::IOBuf
    - brpc::Controller::call_id
    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:
    - EXPECT_EQ
    - brpc::Controller*::response_attachment
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    - brpc::Controller*::auth_context
    - brpc::Controller*::request_attachment
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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:
    - ReAddress
    - EXPECT_TRUE
    - brpc::policy::VerifyHuluRequest
    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:
    - get
    - SetEOF
    - PostponeEOF
    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:
    - SerializeToZeroCopyStream
    - test::EchoRequest::SerializeToZeroCopyStream
    - EXPECT_TRUE
    - 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:
    - test::EchoResponse::set_message
    - SerializeToZeroCopyStream
    - EXPECT_TRUE
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::SerializeToZeroCopyStream
    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:
    - butil::IOPortal::IOPortal
    - brpc::policy::ParseHuluMessage
    - EXPECT_EQ
    - EXPECT_GT
    - EXPECT_TRUE
    - ioctl
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - brpc::policy::HuluRpcResponseMeta::error_code
    - brpc::policy::HuluRpcResponseMeta::ParseFromZeroCopyStream
    - 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_FALSE
    - brpc::policy::ParseHuluMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - HuluTest::ProcessMessage
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - brpc::policy::PackHuluRequest
    - butil::IOBuf::IOBuf
    - brpc::Controller::call_id
    - HuluTest::CheckResponseCode
    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:
    - SetFailed
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    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:
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    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:
    - ProcessMessage
    - brpc::policy::HuluRpcRequestMeta::set_method_index
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::HuluRpcRequestMeta::set_service_name
    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:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - brpc::policy::HuluRpcResponseMeta::set_error_code
    - ASSERT_EQ
    - brpc::policy::HuluRpcResponseMeta::set_correlation_id
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - brpc::Controller::call_id
    - brpc::policy::ParseHuluMessage
    - ProcessMessage
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ParseResult::error
    - brpc::SerializeRequestDefault
    - VerifyMessage
    - brpc::policy::PackHuluRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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_FALSE
    - brpc::policy::ParseHuluMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::PackHuluRequest
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - Failed
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_close_fd
    - butil::IOBuf::IOBuf
    - brpc::Controller::call_id
    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:
    - ASSERT_EQ
    - pthread_mutex_trylock
    - 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:
    - pthread_spin_unlock
    - BAIDU_SCOPED_LOCK
    - pthread_spin_lock
    - pthread_spin_destroy
    - pthread_spin_init
    - ASSERT_EQ
    - pthread_spin_trylock
    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_FALSE
    - std::unique_lock::try_lock
    - ASSERT_TRUE
    - BAIDU_SCOPED_LOCK
    - ASSERT_EQ
    - std::unique_lock::owns_lock
    - std::unique_lock::unlock
    - pthread_mutex_trylock
    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:
    - std::unique_lock::try_lock
    - ASSERT_TRUE
    - BAIDU_SCOPED_LOCK
    - pthread_spin_unlock
    - pthread_spin_lock
    - pthread_spin_destroy
    - pthread_spin_init
    - ASSERT_EQ
    - pthread_spin_trylock
    - std::unique_lock::unlock
    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:
    - ASSERT_EQ
    - pthread_mutex_trylock
    - 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:
    - pthread_spin_unlock
    - BAIDU_SCOPED_LOCK
    - pthread_spin_lock
    - pthread_spin_destroy
    - pthread_spin_init
    - ASSERT_EQ
    - pthread_spin_trylock
    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_FALSE
    - std::unique_lock::try_lock
    - ASSERT_TRUE
    - BAIDU_SCOPED_LOCK
    - ASSERT_EQ
    - std::unique_lock::owns_lock
    - std::unique_lock::unlock
    - pthread_mutex_trylock
    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:
    - std::unique_lock::try_lock
    - ASSERT_TRUE
    - BAIDU_SCOPED_LOCK
    - pthread_spin_unlock
    - pthread_spin_lock
    - pthread_spin_destroy
    - pthread_spin_init
    - ASSERT_EQ
    - pthread_spin_trylock
    - std::unique_lock::unlock
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - butil::Hash
    - std::vector::front
    - 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:
    - strlen
    - EXPECT_EQ
    - butil::Hash
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - butil::Hash
    - std::vector::front
    - 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:
    - strlen
    - EXPECT_EQ
    - butil::Hash
    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:
    - butil::RandomDataToGUIDString
    - EXPECT_EQ
    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:
    - butil::RandomDataToGUIDString
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - butil::IsValidGUID
    - 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
    - std::string::length
    - EXPECT_EQ
    - 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::SocketMapRemove
    - brpc::SocketMapInsert
    - EXPECT_EQ
    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:
    - Socket::SetFailed
    - brpc::SocketMapRemove
    - brpc::SetTrackMeAddress
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - brpc::SocketMapFind
    - ASSERT_EQ
    - brpc::SocketMapInsert
    - brpc::SocketUniquePtr::nref
    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:
    - brpc::SocketMapRemove
    - pthread_create
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::get
    - pthread_join
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::GetPooledSocket
    - ASSERT_NE
    - brpc::SocketUniquePtr::ReturnToPool
    - brpc::SocketMapFind
    - ASSERT_EQ
    - brpc::SocketMapInsert
    - usleep
    - brpc::SocketUniquePtr::reset
    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:
    - brpc::SocketUniquePtr::ListPooledSockets
    - ReturnToPool
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::get
    - EXPECT_EQ
    - Failed
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::GetPooledSocket
    - ASSERT_EQ
    - brpc::SocketMapInsert
    - EXPECT_TRUE
    - std::vector::size
    - brpc::SocketUniquePtr::reset
    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::SocketMapRemove
    - brpc::SocketMapInsert
    - EXPECT_EQ
    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:
    - Socket::SetFailed
    - brpc::SocketMapRemove
    - brpc::SetTrackMeAddress
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - brpc::SocketMapFind
    - ASSERT_EQ
    - brpc::SocketMapInsert
    - brpc::SocketUniquePtr::nref
    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:
    - brpc::SocketMapRemove
    - pthread_create
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::get
    - pthread_join
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::GetPooledSocket
    - ASSERT_NE
    - brpc::SocketUniquePtr::ReturnToPool
    - brpc::SocketMapFind
    - ASSERT_EQ
    - brpc::SocketMapInsert
    - usleep
    - brpc::SocketUniquePtr::reset
    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:
    - brpc::SocketUniquePtr::ListPooledSockets
    - ReturnToPool
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::get
    - EXPECT_EQ
    - Failed
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::GetPooledSocket
    - ASSERT_EQ
    - brpc::SocketMapInsert
    - EXPECT_TRUE
    - std::vector::size
    - brpc::SocketUniquePtr::reset
    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:
    - RUN_ALL_TESTS
    - butil::str2endpoint
    - 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: 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:
    - Callback::is_null
    - EXPECT_TRUE
    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:
    - FakeBindState1::FakeBindState1
    - EXPECT_TRUE
    - Equals
    - 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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - Equals
    - butil::is_null
    - Reset
    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:
    - Unretained
    - Bind
    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:
    - ASSERT_FALSE
    - ResetAndReturn
    - ASSERT_TRUE
    - 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*::Reset
    - CallbackOwner::CallbackOwner
    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:
    - Callback::is_null
    - EXPECT_TRUE
    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:
    - FakeBindState1::FakeBindState1
    - EXPECT_TRUE
    - Equals
    - 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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - Equals
    - butil::is_null
    - Reset
    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:
    - Unretained
    - Bind
    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:
    - ASSERT_FALSE
    - ResetAndReturn
    - ASSERT_TRUE
    - 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*::Reset
    - CallbackOwner::CallbackOwner
    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:
    - Callback::is_null
    - EXPECT_TRUE
    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:
    - FakeBindState1::FakeBindState1
    - EXPECT_TRUE
    - Equals
    - 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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - Equals
    - butil::is_null
    - Reset
    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:
    - Unretained
    - Bind
    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:
    - ASSERT_FALSE
    - ResetAndReturn
    - ASSERT_TRUE
    - 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*::Reset
    - CallbackOwner::CallbackOwner
    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:
    - Callback::is_null
    - EXPECT_TRUE
    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:
    - FakeBindState1::FakeBindState1
    - EXPECT_TRUE
    - Equals
    - 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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - Equals
    - butil::is_null
    - Reset
    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:
    - Unretained
    - Bind
    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:
    - ASSERT_FALSE
    - ResetAndReturn
    - ASSERT_TRUE
    - 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*::Reset
    - CallbackOwner::CallbackOwner
    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:
    - bthread_usleep
    - butil::cpuwide_time_ms
    - pthread_numeric_id
    - bthread_mutex_lock
    - printf
    - bthread_mutex_unlock
    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:
    - get_butex
    - bthread_join
    - bthread_mutex_unlock
    - bthread_mutex_destroy
    - ASSERT_EQ
    - usleep
    - bthread_mutex_lock
    - bthread_mutex_init
    - bthread_start_urgent
    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:
    - ARRAY_SIZE
    - pthread_create
    - get_butex
    - bthread_mutex_destroy
    - pthread_join
    - ASSERT_EQ
    - bthread_mutex_init
    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:
    - bthread_mutex_timedlock
    - EXPECT_EQ
    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:
    - bthread_join
    - bthread_mutex_unlock
    - bthread_mutex_destroy
    - bthread_cond_timedwait
    - bthread_cond_init
    - ASSERT_EQ
    - bthread_mutex_lock
    - bthread_mutex_init
    - bthread_start_urgent
    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_FALSE
    - ASSERT_TRUE
    - BAIDU_SCOPED_LOCK
    - bthread::Mutex::timed_lock
    - std::unique_lock::swap
    - std::unique_lock::lock
    - bthread::Mutex::lock
    - std::unique_lock::unique_lock
    - bthread::Mutex::native_handler
    - std::unique_lock::unlock
    - bthread::Mutex::unlock
    - bthread::Mutex::try_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
    - BAIDU_SCOPED_LOCK
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - butil::class_name<Mutex>
    - create_fn
    - LOG
    - ProfilerStop
    - usleep
    - snprintf
    - join_fn
    - ProfilerStart
    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:
    - pthread_create
    - bthread_join
    - bthread_usleep
    - pthread_join
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    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:
    - timed_lock
    - EXPECT_EQ
    - 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_FALSE
    - pthread_create
    - bthread::FastPthreadMutex::unlock
    - bthread::FastPthreadMutex::lock
    - BAIDU_SCOPED_LOCK
    - ASSERT_TRUE
    - bthread_usleep
    - pthread_join
    - std::unique_lock::swap
    - ASSERT_EQ
    - std::unique_lock::unlock
    - bthread::FastPthreadMutex::timed_lock
    - std::unique_lock::lock
    - std::unique_lock::unique_lock
    - bthread::FastPthreadMutex::try_lock
    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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 332
    functionName: do_pthread_timedlock
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_timedlock
    - EXPECT_EQ
    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:337,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:338,1
    - Dst: pthread_mutex_trylock
      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_unlock
      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_lock
      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_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:341,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:343,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:347,1
    - Dst: pthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:349,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:353,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:359,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:359,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:362,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:365,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 367
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_lock
    - pthread_mutex_init
    - pthread_join
    - LOG
    - ASSERT_EQ
    - pthread_mutex_timedlock
    - pthread_mutex_unlock
    - pthread_mutex_trylock
    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:
    - bthread_usleep
    - butil::cpuwide_time_ms
    - pthread_numeric_id
    - bthread_mutex_lock
    - printf
    - bthread_mutex_unlock
    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:
    - get_butex
    - bthread_join
    - bthread_mutex_unlock
    - bthread_mutex_destroy
    - ASSERT_EQ
    - usleep
    - bthread_mutex_lock
    - bthread_mutex_init
    - bthread_start_urgent
    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:
    - ARRAY_SIZE
    - pthread_create
    - get_butex
    - bthread_mutex_destroy
    - pthread_join
    - ASSERT_EQ
    - bthread_mutex_init
    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:
    - bthread_mutex_timedlock
    - EXPECT_EQ
    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:
    - bthread_join
    - bthread_mutex_unlock
    - bthread_mutex_destroy
    - bthread_cond_timedwait
    - bthread_cond_init
    - ASSERT_EQ
    - bthread_mutex_lock
    - bthread_mutex_init
    - bthread_start_urgent
    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_FALSE
    - ASSERT_TRUE
    - BAIDU_SCOPED_LOCK
    - bthread::Mutex::timed_lock
    - std::unique_lock::swap
    - std::unique_lock::lock
    - bthread::Mutex::lock
    - std::unique_lock::unique_lock
    - bthread::Mutex::native_handler
    - std::unique_lock::unlock
    - bthread::Mutex::unlock
    - bthread::Mutex::try_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
    - BAIDU_SCOPED_LOCK
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - butil::class_name<Mutex>
    - create_fn
    - LOG
    - ProfilerStop
    - usleep
    - snprintf
    - join_fn
    - ProfilerStart
    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:
    - pthread_create
    - bthread_join
    - bthread_usleep
    - pthread_join
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    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:
    - timed_lock
    - EXPECT_EQ
    - 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_FALSE
    - pthread_create
    - bthread::FastPthreadMutex::unlock
    - bthread::FastPthreadMutex::lock
    - BAIDU_SCOPED_LOCK
    - ASSERT_TRUE
    - bthread_usleep
    - pthread_join
    - std::unique_lock::swap
    - ASSERT_EQ
    - std::unique_lock::unlock
    - bthread::FastPthreadMutex::timed_lock
    - std::unique_lock::lock
    - std::unique_lock::unique_lock
    - bthread::FastPthreadMutex::try_lock
    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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 332
    functionName: do_pthread_timedlock
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_timedlock
    - EXPECT_EQ
    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:337,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:338,1
    - Dst: pthread_mutex_trylock
      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_unlock
      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_lock
      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_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:341,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:343,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:347,1
    - Dst: pthread_mutex_timedlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:349,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:353,1
    - Dst: pthread_mutex_trylock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:359,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:359,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:362,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_mutex_unittest.cpp:365,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 367
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_mutex_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_lock
    - pthread_mutex_init
    - pthread_join
    - LOG
    - ASSERT_EQ
    - pthread_mutex_timedlock
    - pthread_mutex_unlock
    - pthread_mutex_trylock
    linkageType: ''
    returnType: void
    signature: void TEST(MutexTest, pthread_mutex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:37,1
    - Dst: clear
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: reset_globals
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear
    - store
    linkageType: ''
    returnType: void
    signature: void reset_globals()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskArg*>
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:47,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:48,1
    - Dst: insert
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 55
    functionName: priority_task_fn
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - fetch_add
    - static_cast<TaskArg*>
    linkageType: ''
    returnType: void
    signature: void * priority_task_fn(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 61
    functionName: normal_task_fn
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * normal_task_fn(void* /*arg*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::SetCommandLineOption
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:66,1
    - Dst: google::SetCommandLineOption
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: PriorityQueueTest::SetUpTestSuite
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void SetUpTestSuite()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_globals
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 2
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: PriorityQueueTest::SetUp
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset_globals
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:85,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:85,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:93,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:95,1
    - Dst: size
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:95,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:97,1
    - Dst: count
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:97,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_join
    - ASSERT_TRUE
    - count
    - TaskArg::TaskArg
    - ASSERT_EQ
    - bthread_start_background
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, e2e_priority_tasks_all_executed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:110,1
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:116,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:119,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:119,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:122,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:129,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:129,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 130
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - load
    - bthread_join
    - std::vector::push_back
    - TaskArg::TaskArg
    - ASSERT_EQ
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, mixed_priority_and_normal_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<EDSimArg*>
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:145,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:147,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:147,1
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:151,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:162,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:162,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:166,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:168,1
    - Dst: size
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 169
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_join
    - static_cast<EDSimArg*>
    - bthread_start_background
    - TaskArg::TaskArg
    - ASSERT_EQ
    - bthread_self
    - bthread::TaskGroup::address_meta
    - bthread_start_urgent
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, start_foreground_priority_to_run)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<EDArg*>
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:186,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:188,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:188,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:192,1
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:195,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:197,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:198,1
    - Dst: EDArg*::resume_count::fetch_add
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:199,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:214,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:214,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:222,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:223,1
    - Dst: std::atomic::load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:225,1
    - Dst: size
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:225,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<EDArg*>
    - std::vector::reserve
    - bthread_join
    - load
    - std::vector::push_back
    - EDArg*::resume_count::fetch_add
    - bthread_start_background
    - TaskArg::TaskArg
    - std::atomic::load
    - ASSERT_EQ
    - bthread_self
    - bthread::TaskGroup::address_meta
    - bthread_start_urgent
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, multiple_eds_concurrent_preempt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:37,1
    - Dst: clear
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 40
    functionName: reset_globals
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 1
    functionsReached:
    - clear
    - store
    linkageType: ''
    returnType: void
    signature: void reset_globals()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<TaskArg*>
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:47,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:48,1
    - Dst: insert
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 55
    functionName: priority_task_fn
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - fetch_add
    - static_cast<TaskArg*>
    linkageType: ''
    returnType: void
    signature: void * priority_task_fn(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:59,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 61
    functionName: normal_task_fn
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void * normal_task_fn(void* /*arg*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::SetCommandLineOption
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:66,1
    - Dst: google::SetCommandLineOption
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: PriorityQueueTest::SetUpTestSuite
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void SetUpTestSuite()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_globals
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 69
    functionDepth: 2
    functionLinenumber: 69
    functionLinenumberEnd: 71
    functionName: PriorityQueueTest::SetUp
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset_globals
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:84,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:85,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:85,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:93,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:93,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:95,1
    - Dst: size
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:95,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:97,1
    - Dst: count
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:97,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_join
    - ASSERT_TRUE
    - count
    - TaskArg::TaskArg
    - ASSERT_EQ
    - bthread_start_background
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, e2e_priority_tasks_all_executed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:110,1
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:116,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:119,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:119,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:122,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:129,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:129,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 130
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - load
    - bthread_join
    - std::vector::push_back
    - TaskArg::TaskArg
    - ASSERT_EQ
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, mixed_priority_and_normal_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<EDSimArg*>
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:145,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:147,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:147,1
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:151,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:162,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:162,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:166,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:168,1
    - Dst: size
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 136
    functionDepth: 1
    functionLinenumber: 136
    functionLinenumberEnd: 169
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread_join
    - static_cast<EDSimArg*>
    - bthread_start_background
    - TaskArg::TaskArg
    - ASSERT_EQ
    - bthread_self
    - bthread::TaskGroup::address_meta
    - bthread_start_urgent
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, start_foreground_priority_to_run)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<EDArg*>
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:186,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:188,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:188,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:192,1
    - Dst: TaskArg::TaskArg
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:195,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:197,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:198,1
    - Dst: EDArg*::resume_count::fetch_add
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:199,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:214,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:214,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:222,1
    - Dst: load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:223,1
    - Dst: std::atomic::load
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:225,1
    - Dst: size
      Src: /src/brpc/test/bthread_priority_queue_unittest.cpp:225,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 226
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_priority_queue_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<EDArg*>
    - std::vector::reserve
    - bthread_join
    - load
    - std::vector::push_back
    - EDArg*::resume_count::fetch_add
    - bthread_start_background
    - TaskArg::TaskArg
    - std::atomic::load
    - ASSERT_EQ
    - bthread_self
    - bthread::TaskGroup::address_meta
    - bthread_start_urgent
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(PriorityQueueTest, multiple_eds_concurrent_preempt)
  - 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
    - EXPECT_EQ
    - reinterpret_cast<const unsigned char*>
    - std::string::length
    - butil::SHA1HashBytes
    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
    - EXPECT_EQ
    - reinterpret_cast<const unsigned char*>
    - std::string::length
    - butil::SHA1HashBytes
    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
    - EXPECT_EQ
    - reinterpret_cast<const unsigned char*>
    - std::string::length
    - butil::SHA1HashBytes
    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:
    - std::wstring::push_back
    - std::string::push_back
    - EXPECT_EQ
    - butil::SysWideToUTF8
    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:
    - std::wstring::push_back
    - butil::SysUTF8ToWide
    - EXPECT_EQ
    - 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
    - std::wstring::push_back
    - EXPECT_EQ
    - 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:
    - butil::SysNativeMBToWide
    - std::wstring::push_back
    - EXPECT_EQ
    - std::string::push_back
    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:
    - butil::SysNativeMBToWide
    - butil::UTF8ToWide
    - EXPECT_EQ
    - butil::SysWideToNativeMB
    - std::wstring::size
    - butil::WideToUTF8
    - arraysize
    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:
    - std::wstring::push_back
    - std::string::push_back
    - EXPECT_EQ
    - butil::SysWideToUTF8
    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:
    - std::wstring::push_back
    - butil::SysUTF8ToWide
    - EXPECT_EQ
    - 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
    - std::wstring::push_back
    - EXPECT_EQ
    - 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:
    - butil::SysNativeMBToWide
    - std::wstring::push_back
    - EXPECT_EQ
    - std::string::push_back
    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:
    - butil::SysNativeMBToWide
    - butil::UTF8ToWide
    - EXPECT_EQ
    - butil::SysWideToNativeMB
    - std::wstring::size
    - butil::WideToUTF8
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(SysStrings, SysNativeMBAndWide)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:87,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:89,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:90,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:90,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:91,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:91,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:94,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:96,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:97,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:101,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:101,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:102,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:102,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:104,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:105,1
    - Dst: ::test::EchoResponse*::add_code_list
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:106,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:106,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:108,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:108,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: 109
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 109
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - bthread_usleep
    - Controller*::request_attachment
    - ::test::EchoRequest*::sleep_us
    - ::test::EchoRequest*::code
    - LOG
    - ::test::EchoResponse*::add_code_list
    - ::test::EchoRequest*::server_fail
    - ::test::EchoRequest*::close_fd
    - usleep
    - ::test::EchoResponse*::set_message
    - Controller*::SetFailed
    - Controller*::response_attachment
    - Controller*::CloseConnection
    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:116,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:116,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:119,1
    - Dst: save
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:119,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:119,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:120,1
    - Dst: fname
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:120,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 122
    functionName: RdmaTest::RdmaTest
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string
    - fname
    - butil::endpoint2str
    - save
    - c_str
    - AddService
    - butil::str2ip
    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: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    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: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    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:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 129
    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:139,1
    - Dst: Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 140
    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:143,1
    - Dst: Join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:144,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 145
    functionName: RdmaTest::StopServer
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void StopServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: _am::ListConnections
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:149,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:150,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:154,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:155,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 158
    functionName: RdmaTest::GetSocketFromServer
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::get
    - _am::ListConnections
    - std::vector::size
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: Socket
    signature: Socket * GetSocketFromServer(size_t index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RdmaTest::SetUp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:177,1
    - Dst: GetParam
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 180
    functionName: RdmaRpcTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - RdmaTest::SetUp
    - GetParam
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RdmaTest::TearDown
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 184
    functionName: RdmaRpcTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - RdmaTest::TearDown
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:191,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:194,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:196,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:198,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:200,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:200,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:201,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:203,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:203,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:203,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:204,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:206,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:206,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 209
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - StopServer
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - close
    - htons
    - static_cast<RdmaTransport*>
    - 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:212,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:215,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:217,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:219,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:221,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:221,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:222,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:224,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:224,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:224,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:228,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:228,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:233,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:233,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:233,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 211
    functionDepth: 1
    functionLinenumber: 211
    functionLinenumberEnd: 236
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - memcpy
    - StopServer
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:239,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:242,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:244,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:248,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:250,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:250,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:251,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:253,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:253,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:253,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:255,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:255,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:260,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:260,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:260,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:261,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:263,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:263,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:265,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:267,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:267,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:268,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:270,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:270,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:270,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:272,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:272,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:274,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:274,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:274,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:275,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:277,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:277,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:281,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:281,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:282,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:284,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:284,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:284,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:288,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:289,1
    - Dst: memcpy
      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: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:293,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:293,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:294,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:296,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:296,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 299
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - close
    - memcpy
    - StopServer
    - butil::HostToNet16
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:302,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:305,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:307,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:311,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:313,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:313,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:314,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:316,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:316,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:316,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:318,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:318,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:320,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:320,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:320,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:322,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:322,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:324,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:324,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:326,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:328,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:328,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:329,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:331,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:331,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:331,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:333,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:333,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:335,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:335,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:335,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:336,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:337,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:339,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:339,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:341,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:341,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 344
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - memcpy
    - StopServer
    - butil::HostToNet16
    - ASSERT_EQ
    - memset
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:347,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:350,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:352,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:355,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:356,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:358,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:360,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:360,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:361,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:363,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:363,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:363,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:365,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:365,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:367,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:367,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:367,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:368,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:369,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:378,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:378,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:380,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:380,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:381,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:381,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:383,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:383,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:385,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:385,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:385,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:386,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:388,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:388,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:390,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:392,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:392,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:393,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:395,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:395,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:395,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:397,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:397,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:399,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:399,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:399,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:400,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:401,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:405,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:405,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:407,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:407,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:408,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:408,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:409,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:409,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:411,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:411,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:411,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:412,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:414,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:414,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 50
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 346
    functionDepth: 1
    functionLinenumber: 346
    functionLinenumberEnd: 417
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - memcpy
    - StopServer
    - butil::HostToNet16
    - butil::fd_guard::reset
    - ASSERT_EQ
    - memset
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:420,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:423,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:425,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:427,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:437,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:438,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:439,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:441,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:441,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:442,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:444,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:444,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:445,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:445,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:447,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:447,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:448,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:448,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:450,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:450,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:451,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:451,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:452,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:452,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:454,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:454,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:454,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:455,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:457,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:457,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:462,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:463,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:464,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:466,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:466,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:467,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:469,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:469,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:470,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:470,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:472,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:472,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:473,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:473,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:475,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:475,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:476,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:476,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:477,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:477,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:479,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:479,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:479,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:480,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:482,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:482,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:487,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:488,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:489,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:491,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:491,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:492,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:494,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:494,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:495,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:495,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:497,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:497,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:498,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:498,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:500,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:500,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:501,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:501,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:501,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:502,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:502,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:504,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:504,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:504,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:505,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:507,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:507,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:509,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 78
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 419
    functionDepth: 1
    functionLinenumber: 419
    functionLinenumberEnd: 510
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - htons
    - ASSERT_TRUE
    - bzero
    - memcpy
    - rdma::v2_wire::HelloMessage::Serialize
    - StopServer
    - butil::fd_guard::reset
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - butil::HostToNet32
    - static_cast<RdmaTransport*>
    - StartServer
    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:513,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:516,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:518,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:529,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:530,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:531,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:533,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:535,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:535,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:536,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:538,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:538,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:539,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:539,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:541,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:541,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:541,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:542,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:544,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:544,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 547
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - close
    - memcpy
    - rdma::v2_wire::HelloMessage::Serialize
    - StopServer
    - brpc::rdma::GetRdmaGid
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:550,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:553,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:555,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:566,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:567,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:568,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:570,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:572,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:572,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:573,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:575,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:575,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:576,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:576,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:578,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:578,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:579,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:579,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:581,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:581,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:581,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:583,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:583,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:585,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:585,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:585,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:586,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:588,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:588,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:590,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 591
      start: 549
    functionDepth: 1
    functionLinenumber: 549
    functionLinenumberEnd: 591
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - ASSERT_TRUE
    - bzero
    - close
    - memcpy
    - rdma::v2_wire::HelloMessage::Serialize
    - StopServer
    - brpc::rdma::GetRdmaGid
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:594,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:597,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:599,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:610,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:611,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:612,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:614,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:616,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:616,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:617,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:619,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:619,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:619,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:620,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:620,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:622,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:622,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:623,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:623,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:625,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:625,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:625,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:627,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:627,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:629,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:629,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:630,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:630,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:630,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:631,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:633,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:633,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:635,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:636,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:637,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:637,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:638,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:640,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:640,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:641,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:641,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:643,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:643,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:644,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:644,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:645,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:646,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:646,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:646,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:648,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:648,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:650,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:650,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:650,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:651,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:652,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:653,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:653,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 656
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - ASSERT_TRUE
    - bzero
    - close
    - memcpy
    - rdma::v2_wire::HelloMessage::Serialize
    - StopServer
    - brpc::rdma::GetRdmaGid
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:659,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:662,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:664,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:675,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:676,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:677,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:679,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:680,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:681,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:681,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:682,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:684,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:684,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:684,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:685,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:685,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:686,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:687,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:687,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:688,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:688,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:690,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:690,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:690,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:692,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:692,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:694,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:694,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:695,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:695,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:697,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:697,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:699,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:701,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:701,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:702,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:704,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:704,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:705,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:705,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:707,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:707,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:708,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:708,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:709,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:710,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:710,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:710,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:712,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:712,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:714,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:714,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:715,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:715,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:717,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:717,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:719,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 658
    functionDepth: 1
    functionLinenumber: 658
    functionLinenumberEnd: 720
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - ASSERT_TRUE
    - bzero
    - memcpy
    - rdma::v2_wire::HelloMessage::Serialize
    - StopServer
    - brpc::rdma::GetRdmaGid
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    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:724,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:732,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:732,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:737,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:738,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:739,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:743,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:744,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:744,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:744,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:747,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:748,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:748,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:750,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:750,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 751
      start: 722
    functionDepth: 1
    functionLinenumber: 722
    functionLinenumberEnd: 751
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - Controller::ErrorCode
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:763,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:763,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:768,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:769,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:770,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:774,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:775,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:775,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:775,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:780,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:780,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:781,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:783,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:783,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:783,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:784,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:786,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:786,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 787
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 787
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - Controller::ErrorCode
    - close
    - read
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:799,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:799,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:804,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:805,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:806,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:808,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:810,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:810,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:811,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:811,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:814,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:816,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:817,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:817,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:818,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:819,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:819,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:821,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:821,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 822
      start: 789
    functionDepth: 1
    functionLinenumber: 789
    functionLinenumberEnd: 822
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - write
    - Controller::ErrorCode
    - read
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:826,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:834,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:834,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:839,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:840,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:841,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:845,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:846,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:846,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:846,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:849,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:851,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:852,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:852,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:853,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:854,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:855,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:856,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:856,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:856,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:857,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:857,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:859,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:859,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 860
      start: 824
    functionDepth: 1
    functionLinenumber: 824
    functionLinenumberEnd: 860
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - write
    - Controller::ErrorCode
    - close
    - read
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:872,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:872,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:877,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:878,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:879,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:883,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:883,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:884,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:884,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:884,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:889,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:889,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:890,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:890,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:891,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:892,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:892,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:892,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:893,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:893,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:895,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:895,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 862
    functionDepth: 1
    functionLinenumber: 862
    functionLinenumberEnd: 896
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - write
    - Controller::ErrorCode
    - read
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:900,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:908,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:908,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:913,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:914,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:915,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:919,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:919,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:920,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:920,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:920,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:925,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:926,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:926,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:927,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:927,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:928,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:928,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:930,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:930,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 931
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - write
    - Controller::ErrorCode
    - read
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:935,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:943,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:943,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:948,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:949,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:950,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:952,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:954,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:954,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:955,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:955,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:960,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:961,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:962,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:962,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:963,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:965,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:965,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:965,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:966,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:966,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:968,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:968,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 969
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - write
    - Controller::ErrorCode
    - close
    - read
    - static_cast<RdmaTransport*>
    - Controller::call_id
    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:973,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:981,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:981,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:986,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:987,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:988,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:992,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:993,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:993,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:993,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:996,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:998,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:998,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:999,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1000,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1001,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1002,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1003,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1003,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1005,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1005,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1005,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1006,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1006,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1008,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1008,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1009
      start: 971
    functionDepth: 1
    functionLinenumber: 971
    functionLinenumberEnd: 1009
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_EQ
    - usleep
    - read
    - ASSERT_TRUE
    - memcpy
    - Controller::ErrorCode
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - write
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - memset
    - bthread_id_join
    - Controller::call_id
    - SocketUniquePtr::_transport::get
    - butil::HostToNet16
    - Channel::Init
    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:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1021,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1021,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1026,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1027,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1028,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1030,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1032,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1033,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1033,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1033,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1036,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1038,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1038,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1039,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1040,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1041,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1042,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1043,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1043,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1045,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1045,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1045,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1046,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1048,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1048,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1049,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1049,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1051,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1051,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1052
      start: 1011
    functionDepth: 1
    functionLinenumber: 1011
    functionLinenumberEnd: 1052
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_EQ
    - usleep
    - read
    - butil::NetToHost32
    - ASSERT_TRUE
    - memcpy
    - Controller::ErrorCode
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - write
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - memset
    - bthread_id_join
    - Controller::call_id
    - SocketUniquePtr::_transport::get
    - butil::HostToNet16
    - Channel::Init
    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:1056,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1064,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1064,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1069,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1070,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1071,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1075,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1075,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1076,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1076,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1076,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1081,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1081,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1091,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1092,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1094,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1094,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1097,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1097,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1097,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1098,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1100,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1100,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1101,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1103,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1054
    functionDepth: 1
    functionLinenumber: 1054
    functionLinenumberEnd: 1104
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - read
    - butil::NetToHost32
    - ASSERT_TRUE
    - memcpy
    - Controller::ErrorCode
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - write
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - bthread_id_join
    - Controller::call_id
    - SocketUniquePtr::_transport::get
    - brpc::rdma::GetRdmaGid
    - Channel::Init
    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:1108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1116,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1116,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1121,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1122,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1123,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1127,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1128,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1128,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1133,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1133,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1143,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1144,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1146,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1146,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1149,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1149,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1150,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1152,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1152,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1153,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1155,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1156
      start: 1106
    functionDepth: 1
    functionLinenumber: 1106
    functionLinenumberEnd: 1156
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - read
    - butil::NetToHost32
    - ASSERT_TRUE
    - memcpy
    - Controller::ErrorCode
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - write
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - bthread_id_join
    - Controller::call_id
    - SocketUniquePtr::_transport::get
    - brpc::rdma::GetRdmaGid
    - Channel::Init
    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:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1168,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1168,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1173,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1174,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1175,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1179,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1180,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1180,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1185,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1185,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1195,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1196,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1198,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1198,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1201,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1201,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1202,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1204,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1204,1
    - Dst: close
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1205,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1206,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1208,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1209
      start: 1158
    functionDepth: 1
    functionLinenumber: 1158
    functionLinenumberEnd: 1209
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - read
    - butil::NetToHost32
    - ASSERT_TRUE
    - memcpy
    - Controller::ErrorCode
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - write
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - bthread_id_join
    - Controller::call_id
    - SocketUniquePtr::_transport::get
    - brpc::rdma::GetRdmaGid
    - Channel::Init
    - close
    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:1213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1221,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1221,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1226,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1227,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1228,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1232,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1233,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1233,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1233,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1238,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1238,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1248,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1249,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1251,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1251,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1254,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1254,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1255,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1255,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1256,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1258,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1259
      start: 1211
    functionDepth: 1
    functionLinenumber: 1211
    functionLinenumberEnd: 1259
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - read
    - ASSERT_TRUE
    - memcpy
    - Controller::ErrorCode
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - write
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - bthread_id_join
    - Controller::call_id
    - SocketUniquePtr::_transport::get
    - brpc::rdma::GetRdmaGid
    - Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_send_data_on_tcp_after_ack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1264,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: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1277,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1278,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1279,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1283,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1283,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1289,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1292,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1300,1
    - Dst: rdma::v2_wire::HelloMessage::Deserialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1307,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1309,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1310
      start: 1262
    functionDepth: 1
    functionLinenumber: 1262
    functionLinenumberEnd: 1310
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - ASSERT_TRUE
    - rdma::v2_wire::HelloMessage::Deserialize
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - read
    - memcmp
    - Controller::call_id
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v2_client_hello_bytes_baseline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1313,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1316,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1318,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1322,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1322,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1323,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1325,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1325,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1325,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1336,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1339,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1341,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1341,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1343,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1343,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1347,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1349,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1354,1
    - Dst: rdma::v2_wire::HelloMessage::Deserialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1361,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1366,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1366,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1368,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1368,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1368,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1370,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1372,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1372,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1375
      start: 1312
    functionDepth: 1
    functionLinenumber: 1312
    functionLinenumberEnd: 1375
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - read
    - butil::HostToNet32
    - ASSERT_TRUE
    - memcpy
    - StopServer
    - rdma::v2_wire::HelloMessage::Deserialize
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - static_cast<RdmaTransport*>
    - Socket*::_transport::get
    - connect
    - memcmp
    - StartServer
    - brpc::rdma::GetRdmaGid
    - htons
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v2_server_hello_bytes_baseline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1378,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1381,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1383,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1384,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1386,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1386,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1387,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1388,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1390,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1390,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1390,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1401,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1404,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1405,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1407,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1407,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1408,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1412,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1412,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1415,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1415,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1415,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1417,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1419,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1419,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1421,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1422
      start: 1377
    functionDepth: 1
    functionLinenumber: 1377
    functionLinenumberEnd: 1422
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - butil::HostToNet32
    - ASSERT_TRUE
    - memcpy
    - StopServer
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - static_cast<RdmaTransport*>
    - memset
    - Socket*::_transport::get
    - connect
    - StartServer
    - brpc::rdma::GetRdmaGid
    - htons
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v2_server_drains_tail_then_reads_ack)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1425,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1428,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1430,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1431,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1433,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1433,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1434,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1435,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1437,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1437,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1437,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1450,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1453,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1455,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1455,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1459,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1459,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1461,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1462,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1464,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1424
    functionDepth: 1
    functionLinenumber: 1424
    functionLinenumberEnd: 1465
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - memcpy
    - rdma::v2_wire::HelloMessage::Serialize
    - StopServer
    - butil::fd_guard::reset
    - brpc::rdma::GetRdmaGid
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - Socket*::_transport::get
    - write
    - htons
    - static_cast<RdmaTransport*>
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v2_server_rejects_oversized_msg_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1472
    functionDepth: 0
    functionLinenumber: 1472
    functionLinenumberEnd: 1475
    functionName: HandshakeVersionFlag::HandshakeVersionFlag
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void HandshakeVersionFlag(int v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1478
      start: 1476
    functionDepth: 0
    functionLinenumber: 1476
    functionLinenumberEnd: 1478
    functionName: ~HandshakeVersionFlag()
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~HandshakeVersionFlag()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1486,1
    - Dst: SerializeToString
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1486,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1488,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1488,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1489,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1491,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1491,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1491,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1492,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1492,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - rdma::RdmaHello
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1495
      start: 1484
    functionDepth: 1
    functionLinenumber: 1484
    functionLinenumberEnd: 1495
    functionName: MakeV3Packet
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - SerializeToString
    - static_cast<uint32_t>
    - std::string::append
    - EXPECT_TRUE
    - butil::HostToNet32
    - reinterpret_cast<const char*>
    - std::string::reserve
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: std::string MakeV3Packet(const rdma::RdmaHello& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rdma::RdmaHello::set_block_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1505,1
    - Dst: rdma::RdmaHello::set_sq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1506,1
    - Dst: rdma::RdmaHello::set_rq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1507,1
    - Dst: rdma::RdmaHello::set_lid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1508,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1509,1
    - Dst: rdma::RdmaHello::set_gid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1510,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1510,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1510,1
    - Dst: rdma::RdmaHello::set_qp_num
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1514
      start: 1503
    functionDepth: 1
    functionLinenumber: 1503
    functionLinenumberEnd: 1514
    functionName: MakeValidV3Hello
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - rdma::RdmaHello::set_gid
    - std::string
    - rdma::RdmaHello::set_block_size
    - reinterpret_cast<const char*>
    - rdma::RdmaHello::set_rq_size
    - brpc::rdma::GetRdmaGid
    - rdma::RdmaHello::set_qp_num
    - rdma::RdmaHello::set_lid
    - rdma::RdmaHello::set_sq_size
    linkageType: ''
    returnType: rdma::RdmaHello
    signature: rdma::RdmaHello MakeValidV3Hello()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1529,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1529,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1534,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1535,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1536,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1543,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1543,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1544,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1548,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1548,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1550,1
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1550,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1551,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1556,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1556,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1558,1
    - Dst: rdma::RdmaHello::ParseFromString
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1558,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1562,1
    - Dst: rdma::RdmaHello::has_block_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1562,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1563,1
    - Dst: rdma::RdmaHello::has_sq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1563,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1564,1
    - Dst: rdma::RdmaHello::has_rq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1564,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1565,1
    - Dst: rdma::RdmaHello::has_lid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1566,1
    - Dst: rdma::RdmaHello::has_gid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1566,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1567,1
    - Dst: rdma::RdmaHello::has_qp_num
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1569,1
    - Dst: rdma::RdmaHello::gid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1569,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1572,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1572,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1573
      start: 1517
    functionDepth: 1
    functionLinenumber: 1517
    functionLinenumberEnd: 1573
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_EQ
    - reinterpret_cast<uint32_t*>
    - read
    - rdma::RdmaHello::has_lid
    - butil::NetToHost32
    - ASSERT_TRUE
    - rdma::RdmaHello::has_gid
    - rdma::RdmaHello::ParseFromString
    - rdma::RdmaHello::has_block_size
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - rdma::RdmaHello::has_sq_size
    - DoNothing
    - rdma::RdmaHello::has_qp_num
    - bthread_id_join
    - rdma::RdmaHello::has_rq_size
    - ASSERT_GT
    - memcmp
    - Controller::call_id
    - rdma::RdmaHello::gid
    - Channel::Init
    - ASSERT_LE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_client_hello_bytes_baseline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1576,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1579,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1581,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1583,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1585,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1585,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1586,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1587,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1588,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1588,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1588,1
    - Dst: MakeV3Packet
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1591,1
    - Dst: MakeValidV3Hello
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1592,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1592,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1593,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1593,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1593,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1595,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1595,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1599,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1600,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1603,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1603,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1605,1
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1605,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1606,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1610,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1612,1
    - Dst: rdma::RdmaHello::ParseFromString
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1612,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1613,1
    - Dst: rdma::RdmaHello::has_block_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1614,1
    - Dst: rdma::RdmaHello::has_sq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1614,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1615,1
    - Dst: rdma::RdmaHello::has_rq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1615,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1616,1
    - Dst: rdma::RdmaHello::has_gid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1617,1
    - Dst: rdma::RdmaHello::gid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1617,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1622,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1623,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1625,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1625,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1625,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1627,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1629,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1629,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1631,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1632
      start: 1575
    functionDepth: 2
    functionLinenumber: 1575
    functionLinenumberEnd: 1632
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - ASSERT_EQ
    - MakeV3Packet
    - usleep
    - reinterpret_cast<uint32_t*>
    - read
    - butil::HostToNet32
    - butil::NetToHost32
    - MakeValidV3Hello
    - ASSERT_TRUE
    - rdma::RdmaHello::has_gid
    - StopServer
    - rdma::RdmaHello::ParseFromString
    - butil::fd_guard::reset
    - rdma::RdmaHello::has_block_size
    - socket
    - write
    - GetSocketFromServer
    - static_cast<RdmaTransport*>
    - rdma::RdmaHello::has_sq_size
    - rdma::RdmaHello::has_rq_size
    - Socket*::_transport::get
    - connect
    - ASSERT_GT
    - memcmp
    - StartServer
    - rdma::RdmaHello::gid
    - ASSERT_LE
    - std::string::data
    - htons
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_hello_bytes_baseline)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1635,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1638,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1640,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1641,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1643,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1643,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1644,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1645,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1650,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1650,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1653,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1653,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1655,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1656,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1657
      start: 1634
    functionDepth: 1
    functionLinenumber: 1634
    functionLinenumberEnd: 1657
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bzero
    - StopServer
    - butil::fd_guard::reset
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - write
    - htons
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_rejects_zero_pb_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1660,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1663,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1665,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1666,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1668,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1668,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1669,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1670,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1671,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1674,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1677,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1677,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1678,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1679,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1679,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1680,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1682,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1682,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1684,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1685,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1686
      start: 1659
    functionDepth: 1
    functionLinenumber: 1659
    functionLinenumberEnd: 1686
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - static_cast<uint32_t>
    - ASSERT_TRUE
    - bzero
    - memcpy
    - StopServer
    - butil::fd_guard::reset
    - ASSERT_EQ
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - write
    - htons
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_rejects_oversized_pb_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1689,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1692,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1694,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1697,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1697,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1698,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1699,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1700,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1704,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1705,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1706,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1708,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1708,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1709,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1711,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1711,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1713,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1714,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1715
      start: 1688
    functionDepth: 1
    functionLinenumber: 1688
    functionLinenumberEnd: 1715
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - ASSERT_TRUE
    - bzero
    - memcpy
    - StopServer
    - butil::fd_guard::reset
    - ASSERT_EQ
    - memset
    - socket
    - connect
    - usleep
    - GetSocketFromServer
    - write
    - htons
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_rejects_invalid_pb_bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1718,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1721,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1723,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1724,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1726,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1726,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1727,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1728,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1729,1
    - Dst: MakeValidV3Hello
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1731,1
    - Dst: rdma::RdmaHello::set_sq_size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1732,1
    - Dst: MakeV3Packet
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1734,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1734,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1735,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1735,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1735,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1736,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1740,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1740,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1741,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1741,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1746,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1746,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1747,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1747,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1748,1
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1749,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1751,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1752,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1756,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1757,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1758,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1759,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1759,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1759,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1761,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1763,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1763,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1765,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1717
    functionDepth: 2
    functionLinenumber: 1717
    functionLinenumberEnd: 1766
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - ASSERT_EQ
    - MakeV3Packet
    - usleep
    - reinterpret_cast<uint32_t*>
    - read
    - butil::HostToNet32
    - butil::NetToHost32
    - MakeValidV3Hello
    - ASSERT_TRUE
    - StopServer
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - static_cast<RdmaTransport*>
    - Socket*::_transport::get
    - connect
    - memcmp
    - StartServer
    - std::string::data
    - htons
    - std::string::size
    - rdma::RdmaHello::set_sq_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_invalid_sq_size_falls_back)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1773
      start: 1771
    functionDepth: 0
    functionLinenumber: 1771
    functionLinenumberEnd: 1773
    functionName: EceFlagGuard::EceFlagGuard
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void EceFlagGuard(bool v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1776
      start: 1774
    functionDepth: 0
    functionLinenumber: 1774
    functionLinenumberEnd: 1776
    functionName: ~EceFlagGuard()
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~EceFlagGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeValidV3Hello
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1785,1
    - Dst: rdma::RdmaHello::mutable_ece
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1786,1
    - Dst: rdma::RdmaEce*::set_vendor_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1787,1
    - Dst: rdma::RdmaEce*::set_options
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1788,1
    - Dst: rdma::RdmaEce*::set_comp_mask
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1789,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - vendor_id
    - options
    - comp_mask
    argTypes:
    - uint32_t
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1782
    functionDepth: 2
    functionLinenumber: 1782
    functionLinenumberEnd: 1791
    functionName: MakeValidV3HelloWithEce
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - MakeValidV3Hello
    - rdma::RdmaHello::mutable_ece
    - rdma::RdmaEce*::set_vendor_id
    - rdma::RdmaEce*::set_options
    - rdma::RdmaEce*::set_comp_mask
    linkageType: ''
    returnType: rdma::RdmaHello
    signature: "rdma::RdmaHello MakeValidV3HelloWithEce(uint32_t vendor_id,\n                                        uint32_t
      options,\n                                        uint32_t comp_mask)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1797,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1798,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1798,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1799,1
    - Dst: reinterpret_cast<uint32_t*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1799,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1800,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1801,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1803,1
    - Dst: read
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1804,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1805,1
    - Dst: rdma::RdmaHello*::ParseFromString
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1805,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - fd
    - reply
    argTypes:
    - int
    - rdma::RdmaHello*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1806
      start: 1795
    functionDepth: 1
    functionLinenumber: 1795
    functionLinenumberEnd: 1806
    functionName: ReadServerV3Reply
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - ASSERT_TRUE
    - rdma::RdmaHello*::ParseFromString
    - ASSERT_LE
    - ASSERT_EQ
    - reinterpret_cast<uint32_t*>
    - ASSERT_GT
    - read
    - memcmp
    linkageType: ''
    returnType: void
    signature: void ReadServerV3Reply(int fd, rdma::RdmaHello* reply)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1812,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1815,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1817,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1818,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1819,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1820,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1820,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1821,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1822,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1823,1
    - Dst: MakeValidV3HelloWithEce
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1825,1
    - Dst: MakeV3Packet
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1826,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1827,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1827,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1828,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1828,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1828,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1831,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1832,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1832,1
    - Dst: ReadServerV3Reply
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1835,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1839,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1839,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1841,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1842,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1842,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1844,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1845,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1846,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1846,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1847,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1848
      start: 1810
    functionDepth: 3
    functionLinenumber: 1810
    functionLinenumberEnd: 1848
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - ASSERT_EQ
    - MakeV3Packet
    - usleep
    - butil::HostToNet32
    - ASSERT_TRUE
    - StopServer
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - static_cast<RdmaTransport*>
    - MakeValidV3HelloWithEce
    - Socket*::_transport::get
    - connect
    - StartServer
    - ReadServerV3Reply
    - std::string::data
    - htons
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_accepts_client_hello_with_ece)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1854,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1857,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1859,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1860,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1861,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1862,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1862,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1863,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1864,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1865,1
    - Dst: MakeValidV3HelloWithEce
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1867,1
    - Dst: MakeV3Packet
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1868,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1869,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1869,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1870,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1870,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1870,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1871,1
    - Dst: ReadServerV3Reply
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1874,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1875,1
    - Dst: rdma::RdmaHello::has_ece
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1875,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1877,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1878,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1878,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1879,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1881,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1882,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1883,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1884
      start: 1852
    functionDepth: 3
    functionLinenumber: 1852
    functionLinenumberEnd: 1884
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - ASSERT_EQ
    - MakeV3Packet
    - usleep
    - butil::HostToNet32
    - rdma::RdmaHello::has_ece
    - ASSERT_TRUE
    - StopServer
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - EXPECT_FALSE
    - MakeValidV3HelloWithEce
    - connect
    - StartServer
    - ReadServerV3Reply
    - std::string::data
    - htons
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_reply_has_no_ece_when_disabled)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1891,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1894,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1896,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1897,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1898,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1899,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1899,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1900,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1901,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1902,1
    - Dst: MakeValidV3HelloWithEce
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1904,1
    - Dst: MakeV3Packet
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1905,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1906,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1906,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1907,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1907,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1907,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1908,1
    - Dst: ReadServerV3Reply
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1911,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1912,1
    - Dst: rdma::RdmaHello::has_ece
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1912,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1915,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1915,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1916,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1918,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1919,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1920,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1921
      start: 1889
    functionDepth: 3
    functionLinenumber: 1889
    functionLinenumberEnd: 1921
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - ASSERT_EQ
    - MakeV3Packet
    - usleep
    - butil::HostToNet32
    - rdma::RdmaHello::has_ece
    - ASSERT_TRUE
    - StopServer
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - EXPECT_FALSE
    - MakeValidV3HelloWithEce
    - connect
    - StartServer
    - ReadServerV3Reply
    - std::string::data
    - htons
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, v3_server_reply_has_no_ece_without_hw_negotiation)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - v
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1928
      start: 1925
    functionDepth: 0
    functionLinenumber: 1925
    functionLinenumberEnd: 1928
    functionName: ResourceAllocFailGuard::ResourceAllocFailGuard
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResourceAllocFailGuard(bool v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1931
      start: 1929
    functionDepth: 0
    functionLinenumber: 1929
    functionLinenumberEnd: 1931
    functionName: ~ResourceAllocFailGuard()
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ResourceAllocFailGuard()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1937,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1946,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1946,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1951,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1952,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1953,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1954,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1955,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1958,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1959,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1960,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1961,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1962,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1962,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1964,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1964,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1967,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1968,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1968,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1968,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1970,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1971
      start: 1936
    functionDepth: 1
    functionLinenumber: 1936
    functionLinenumberEnd: 1971
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - DoNothing
    - SocketUniquePtr::_transport::get
    - SocketUniquePtr::Failed
    - StopServer
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - Controller::ErrorCode
    - Controller::ErrorText
    - static_cast<RdmaTransport*>
    - Controller::call_id
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, client_alloc_resource_fail_fallback_tcp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1974,1
    - Dst: bzero
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1978,1
    - Dst: htons
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1980,1
    - Dst: socket
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1981,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1982,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1983,1
    - Dst: connect
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1983,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1984,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1985,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1986,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1987,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1988,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:1988,1
    - Dst: brpc::rdma::GetRdmaGid
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2000,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2003,1
    - Dst: rdma::v2_wire::HelloMessage::Serialize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2005,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2006,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2007,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2008,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2009,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2010,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2011,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2011,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2012,1
    - Dst: Socket*::Failed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2012,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2016,1
    - Dst: write
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2016,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2017,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2018,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2019,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2019,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2020,1
    - Dst: Socket*::Failed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2020,1
    - Dst: butil::fd_guard::reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2022,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2023,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2024,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2024,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2026,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2027
      start: 1973
    functionDepth: 1
    functionLinenumber: 1973
    functionLinenumberEnd: 2027
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - rdma::v2_wire::HelloMessage::Serialize
    - ASSERT_EQ
    - usleep
    - butil::HostToNet32
    - ASSERT_FALSE
    - ASSERT_TRUE
    - memcpy
    - StopServer
    - butil::fd_guard::reset
    - socket
    - write
    - GetSocketFromServer
    - static_cast<RdmaTransport*>
    - Socket*::_transport::get
    - connect
    - StartServer
    - Socket*::Failed
    - brpc::rdma::GetRdmaGid
    - htons
    linkageType: ''
    returnType: void
    signature: void TEST_F(RdmaTest, server_alloc_resource_fail_fallback_tcp)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2030,1
    - Dst: store
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2031,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2039,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2039,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2044,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2045,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2046,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2047,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2048,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2050,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2050,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2051,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2051,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2051,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2052,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2052,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2053,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2053,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2055,1
    - Dst: store
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2056,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2057
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2057
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - SocketUniquePtr::_transport::get
    - StopServer
    - store
    - brpc::SetTrackMeAddress
    - Channel::Init
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - Controller::ErrorCode
    - static_cast<RdmaTransport*>
    - Controller::call_id
    - 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:2066,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2071,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2076,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2076,1
    - Dst: ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2080,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2081,1
    - Dst: Server::Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2081,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2082
      start: 2059
    functionDepth: 0
    functionLinenumber: 2059
    functionLinenumberEnd: 2082
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Server::Start
    - 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:2091,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2094,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2098,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2100,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2104,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2108,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2112,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2116,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2120,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2124,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2128,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2132,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2136,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2140,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2140,1
    - Dst: ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2145,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2146
      start: 2084
    functionDepth: 0
    functionLinenumber: 2084
    functionLinenumberEnd: 2146
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - Channel::Init
    - ASSERT_EQ
    - ChannelOptions::mutable_ssl_options
    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:2153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2161,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2161,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2165,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2166,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2167,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2169,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2170,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2170,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2173
      start: 2148
    functionDepth: 1
    functionLinenumber: 2148
    functionLinenumberEnd: 2173
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - StopServer
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - Controller::ErrorCode
    - test::EchoRequest::set_message
    - Controller::call_id
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, rdma_client_to_rdma_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2183,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2183,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2187,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2188,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2189,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2190,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2191,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2192,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2192,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2195
      start: 2175
    functionDepth: 1
    functionLinenumber: 2175
    functionLinenumberEnd: 2195
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - StopServer
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - Controller::ErrorCode
    - usleep
    - test::EchoRequest::set_message
    - Controller::call_id
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, tcp_client_to_tcp_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2205,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2205,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2209,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2210,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2211,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2212,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2213,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2214,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2214,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2217
      start: 2197
    functionDepth: 1
    functionLinenumber: 2197
    functionLinenumberEnd: 2217
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - StopServer
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - Controller::ErrorCode
    - usleep
    - test::EchoRequest::set_message
    - Controller::call_id
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, tcp_client_to_rdma_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2228,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2228,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2232,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2233,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2234,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2235,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2236,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2236,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2237,1
    - Dst: Controller::Failed
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2237,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2240
      start: 2219
    functionDepth: 1
    functionLinenumber: 2219
    functionLinenumberEnd: 2240
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - DoNothing
    - Controller::Failed
    - StopServer
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - usleep
    - test::EchoRequest::set_message
    - Controller::call_id
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, rdma_client_to_tcp_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2246,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2246,1
    - Dst: DebugInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2246,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2248,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2248,1
    - Dst: DebugInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - client
    - server
    argTypes:
    - Socket*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2249
      start: 2244
    functionDepth: 1
    functionLinenumber: 2244
    functionLinenumberEnd: 2249
    functionName: DumpRdmaEndpointInfo
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - DebugInfo
    - Socket*::_transport::get
    - static_cast<RdmaTransport*>
    linkageType: ''
    returnType: void
    signature: void DumpRdmaEndpointInfo(Socket* client, Socket* server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2264,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2264,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2269,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2271,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2272,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2273,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2276,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2276,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2279,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2279,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2280,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2281,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2283,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2283,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2286,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2287,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2288,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2290,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2291,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2292,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2293,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2296,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2296,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2299,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2299,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2300,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2301,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2303,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2303,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2306,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2307,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2309,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2310,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2311,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2312,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2315,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2315,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2318,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2318,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2319,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2320,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2322,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2322,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2323,1
    - Dst: berror
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2323,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2327,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2327,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2328,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2329,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2329,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2331,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2332
      start: 2251
    functionDepth: 2
    functionLinenumber: 2251
    functionLinenumberEnd: 2332
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DumpRdmaEndpointInfo
    - butil::IOBuf::resize
    - request_attachment
    - LOG
    - ASSERT_EQ
    - ErrorCode
    - ASSERT_TRUE
    - StopServer
    - GetSocketFromServer
    - DoNothing
    - call_id
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - bthread_id_join
    - StartServer
    - berror
    - Channel::Init
    - set_message
    - butil::IOBuf::IOBuf
    - Reset
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, send_rpcs_in_one_qp)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2340,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2340,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2340,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2352,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2353,1
    - Dst: Start
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2353,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2354,1
    - Dst: listen_address
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2354,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2358,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2372,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2372,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2373,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2374,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2375,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2376,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2379,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2379,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2380,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2382,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2382,1
    - Dst: _am::ListConnections
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2385,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2386,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2388,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2389,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2389,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2394,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2394,1
    - Dst: Stop
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2398,1
    - Dst: Join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2399,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2401
      start: 2334
    functionDepth: 2
    functionLinenumber: 2334
    functionLinenumberEnd: 2401
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DumpRdmaEndpointInfo
    - butil::IOBuf::resize
    - request_attachment
    - ASSERT_EQ
    - std::vector::size
    - ErrorCode
    - Start
    - listen_address
    - Join
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - Stop
    - c_str
    - butil::str2ip
    - butil::EndPoint
    - DoNothing
    - _am::ListConnections
    - EXPECT_EQ
    - call_id
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - bthread_id_join
    - Init
    - set_message
    - butil::IOBuf::IOBuf
    - AddService
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, send_rpc_in_many_qp)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2417,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2417,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2422,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2423,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2425,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2426,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2427,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2428,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2431,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2431,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2434,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2434,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2435,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2436,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2438,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2438,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2441,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2442
      start: 2403
    functionDepth: 2
    functionLinenumber: 2403
    functionLinenumberEnd: 2442
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - DumpRdmaEndpointInfo
    - butil::IOBuf::resize
    - call_id
    - SocketUniquePtr::get
    - request_attachment
    - brpc::SetTrackMeAddress
    - StopServer
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - GetSocketFromServer
    - set_message
    - butil::IOBuf::IOBuf
    - ErrorCode
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, send_rpcs_as_pooled_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2458,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2458,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2463,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2464,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2466,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2467,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2468,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2469,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2472,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2472,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2475,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2475,1
    - Dst: GetSocketFromServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2476,1
    - Dst: DumpRdmaEndpointInfo
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2477,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2479,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2479,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2482,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2483
      start: 2444
    functionDepth: 2
    functionLinenumber: 2444
    functionLinenumberEnd: 2483
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - DumpRdmaEndpointInfo
    - butil::IOBuf::resize
    - call_id
    - SocketUniquePtr::get
    - request_attachment
    - brpc::SetTrackMeAddress
    - StopServer
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - GetSocketFromServer
    - set_message
    - butil::IOBuf::IOBuf
    - ErrorCode
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, send_rpcs_as_short_connection)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2498,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2498,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2503,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2504,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2506,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2507,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2508,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2509,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2513,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2513,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2514,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2515,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2516,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2521
      start: 2485
    functionDepth: 1
    functionLinenumber: 2485
    functionLinenumberEnd: 2521
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - ASSERT_TRUE
    - butil::IOBuf::resize
    - call_id
    - StopServer
    - request_attachment
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - set_message
    - butil::IOBuf::IOBuf
    - ErrorCode
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, server_stop_during_rpc)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2536,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2536,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2541,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2542,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2544,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2545,1
    - Dst: set_close_fd
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2547,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2549,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2550,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2554,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2554,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2555,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2556,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2562,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2563
      start: 2523
    functionDepth: 1
    functionLinenumber: 2523
    functionLinenumberEnd: 2563
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - ASSERT_TRUE
    - butil::IOBuf::resize
    - call_id
    - StopServer
    - request_attachment
    - set_close_fd
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - set_message
    - butil::IOBuf::IOBuf
    - ErrorCode
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, server_close_during_rpc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2578,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2578,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2583,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2584,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2586,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2587,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2588,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2589,1
    - Dst: CloseConnection
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2592,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2595,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2595,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2596,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2597,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2602,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2603
      start: 2565
    functionDepth: 1
    functionLinenumber: 2565
    functionLinenumberEnd: 2603
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - ASSERT_TRUE
    - CloseConnection
    - butil::IOBuf::resize
    - call_id
    - StopServer
    - request_attachment
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - set_message
    - butil::IOBuf::IOBuf
    - ErrorCode
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, client_close_during_rpc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2618,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2618,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2623,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2624,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2625,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2626,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2631,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2631,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2633,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2635,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2642,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2642,1
    - Dst: ibv_post_send
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2643,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2644,1
    - Dst: Controller::call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2645,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2645,1
    - Dst: free
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2646,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2649
      start: 2605
    functionDepth: 1
    functionLinenumber: 2605
    functionLinenumberEnd: 2649
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ibv_post_send
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - usleep
    - malloc
    - StopServer
    - Controller::ErrorCode
    - test::EchoRequest::set_message
    - static_cast<RdmaTransport*>
    - DoNothing
    - brpc::SetTrackMeAddress
    - free
    - memset
    - bthread_id_join
    - Controller::call_id
    - StartServer
    - SocketUniquePtr::_transport::get
    - Channel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, verbs_error_handling)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2664,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2664,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2665,1
    - Dst: ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2669,1
    - Dst: ParallelChannel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2669,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2674,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2677,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2678,1
    - Dst: Controller::sub_count
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2678,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2680,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2681
      start: 2651
    functionDepth: 1
    functionLinenumber: 2651
    functionLinenumberEnd: 2681
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ParallelChannel::AddChannel
    - StopServer
    - Init
    - Controller::sub_count
    - Controller::ErrorCode
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - ParallelChannel::Init
    - c_str
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, rdma_use_parallel_channel)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2694,1
    - Dst: SelectiveChannel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2694,1
    - Dst: Channel::Channel
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2697,1
    - Dst: Channel*::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2697,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2698,1
    - Dst: SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2698,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2704,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2707,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2707,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2708,1
    - Dst: Controller::sub_count
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2708,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2710,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2711
      start: 2683
    functionDepth: 1
    functionLinenumber: 2683
    functionLinenumberEnd: 2711
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - Channel*::Init
    - StopServer
    - Controller::sub_count
    - Controller::ErrorCode
    - ASSERT_EQ
    - Controller::ErrorText
    - SelectiveChannel::AddChannel
    - SelectiveChannel::Init
    - test::EchoRequest::set_message
    - c_str
    - Channel::Channel
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, 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: 2713
      start: 2713
    functionDepth: 0
    functionLinenumber: 2713
    functionLinenumberEnd: 2713
    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:2720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2728,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2728,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2733,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2734,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2735,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2736,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2737,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2738,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2739,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2740,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2741,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2741,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2742,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2743,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2744,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2749,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2750,1
    - Dst: brpc::rdma::RegisterMemoryForRdma
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2751,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2752,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2753,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2754,1
    - Dst: memset
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2755,1
    - Dst: brpc::rdma::RegisterMemoryForRdma
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2756,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2757,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2758,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2759,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2760,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2761,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2764,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2764,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2765,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2765,1
    - Dst: brpc::rdma::DeregisterMemoryForRdma
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2766,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2767,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2767,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2769,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2770,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2771,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2771,1
    - Dst: free
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2772,1
    - Dst: free
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2773,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2776,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2777
      start: 2715
    functionDepth: 1
    functionLinenumber: 2715
    functionLinenumberEnd: 2777
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - request_attachment
    - ASSERT_EQ
    - ErrorCode
    - butil::IOBuf::append_user_data
    - malloc
    - brpc::rdma::RegisterMemoryForRdma
    - ASSERT_TRUE
    - StopServer
    - response_attachment
    - sleep
    - DoNothing
    - call_id
    - free
    - butil::IOBuf::clear
    - bthread_id_join
    - memset
    - memcmp
    - StartServer
    - brpc::rdma::DeregisterMemoryForRdma
    - Channel::Init
    - set_message
    - butil::IOBuf::IOBuf
    - Reset
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, send_rpcs_with_user_defined_iobuf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: StartServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2792,1
    - Dst: Channel::Init
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2792,1
    - Dst: resize
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2799,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2806,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2807,1
    - Dst: DoNothing
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2808,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2809,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2812,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2812,1
    - Dst: StopServer
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2815,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2816
      start: 2779
    functionDepth: 1
    functionLinenumber: 2779
    functionLinenumberEnd: 2816
    functionName: TEST_P
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - DoNothing
    - call_id
    - StopServer
    - request_attachment
    - Channel::Init
    - ASSERT_EQ
    - bthread_id_join
    - set_message
    - resize
    - StartServer
    linkageType: ''
    returnType: void
    signature: void TEST_P(RdmaRpcTest, try_memory_pool_empty)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2834,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2835,1
    - Dst: store
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2842,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_rdma_unittest.cpp:2846,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2847
      start: 2833
    functionDepth: 0
    functionLinenumber: 2833
    functionLinenumberEnd: 2847
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_rdma_unittest.cpp
    functionUses: 0
    functionsReached:
    - store
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - 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::length
    - std::string*::length
    - butil::TruncateUTF8ToByteSize
    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::length
    - std::string*::length
    - butil::TruncateUTF8ToByteSize
    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_EQ
    - std::string
    - butil::Truncated
    - std::string::compare
    - EXPECT_TRUE
    - EXPECT_FALSE
    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
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    - butil::WideToUTF16
    - butil::TrimWhitespace
    - arraysize
    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::CollapseWhitespace
    - EXPECT_EQ
    - butil::WideToUTF16
    - arraysize
    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:
    - butil::CollapseWhitespaceASCII
    - EXPECT_EQ
    - 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_FALSE
    - EXPECT_TRUE
    - std::string
    - butil::IsStringUTF8
    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_EQ
    - butil::ASCIIToUTF16
    - butil::WideToUTF16
    - butil::ASCIIToWide
    - static_cast<std::wstring::size_type>
    - std::string::compare
    - butil::IsStringASCII
    - EXPECT_TRUE
    - EXPECT_FALSE
    - std::wstring::length
    - std::string::length
    - static_cast<std::string::size_type>
    - butil::UTF16ToASCII
    - arraysize
    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:
    - butil::ToUpperASCII
    - EXPECT_EQ
    - 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:
    - LowerCaseEqualsASCII
    - EXPECT_TRUE
    - 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:
    - butil::ASCIIToUTF16
    - ARRAYSIZE_UNSAFE
    - FormatBytesUnlocalized
    - EXPECT_EQ
    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:
    - ReplaceSubstringsAfterOffset
    - butil::ASCIIToUTF16
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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:
    - ReplaceFirstSubstringAfterOffset
    - butil::ASCIIToUTF16
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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:
    - HexDigitToInt
    - EXPECT_EQ
    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_start
    - EXPECT_EQ
    - GG_VA_COPY
    - va_end
    - va_arg
    - 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:
    - STR
    - EXPECT_EQ
    - std::vector::clear
    - ASSERT_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:
    - std::string
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    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:
    - std::string
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    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
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - JoinString
    - EXPECT_EQ
    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:
    - string16
    - butil::ASCIIToUTF16
    - std::string
    - StartsWithASCII
    - EXPECT_TRUE
    - EXPECT_FALSE
    - StartsWith
    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:
    - string16
    - butil::ASCIIToUTF16
    - EXPECT_TRUE
    - EndsWith
    - EXPECT_FALSE
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - EXPECT_EQ
    - std::vector::clear
    - std::vector::size
    - ReplaceStringPlaceholders
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - EXPECT_EQ
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - EXPECT_EQ
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - MatchPattern
    - 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:
    - butil::wcslcpy
    - EXPECT_EQ
    - static_cast<wchar_t>
    - butil::strlcpy
    - memcmp
    - arraysize
    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:
    - butil::IsWprintfFormatPortable
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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_EQ
    - std::string
    - butil::RemoveChars
    - EXPECT_TRUE
    - std::string::clear
    - EXPECT_FALSE
    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:
    - ARRAYSIZE_UNSAFE
    - butil::ReplaceChars
    - EXPECT_EQ
    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:
    - string16
    - butil::ASCIIToUTF16
    - std::string
    - EXPECT_TRUE
    - butil::ContainsOnlyChars
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - std::string::c_str
    - strncpy
    - std::string
    - std::min
    - WriteInto
    - std::string::size
    - arraysize
    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:
    - EXPECT_EQ
    - strncpy
    - WriteInto
    - WritesCorrectly
    - 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::length
    - std::string*::length
    - butil::TruncateUTF8ToByteSize
    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::length
    - std::string*::length
    - butil::TruncateUTF8ToByteSize
    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_EQ
    - std::string
    - butil::Truncated
    - std::string::compare
    - EXPECT_TRUE
    - EXPECT_FALSE
    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
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    - butil::WideToUTF16
    - butil::TrimWhitespace
    - arraysize
    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::CollapseWhitespace
    - EXPECT_EQ
    - butil::WideToUTF16
    - arraysize
    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:
    - butil::CollapseWhitespaceASCII
    - EXPECT_EQ
    - 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_FALSE
    - EXPECT_TRUE
    - std::string
    - butil::IsStringUTF8
    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_EQ
    - butil::ASCIIToUTF16
    - butil::WideToUTF16
    - butil::ASCIIToWide
    - static_cast<std::wstring::size_type>
    - std::string::compare
    - butil::IsStringASCII
    - EXPECT_TRUE
    - EXPECT_FALSE
    - std::wstring::length
    - std::string::length
    - static_cast<std::string::size_type>
    - butil::UTF16ToASCII
    - arraysize
    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:
    - butil::ToUpperASCII
    - EXPECT_EQ
    - 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:
    - LowerCaseEqualsASCII
    - EXPECT_TRUE
    - 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:
    - butil::ASCIIToUTF16
    - ARRAYSIZE_UNSAFE
    - FormatBytesUnlocalized
    - EXPECT_EQ
    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:
    - ReplaceSubstringsAfterOffset
    - butil::ASCIIToUTF16
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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:
    - ReplaceFirstSubstringAfterOffset
    - butil::ASCIIToUTF16
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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:
    - HexDigitToInt
    - EXPECT_EQ
    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_start
    - EXPECT_EQ
    - GG_VA_COPY
    - va_end
    - va_arg
    - 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:
    - STR
    - EXPECT_EQ
    - std::vector::clear
    - ASSERT_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:
    - std::string
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    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:
    - std::string
    - EXPECT_EQ
    - std::vector::push_back
    - JoinString
    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
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - JoinString
    - EXPECT_EQ
    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:
    - string16
    - butil::ASCIIToUTF16
    - std::string
    - StartsWithASCII
    - EXPECT_TRUE
    - EXPECT_FALSE
    - StartsWith
    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:
    - string16
    - butil::ASCIIToUTF16
    - EXPECT_TRUE
    - EndsWith
    - EXPECT_FALSE
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - EXPECT_EQ
    - std::vector::clear
    - std::vector::size
    - ReplaceStringPlaceholders
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - EXPECT_EQ
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - EXPECT_EQ
    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:
    - butil::ASCIIToUTF16
    - std::vector::push_back
    - ReplaceStringPlaceholders
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - MatchPattern
    - 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:
    - butil::wcslcpy
    - EXPECT_EQ
    - static_cast<wchar_t>
    - butil::strlcpy
    - memcmp
    - arraysize
    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:
    - butil::IsWprintfFormatPortable
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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_EQ
    - std::string
    - butil::RemoveChars
    - EXPECT_TRUE
    - std::string::clear
    - EXPECT_FALSE
    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:
    - ARRAYSIZE_UNSAFE
    - butil::ReplaceChars
    - EXPECT_EQ
    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:
    - string16
    - butil::ASCIIToUTF16
    - std::string
    - EXPECT_TRUE
    - butil::ContainsOnlyChars
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - std::string::c_str
    - strncpy
    - std::string
    - std::min
    - WriteInto
    - std::string::size
    - arraysize
    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:
    - EXPECT_EQ
    - strncpy
    - WriteInto
    - WritesCorrectly
    - 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: 1
    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
    - Unretained
    - Bind
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Summer::value
    - Unretained
    - Bind
    - CallbackList::Notify
    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: 0
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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: 0
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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
    - EXPECT_EQ
    - Remover::total
    - total
    - Unretained
    - Listener::total
    - Bind
    - CallbackList::Notify
    - scoped_ptr::Pass
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Adder::added
    - Unretained
    - Listener::total
    - Bind
    - Adder::total
    - CallbackList::Notify
    - EXPECT_TRUE
    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: 1
    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
    - Unretained
    - Bind
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Summer::value
    - Unretained
    - Bind
    - CallbackList::Notify
    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: 0
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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: 0
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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
    - EXPECT_EQ
    - Remover::total
    - total
    - Unretained
    - Listener::total
    - Bind
    - CallbackList::Notify
    - scoped_ptr::Pass
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Adder::added
    - Unretained
    - Listener::total
    - Bind
    - Adder::total
    - CallbackList::Notify
    - EXPECT_TRUE
    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: 1
    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
    - Unretained
    - Bind
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Summer::value
    - Unretained
    - Bind
    - CallbackList::Notify
    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: 0
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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: 0
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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
    - EXPECT_EQ
    - Remover::total
    - total
    - Unretained
    - Listener::total
    - Bind
    - CallbackList::Notify
    - scoped_ptr::Pass
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Adder::added
    - Unretained
    - Listener::total
    - Bind
    - Adder::total
    - CallbackList::Notify
    - EXPECT_TRUE
    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: 1
    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
    - Unretained
    - Bind
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Summer::value
    - Unretained
    - Bind
    - CallbackList::Notify
    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: 0
    functionLinenumber: 150
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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: 0
    functionLinenumber: 185
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/callback_list_unittest.cc
    functionUses: 0
    functionsReached:
    - CallbackList::Add
    - scoped_ptr::reset
    - EXPECT_EQ
    - total
    - Unretained
    - Listener::total
    - Bind
    - EXPECT_TRUE
    - CallbackList::Notify
    - scoped_ptr::get
    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
    - EXPECT_EQ
    - Remover::total
    - total
    - Unretained
    - Listener::total
    - Bind
    - CallbackList::Notify
    - scoped_ptr::Pass
    - SetSubscriptionToRemove
    - Remover::SetSubscriptionToRemove
    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:
    - CallbackList::Add
    - EXPECT_EQ
    - Adder::added
    - Unretained
    - Listener::total
    - Bind
    - Adder::total
    - CallbackList::Notify
    - EXPECT_TRUE
    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:
    - ASSERT_EQ
    - brpc::MakeVRef
    - butil::atomic::fetch_add
    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:
    - ASSERT_EQ
    - fetch_add
    - brpc::SetTrackMeAddress
    - UserDataUniquePtr::count::fetch_add
    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:
    - sleep
    - ASSERT_FALSE
    - pthread_create
    - UserDataUniquePtr::Revive
    - UserDataUniquePtr::SetFailed
    - ASSERT_TRUE
    - brpc::VersionedRefWithId<T>::SetFailedById
    - brpc::SetTrackMeAddress
    - ASSERT_NE
    - UserDataUniquePtr::get
    - pthread_join
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - ASSERT_EQ
    - UserDataUniquePtr::Failed
    - UserDataUniquePtr::nref
    - brpc::Stream::Create
    - UserDataUniquePtr::reset
    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: free
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:206,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:210,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:211,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:211,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:212,1
    - Dst: static_cast<SocketExtra*>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:217,1
    - Dst: brpc::user
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:217,1
    - Dst: read
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:220,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:220,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:226,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:227,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:227,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:228,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:229,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:229,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:245,1
    - Dst: brpc::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:245,1
    - Dst: OnEdgeTriggeredEventOnce
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:256,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:257,1
    - Dst: MoreReadEvents
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:260,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 48
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 262
    functionName: brpc::SocketUser
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - brpc::fd
    - SetFailed
    - PLOG
    - MoreReadEvents
    - brpc::user
    - pthread_mutex_lock
    - OnEdgeTriggeredEventOnce
    - free
    - static_cast<SocketExtra*>
    - LOG
    - pthread_mutex_unlock
    - read
    - push_back
    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: free
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp: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: ~SocketExtra()
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - free
    linkageType: ''
    returnType: void
    signature: void ~SocketExtra()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:210,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:211,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:211,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 214
    functionName: BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Socket*::fd
    - pthread_mutex_lock
    - push_back
    - pthread_mutex_unlock
    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:217,1
    - Dst: brpc::Socket*::user
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:217,1
    - Dst: read
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:220,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:220,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:226,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:227,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:227,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:228,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:229,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:229,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:245,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:245,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 1
    argNames:
    - m
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 251
    functionName: OnEdgeTriggeredEventOnce
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::Socket*::fd
    - PLOG
    - brpc::Socket*::user
    - pthread_mutex_lock
    - static_cast<SocketExtra*>
    - LOG
    - pthread_mutex_unlock
    - read
    - push_back
    linkageType: ''
    returnType: int
    signature: int OnEdgeTriggeredEventOnce(brpc::Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OnEdgeTriggeredEventOnce
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:256,1
    - Dst: brpc::Socket*::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:257,1
    - Dst: brpc::Socket*::MoreReadEvents
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:260,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - m
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 253
    functionDepth: 2
    functionLinenumber: 253
    functionLinenumberEnd: 261
    functionName: OnEdgeTriggeredEvents
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnEdgeTriggeredEventOnce
    - brpc::Socket*::SetFailed
    - brpc::Socket*::MoreReadEvents
    linkageType: ''
    returnType: void
    signature: void OnEdgeTriggeredEvents(brpc::Socket* m)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:270,1
    - Dst: write
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:277,1
    - Dst: writev
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:284,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:288,1
    - Dst: free
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:300,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:301,1
    - Dst: close
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:301,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 303
    functionName: client_thread
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - EXPECT_EQ
    - PLOG
    - free
    - write
    - close
    - writev
    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: 312
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 312
    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: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::describe_resources<brpc::Socket>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:331,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:331,1
    - Dst: SocketExtra::SocketExtra
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:332,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:342,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:342,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:348,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:351,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:352,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:353,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:354,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:355,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:356,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:357,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:358,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:366,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:366,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:367,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:372,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:374,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:377,1
    - Dst: std::vector::swap
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:378,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:379,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:380,1
    - Dst: swap
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:381,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:382,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:384,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:384,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:384,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:385,1
    - Dst: begin
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:385,1
    - Dst: end
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:386,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:386,1
    - Dst: size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:386,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:390,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:390,1
    - Dst: butil::describe_resources<brpc::Socket>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:392,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:395,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:402,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:403,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 407
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - pthread_mutex_lock
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - swap
    - std::vector::size
    - begin
    - pthread_create
    - butil::Timer::stop
    - Socket::Create
    - std::vector::end
    - butil::Timer::Timer
    - ProfilerStart
    - size
    - std::vector::swap
    - sleep
    - butil::describe_resources<brpc::Socket>
    - SocketExtra::SocketExtra
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - ProfilerStop
    - std::vector::begin
    - std::sort
    - socketpair
    - end
    - butil::make_non_blocking
    - pthread_mutex_unlock
    - ClientMeta::ClientMeta
    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: 427
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 427
    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:431,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:432,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 436
    functionName: EventPipe::Notify
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - write
    - PLOG
    linkageType: ''
    returnType: int
    signature: int Notify()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:443,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:444,1
    - Dst: Init
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:447,1
    - Dst: id
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:447,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:448,1
    - Dst: set_bthread_tag
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:451,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:451,1
    - Dst: AddConsumer
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:452,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:453,1
    - Dst: id
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:453,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 461
    functionName: EventPipe::OnCreated
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - PLOG
    - Init
    - LOG
    - AddConsumer
    - bthread_self_tag
    - id
    - set_bthread_tag
    linkageType: ''
    returnType: int
    signature: int OnCreated()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetGlobalEventDispatcher
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:464,1
    - Dst: bthread_self_tag
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:464,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:466,1
    - Dst: close
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:468,1
    - Dst: close
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:471,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 463
    functionDepth: 1
    functionLinenumber: 463
    functionLinenumberEnd: 473
    functionName: EventPipe::BeforeRecycled
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - close
    - bthread_self_tag
    - brpc::GetGlobalEventDispatcher
    - Reset
    linkageType: ''
    returnType: void
    signature: void BeforeRecycled()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<EventPipeId>
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:477,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:480,1
    - Dst: read
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:485,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:485,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:490,1
    - Dst: EventPipeUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:491,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 475
    functionDepth: 1
    functionLinenumber: 475
    functionLinenumberEnd: 498
    functionName: EventPipe::OnInputEvent
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - reinterpret_cast<EventPipeId>
    - brpc::SetTrackMeAddress
    - LOG
    - EventPipeUniquePtr::SetFailed
    - read
    - arraysize
    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:502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 500
    functionDepth: 0
    functionLinenumber: 500
    functionLinenumberEnd: 504
    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:514,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:514,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:517,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:518,1
    - Dst: EventPipeUniquePtr::nref
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:518,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:519,1
    - Dst: EventPipeUniquePtr::Failed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:519,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:524,1
    - Dst: EventPipeUniquePtr::Notify
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:524,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:529,1
    - Dst: EventPipeUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:530,1
    - Dst: EventPipeUniquePtr::Failed
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:530,1
    - Dst: EventPipeUniquePtr::reset
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:532,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:533,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_event_dispatcher_unittest.cpp:533,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_event_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - EventPipeUniquePtr::reset
    - ASSERT_FALSE
    - EventPipeUniquePtr::Notify
    - ASSERT_TRUE
    - EventPipeUniquePtr::Failed
    - brpc::SetTrackMeAddress
    - ASSERT_NE
    - EventPipeUniquePtr::nref
    - EventPipeUniquePtr::SetFailed
    - ASSERT_EQ
    - brpc::Stream::Create
    - usleep
    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:
    - BasicStringPiece::capacity
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - BasicStringPiece::empty
    - BasicStringPiece::end
    - BasicStringPiece::rend
    - ASSERT_GE
    - BasicStringPiece::max_size
    - static_cast<typename TypeParam::value_type>
    - ASSERT_EQ
    - BasicStringPiece::rbegin
    - BasicStringPiece::begin
    - BasicStringPiece::clear
    - BasicStringPiece::data
    - BasicStringPiece::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:
    - BasicStringPiece::substr
    - BasicStringPiece::find_last_not_of
    - ASSERT_EQ
    - static_cast<size_t>
    - BasicStringPiece::clear
    - Piece
    - Piece::find_first_not_of
    - BasicStringPiece::size
    - BasicStringPiece::copy
    - std::string
    - TypeParam::push_back
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece::as_string
    - TypeParam
    - BasicStringPiece::rfind
    - Piece::find_last_of
    - BasicStringPiece::find_first_not_of
    - Piece::rfind
    - BasicStringPiece::find_last_of
    - Piece::find_last_not_of
    - Piece::find
    - Piece::find_first_of
    - Piece::size
    - BasicStringPiece::find
    - BasicStringPiece::find_first_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:
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - BasicStringPiece::as_string
    - BasicStringPiece::remove_prefix
    - BasicStringPiece::set
    - ASSERT_NE
    - TypeParam::empty
    - static_cast<typename TypeParam::value_type>
    - ASSERT_EQ
    - BasicStringPiece::remove_suffix
    - TypeParam::c_str
    - BasicStringPiece::size
    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: 0
    functionLinenumber: 521
    functionLinenumberEnd: 580
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - StringPiece::ends_with
    - ASSERT_TRUE
    - std::string::empty
    - StringPiece::set
    - ASSERT_NE
    - StringPiece::CopyToString
    - StringPiece::starts_with
    - ASSERT_EQ
    - StringPiece::AppendToString
    - std::string::erase
    - std::string::size
    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:
    - BasicStringPiece::as_string
    - TypeParam
    - BasicStringPiece::set
    - ASSERT_EQ
    - TypeParam::length
    - BasicStringPiece::data
    - BasicStringPiece::size
    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:
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - BasicStringPiece::compare
    - abc < BasicStringPiece<TypeParam>
    - 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:
    - StringPiece::ends_with
    - ASSERT_TRUE
    - 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:
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    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
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece<TypeParam>
    - ASSERT_TRUE
    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:
    - StringPiece16::size
    - butil::ASCIIToUTF16
    - static_cast<char16>
    - string16::push_back
    - ASSERT_EQ
    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:
    - StringPiece16
    - ASSERT_EQ
    - butil::UTF16ToUTF8
    - butil::UTF8ToUTF16
    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:
    - TypeParam::begin
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - TypeParam::end
    - BasicStringPiece<TypeParam>
    - static_cast<typename BasicStringPiece<TypeParam>::size_type>
    - TypeParam::c_str
    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:
    - BasicStringPiece::capacity
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - BasicStringPiece::empty
    - BasicStringPiece::end
    - BasicStringPiece::rend
    - ASSERT_GE
    - BasicStringPiece::max_size
    - static_cast<typename TypeParam::value_type>
    - ASSERT_EQ
    - BasicStringPiece::rbegin
    - BasicStringPiece::begin
    - BasicStringPiece::clear
    - BasicStringPiece::data
    - BasicStringPiece::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:
    - BasicStringPiece::substr
    - BasicStringPiece::find_last_not_of
    - ASSERT_EQ
    - static_cast<size_t>
    - BasicStringPiece::clear
    - Piece
    - Piece::find_first_not_of
    - BasicStringPiece::size
    - BasicStringPiece::copy
    - std::string
    - TypeParam::push_back
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece::as_string
    - TypeParam
    - BasicStringPiece::rfind
    - Piece::find_last_of
    - BasicStringPiece::find_first_not_of
    - Piece::rfind
    - BasicStringPiece::find_last_of
    - Piece::find_last_not_of
    - Piece::find
    - Piece::find_first_of
    - Piece::size
    - BasicStringPiece::find
    - BasicStringPiece::find_first_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:
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - BasicStringPiece::as_string
    - BasicStringPiece::remove_prefix
    - BasicStringPiece::set
    - ASSERT_NE
    - TypeParam::empty
    - static_cast<typename TypeParam::value_type>
    - ASSERT_EQ
    - BasicStringPiece::remove_suffix
    - TypeParam::c_str
    - BasicStringPiece::size
    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: 0
    functionLinenumber: 521
    functionLinenumberEnd: 580
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/string_piece_unittest.cc
    functionUses: 0
    functionsReached:
    - StringPiece::ends_with
    - ASSERT_TRUE
    - std::string::empty
    - StringPiece::set
    - ASSERT_NE
    - StringPiece::CopyToString
    - StringPiece::starts_with
    - ASSERT_EQ
    - StringPiece::AppendToString
    - std::string::erase
    - std::string::size
    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:
    - BasicStringPiece::as_string
    - TypeParam
    - BasicStringPiece::set
    - ASSERT_EQ
    - TypeParam::length
    - BasicStringPiece::data
    - BasicStringPiece::size
    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:
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - BasicStringPiece::compare
    - abc < BasicStringPiece<TypeParam>
    - 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:
    - StringPiece::ends_with
    - ASSERT_TRUE
    - 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:
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    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
    - butil::CommonStringPieceTest::as_string
    - BasicStringPiece<TypeParam>
    - ASSERT_TRUE
    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:
    - StringPiece16::size
    - butil::ASCIIToUTF16
    - static_cast<char16>
    - string16::push_back
    - ASSERT_EQ
    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:
    - StringPiece16
    - ASSERT_EQ
    - butil::UTF16ToUTF8
    - butil::UTF8ToUTF16
    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:
    - TypeParam::begin
    - butil::CommonStringPieceTest::as_string
    - ASSERT_TRUE
    - TypeParam::end
    - BasicStringPiece<TypeParam>
    - static_cast<typename BasicStringPiece<TypeParam>::size_type>
    - TypeParam::c_str
    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:
    - PCHECK
    - butil::snprintf
    - strcmp
    - HuluTest::VerifyMessage
    - DirReaderPosix::name
    - DirReaderPosix::IsValid
    - chdir
    - ASSERT_TRUE
    - strtoul
    - fchdir
    - EXPECT_TRUE
    - open
    - DirReaderPosix::Next
    - DCHECK_GE
    - mkdtemp
    - std::set::size
    - EXPECT_FALSE
    - EXPECT_EQ
    - rmdir
    - SCOPED_TRACE
    - std::set::insert
    - std::set::count
    - unlink
    - EXPECT_LT
    - butil::DirReaderUnix::IsFallback
    - close
    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:
    - PCHECK
    - butil::snprintf
    - strcmp
    - HuluTest::VerifyMessage
    - DirReaderPosix::name
    - DirReaderPosix::IsValid
    - chdir
    - ASSERT_TRUE
    - strtoul
    - fchdir
    - EXPECT_TRUE
    - open
    - DirReaderPosix::Next
    - DCHECK_GE
    - mkdtemp
    - std::set::size
    - EXPECT_FALSE
    - EXPECT_EQ
    - rmdir
    - SCOPED_TRACE
    - std::set::insert
    - std::set::count
    - unlink
    - EXPECT_LT
    - butil::DirReaderUnix::IsFallback
    - close
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - butil::PlatformThread::Sleep
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - 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:
    - SharedMemory::CreateNamedDeprecated
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::LockDeprecated
    - butil::PlatformThread::Sleep
    - SharedMemory::ShareToProcess
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - static_cast<int*>
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - butil::PlatformThread::Sleep
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - 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:
    - SharedMemory::CreateNamedDeprecated
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::LockDeprecated
    - butil::PlatformThread::Sleep
    - SharedMemory::ShareToProcess
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - static_cast<int*>
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - EXPECT_NE
    - static_cast<void*>
    - ASSERT_NE
    - memcmp
    - EXPECT_TRUE
    - memset
    - static_cast<char *>
    - SharedMemory::Delete
    - SharedMemory::Map
    - SharedMemory::Open
    - EXPECT_FALSE
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - butil::Time::Now
    - SharedMemory::requested_size
    - SharedMemory::mapped_size
    - butil::SysInfo::VMAllocationGranularity
    - EXPECT_TRUE
    - EXPECT_LT
    - memset
    - static_cast<char *>
    - SharedMemory::Delete
    - std::ostringstream::str
    - EXPECT_GE
    - SharedMemory::Map
    - EXPECT_FALSE
    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:
    - scoped_ptr::reset
    - butil::PlatformThread::Join
    - arraysize
    - butil::MultipleThreadMain::CleanUp
    - MultipleThreadMain::MultipleThreadMain
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    - scoped_ptr::scoped_ptr
    - PlatformThreadHandle::PlatformThreadHandle
    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::Create
    - EXPECT_TRUE
    - butil::PlatformThread::Join
    - MultipleLockThread::MultipleLockThread
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - CreateAndMapAnonymous
    - memory
    - int::int
    - Close
    - SharedMemory::SharedMemory
    - EXPECT_TRUE
    - scoped_ptr::get
    - static_cast<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:
    - mmap
    - SharedMemory::handle
    - strerror
    - SharedMemory::mapped_size
    - GetCurrentProcessHandle
    - writable_handle
    - GetCurrentProcess
    - ASSERT_TRUE
    - StringPiece
    - memcpy
    - fcntl
    - EXPECT_TRUE
    - SharedMemory::Map
    - munmap
    - SharedMemory::Unmap
    - EXPECT_EQ
    - SharedMemory::memory
    - StringPiece::data
    - SharedMemory::Create
    - ::DuplicateHandle
    - StringPiece::size
    - static_cast<const char*>
    - SharedMemory::ShareReadOnlyToProcess
    - MapViewOfFile
    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:
    - SharedMemory::Unmap
    - EXPECT_EQ
    - ASSERT_TRUE
    - SharedMemory::memory
    - memcpy
    - StringPiece::size
    - StringPiece
    - GetCurrentProcessHandle
    - SharedMemory::CreateAndMapAnonymous
    - SharedMemory::ShareToProcess
    - EXPECT_TRUE
    - static_cast<const char*>
    - StringPiece::data
    - SharedMemory::Map
    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:
    - SharedMemory::Unmap
    - EXPECT_EQ
    - ASSERT_TRUE
    - SharedMemory::memory
    - static_cast<void*>
    - ASSERT_NE
    - SharedMemory::MapAt
    - SharedMemory::CreateAndMapAnonymous
    - static_cast<uint32_t*>
    - 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_EQ
    - SharedMemory::memory
    - SharedMemory::CreateAndMapAnonymous
    - EXPECT_TRUE
    - SharedMemory::Map
    - EXPECT_FALSE
    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:
    - SharedMemory::Create
    - EXPECT_EQ
    - SharedMemory::memory
    - SharedMemory::requested_size
    - EXPECT_TRUE
    - SharedMemory::Map
    - mprotect
    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:
    - SharedMemory::Create
    - EXPECT_EQ
    - fstat
    - SharedMemory::handle
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - SharedMemory::Create
    - EXPECT_EQ
    - fstat
    - SharedMemory::handle
    - EXPECT_TRUE
    - butil::Uint64ToString
    - butil::RandUint64
    - butil::IntToString
    - getpid
    - SharedMemory::Delete
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::CreateAndMapAnonymous
    - 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:
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::LockDeprecated
    - butil::PlatformThread::Sleep
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - static_cast<int*>
    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:
    - EXPECT_EQ
    - WaitForExitCode
    - ASSERT_TRUE
    - SpawnChild
    - EXPECT_TRUE
    - butil::SharedMemoryProcessTest::CleanUp
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - butil::PlatformThread::Sleep
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - 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:
    - SharedMemory::CreateNamedDeprecated
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::LockDeprecated
    - butil::PlatformThread::Sleep
    - SharedMemory::ShareToProcess
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - static_cast<int*>
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - butil::PlatformThread::Sleep
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - 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:
    - SharedMemory::CreateNamedDeprecated
    - GetCurrentProcess
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::LockDeprecated
    - butil::PlatformThread::Sleep
    - SharedMemory::ShareToProcess
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - static_cast<int*>
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - EXPECT_NE
    - static_cast<void*>
    - ASSERT_NE
    - memcmp
    - EXPECT_TRUE
    - memset
    - static_cast<char *>
    - SharedMemory::Delete
    - SharedMemory::Map
    - SharedMemory::Open
    - EXPECT_FALSE
    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:
    - SharedMemory::CreateNamedDeprecated
    - EXPECT_EQ
    - SharedMemory::Close
    - SharedMemory::memory
    - butil::Time::Now
    - SharedMemory::requested_size
    - SharedMemory::mapped_size
    - butil::SysInfo::VMAllocationGranularity
    - EXPECT_TRUE
    - EXPECT_LT
    - memset
    - static_cast<char *>
    - SharedMemory::Delete
    - std::ostringstream::str
    - EXPECT_GE
    - SharedMemory::Map
    - EXPECT_FALSE
    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:
    - scoped_ptr::reset
    - butil::PlatformThread::Join
    - arraysize
    - butil::MultipleThreadMain::CleanUp
    - MultipleThreadMain::MultipleThreadMain
    - butil::PlatformThread::Create
    - EXPECT_TRUE
    - scoped_ptr::scoped_ptr
    - PlatformThreadHandle::PlatformThreadHandle
    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::Create
    - EXPECT_TRUE
    - butil::PlatformThread::Join
    - MultipleLockThread::MultipleLockThread
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - CreateAndMapAnonymous
    - memory
    - int::int
    - Close
    - SharedMemory::SharedMemory
    - EXPECT_TRUE
    - scoped_ptr::get
    - static_cast<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:
    - mmap
    - SharedMemory::handle
    - strerror
    - SharedMemory::mapped_size
    - GetCurrentProcessHandle
    - writable_handle
    - GetCurrentProcess
    - ASSERT_TRUE
    - StringPiece
    - memcpy
    - fcntl
    - EXPECT_TRUE
    - SharedMemory::Map
    - munmap
    - SharedMemory::Unmap
    - EXPECT_EQ
    - SharedMemory::memory
    - StringPiece::data
    - SharedMemory::Create
    - ::DuplicateHandle
    - StringPiece::size
    - static_cast<const char*>
    - SharedMemory::ShareReadOnlyToProcess
    - MapViewOfFile
    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:
    - SharedMemory::Unmap
    - EXPECT_EQ
    - ASSERT_TRUE
    - SharedMemory::memory
    - memcpy
    - StringPiece::size
    - StringPiece
    - GetCurrentProcessHandle
    - SharedMemory::CreateAndMapAnonymous
    - SharedMemory::ShareToProcess
    - EXPECT_TRUE
    - static_cast<const char*>
    - StringPiece::data
    - SharedMemory::Map
    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:
    - SharedMemory::Unmap
    - EXPECT_EQ
    - ASSERT_TRUE
    - SharedMemory::memory
    - static_cast<void*>
    - ASSERT_NE
    - SharedMemory::MapAt
    - SharedMemory::CreateAndMapAnonymous
    - static_cast<uint32_t*>
    - 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_EQ
    - SharedMemory::memory
    - SharedMemory::CreateAndMapAnonymous
    - EXPECT_TRUE
    - SharedMemory::Map
    - EXPECT_FALSE
    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:
    - SharedMemory::Create
    - EXPECT_EQ
    - SharedMemory::memory
    - SharedMemory::requested_size
    - EXPECT_TRUE
    - SharedMemory::Map
    - mprotect
    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:
    - SharedMemory::Create
    - EXPECT_EQ
    - fstat
    - SharedMemory::handle
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - SharedMemory::Create
    - EXPECT_EQ
    - fstat
    - SharedMemory::handle
    - EXPECT_TRUE
    - butil::Uint64ToString
    - butil::RandUint64
    - butil::IntToString
    - getpid
    - SharedMemory::Delete
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::CreateAndMapAnonymous
    - 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:
    - SharedMemory::CreateNamedDeprecated
    - SharedMemory::Close
    - SharedMemory::memory
    - SharedMemory::UnlockDeprecated
    - SharedMemory::LockDeprecated
    - butil::PlatformThread::Sleep
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - SharedMemory::Map
    - static_cast<int*>
    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:
    - EXPECT_EQ
    - WaitForExitCode
    - ASSERT_TRUE
    - SpawnChild
    - EXPECT_TRUE
    - butil::SharedMemoryProcessTest::CleanUp
    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
    - previous
    - butil::LinkNode::next
    - next
    - ASSERT_EQ
    - butil::LinkNode::previous
    - butil::LinkNode::LinkNode
    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: 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: 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:
    - logging::StringSink::find
    - EXPECT_EQ
    - SetLogSink
    - destroy
    - ASSERT_NE
    - ASSERT_LE
    - schedule
    - ASSERT_EQ
    - usleep
    - called_count
    - DebugSampler::DebugSampler
    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:
    - EXPECT_LE
    - destroy
    - schedule
    - usleep
    - called_count
    - DebugSampler::DebugSampler
    linkageType: ''
    returnType: void
    signature: void * check(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: 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: 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:
    - sleep
    - logging::StringSink::find
    - pthread_create
    - EXPECT_EQ
    - SetLogSink
    - pthread_join
    - ASSERT_NE
    - ASSERT_EQ
    - arraysize
    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
    - previous
    - butil::LinkNode::next
    - next
    - ASSERT_EQ
    - butil::LinkNode::previous
    - butil::LinkNode::LinkNode
    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: 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: 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:
    - logging::StringSink::find
    - EXPECT_EQ
    - SetLogSink
    - destroy
    - ASSERT_NE
    - ASSERT_LE
    - schedule
    - ASSERT_EQ
    - usleep
    - called_count
    - DebugSampler::DebugSampler
    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:
    - EXPECT_LE
    - destroy
    - schedule
    - usleep
    - called_count
    - DebugSampler::DebugSampler
    linkageType: ''
    returnType: void
    signature: void * check(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: 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: 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:
    - sleep
    - logging::StringSink::find
    - pthread_create
    - EXPECT_EQ
    - SetLogSink
    - pthread_join
    - ASSERT_NE
    - ASSERT_EQ
    - arraysize
    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:
    - std::vector::push_back
    - std::set::insert
    - EXPECT_FALSE
    - EXPECT_TRUE
    - ComparableValue
    - butil::STLIsSorted
    - std::vector::back
    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:
    - std::vector::push_back
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    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:
    - butil::STLSetUnion
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    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:
    - std::vector::push_back
    - std::set::insert
    - EXPECT_FALSE
    - EXPECT_TRUE
    - ComparableValue
    - butil::STLIsSorted
    - std::vector::back
    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:
    - std::vector::push_back
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    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:
    - butil::STLSetUnion
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    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:
    - std::vector::push_back
    - std::set::insert
    - EXPECT_FALSE
    - EXPECT_TRUE
    - ComparableValue
    - butil::STLIsSorted
    - std::vector::back
    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:
    - std::vector::push_back
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    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:
    - butil::STLSetUnion
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    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:
    - std::vector::push_back
    - std::set::insert
    - EXPECT_FALSE
    - EXPECT_TRUE
    - ComparableValue
    - butil::STLIsSorted
    - std::vector::back
    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:
    - std::vector::push_back
    - EXPECT_EQ
    - butil::STLSetDifference
    - std::set::insert
    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:
    - butil::STLSetUnion
    - EXPECT_EQ
    - std::vector::push_back
    - std::set::insert
    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:29,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:30,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:30,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:31,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:32,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:33,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 36
    functionName: rdlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_usleep
    - LOG
    - butil::cpuwide_time_ms
    - pthread_numeric_id
    - bthread_rwlock_unlock
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void * rdlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:41,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:41,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:42,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:43,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:44,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 47
    functionName: wrlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - LOG
    - butil::cpuwide_time_ms
    - pthread_numeric_id
    - bthread_rwlock_wrlock
    - bthread_rwlock_unlock
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void * wrlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:51,1
    - Dst: bthread_rwlock_init
      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_rdlock
      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_unlock
      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_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:55,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:55,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:60,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:60,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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:64,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 65
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:69,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:69,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:73,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:73,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:76,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:76,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:79,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:80,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:82,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:85,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:85,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 86
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_destroy
    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:90,1
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/test/bthread_rwlock_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: 1
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: do_timedrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_timedrdlock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * do_timedrdlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:96,1
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 99
    functionName: do_timedwrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - EXPECT_EQ
    - bthread_rwlock_timedwrlock
    linkageType: ''
    returnType: void
    signature: void * do_timedwrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:103,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:105,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:107,1
    - Dst: bthread_start_urgent
      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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:109,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:111,1
    - Dst: bthread_rwlock_wrlock
      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_start_urgent
      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_join
      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_start_urgent
      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_join
      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_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:117,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 118
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, timedlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:127,1
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:131,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:131,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 133
    functionName: do_tryrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    - EXPECT_EQ
    - bthread_rwlock_tryrdlock
    linkageType: ''
    returnType: void
    signature: void * do_tryrdlock(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:137,1
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:141,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 143
    functionName: do_trywrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_trywrlock
    - bthread_rwlock_unlock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * do_trywrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:147,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:149,1
    - Dst: bthread_rwlock_tryrdlock
      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_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:151,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:155,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:157,1
    - Dst: bthread_start_urgent
      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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:159,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:161,1
    - Dst: bthread_rwlock_trywrlock
      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_unlock
      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_rwlock_wrlock
      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_start_urgent
      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_join
      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_start_urgent
      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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:168,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:170,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 171
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_rwlock_tryrdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - bthread_rwlock_trywrlock
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, trylock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RWLock::RWLock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:175,1
    - Dst: bthread::RWLock::try_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:175,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:176,1
    - Dst: bthread::RWLock::rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:177,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:179,1
    - Dst: bthread::RWLock::try_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:179,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:180,1
    - Dst: bthread::RWLock::wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:181,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:185,1
    - Dst: bthread::RWLock::timed_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:185,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:187,1
    - Dst: bthread::RWLock::timed_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:187,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:188,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:203,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::RWLock::timed_wrlock
    - ASSERT_TRUE
    - bthread::RWLock::RWLock
    - bthread::RWLock::try_wrlock
    - bthread::RWLock::unlock
    - bthread::RWLock::try_rdlock
    - bthread::RWLock::timed_rdlock
    - bthread::RWLock::rdlock
    - bthread::RWLock::native_handler
    - bthread::RWLock::wrlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, cpp_wrapper)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:214,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:214,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:218,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 219
    functionName: read_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - 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:222,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:222,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:226,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:226,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 227
    functionName: write_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_usleep
    - bthread_rwlock_wrlock
    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:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 242
    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:247,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:247,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:257,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:259,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:262,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:266,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:266,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:266,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:271,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:276,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:276,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:276,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:278,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:281,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:287,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:287,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 288
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - pthread_create
    - bthread_join
    - bthread_usleep
    - std::vector::push_back
    - pthread_join
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:301,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:301,1
    - Dst: auto*::order::fetch_add
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:302,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:304,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 306
    functionName: wp_writer_fn
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - EXPECT_EQ
    - bthread_rwlock_wrlock
    - bthread_rwlock_unlock
    - auto*::order::fetch_add
    linkageType: ''
    returnType: void
    signature: void * wp_writer_fn(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:310,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:310,1
    - Dst: auto*::order::fetch_add
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:311,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:313,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 315
    functionName: wp_reader_fn
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_usleep
    - EXPECT_EQ
    - bthread_rwlock_unlock
    - auto*::order::fetch_add
    linkageType: ''
    returnType: void
    signature: void * wp_reader_fn(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:324,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:327,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:337,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:337,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:344,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:344,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:349,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:349,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:351,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:352,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:354,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:355,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:361,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 362
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_usleep
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_setconcurrency
    - EXPECT_LT
    - bthread_rwlock_destroy
    - EXPECT_GE
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, writer_priority)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:366,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:367,1
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 369
    functionName: wp_timed_wrlock_short
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::milliseconds_from_now
    - bthread_rwlock_timedwrlock
    linkageType: ''
    returnType: void
    signature: void * wp_timed_wrlock_short(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:377,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:380,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:385,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:385,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:394,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:394,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:396,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:397,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:399,1
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:399,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:400,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:401,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:401,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:405,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:406,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:406,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 374
    functionDepth: 1
    functionLinenumber: 374
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - butil::Timer::stop
    - bthread_join
    - bthread_rwlock_timedrdlock
    - butil::milliseconds_from_now
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_setconcurrency
    - butil::Timer::start
    - EXPECT_LT
    - bthread_rwlock_destroy
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, wrlock_failure_does_not_leak_writer_count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:421,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:421,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:424,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:426,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:431,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:431,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 417
    functionDepth: 1
    functionLinenumber: 417
    functionLinenumberEnd: 435
    functionName: dc_worker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_rwlock_unlock
    - EXPECT_EQ
    - bthread_rwlock_wrlock
    linkageType: ''
    returnType: void
    signature: void * dc_worker(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:460,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:460,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:463,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:468,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:475,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:485,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:485,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 486
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - bthread_usleep
    - EXPECT_EQ
    - EXPECT_LE
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_rwlock_destroy
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, data_consistency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:491,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:491,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:494,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:494,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 488
    functionDepth: 1
    functionLinenumber: 488
    functionLinenumberEnd: 497
    functionName: ws_reader_loop
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_usleep
    - bthread_rwlock_unlock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * ws_reader_loop(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:505,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:505,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:512,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:512,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:516,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:519,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:521,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:521,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:522,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:524,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:524,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:528,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:528,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:534,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:534,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - EXPECT_LT
    - bthread_setconcurrency
    - butil::Timer::start
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, no_writer_starvation)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 544
    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: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    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:550,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:555,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:557,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:560,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:562,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:565,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:567,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:568,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 570
    functionName: add_with_mutex
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - butil::Timer::stop
    - bthread_usleep
    - bthread_rwlock_wrlock
    - bthread_rwlock_unlock
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:577,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:581,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:591,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:593,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:593,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:607,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:611,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:612,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:613,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:622,1
    - Dst: join_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:622,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:631,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: 641
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 641
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 6
    functionsReached:
    - create_fn
    - LOG
    - ProfilerStop
    - ASSERT_LE
    - ASSERT_EQ
    - bthread_rwlock_init
    - bthread_setconcurrency
    - usleep
    - snprintf
    - join_fn
    - ProfilerStart
    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: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:644,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:646,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:647,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:648,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:649,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:650,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:651,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 643
    functionDepth: 1
    functionLinenumber: 643
    functionLinenumberEnd: 652
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - 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:662,1
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:665,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:666,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:668,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:669,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:672,1
    - Dst: long::long
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:673,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 674
    functionName: read_thread
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_ns
    - pthread_mutex_lock
    - pthread_rwlock_rdlock
    - pthread_mutex_unlock
    - pthread_rwlock_unlock
    - long::long
    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: 678
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 678
    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:683,1
    - Dst: pthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:686,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:686,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:690,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:691,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:693,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:693,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:695,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:697,1
    - Dst: printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:698,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:701,1
    - Dst: pthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:703,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:705,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 680
    functionDepth: 1
    functionLinenumber: 680
    functionLinenumberEnd: 707
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - pthread_mutex_init
    - ASSERT_EQ
    - pthread_rwlock_destroy
    - printf
    - pthread_rwlock_init
    - pthread_mutex_destroy
    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:29,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:30,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:30,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:31,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:32,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:33,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 36
    functionName: rdlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_usleep
    - LOG
    - butil::cpuwide_time_ms
    - pthread_numeric_id
    - bthread_rwlock_unlock
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void * rdlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:40,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:41,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:41,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:42,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:43,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:44,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 47
    functionName: wrlocker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - LOG
    - butil::cpuwide_time_ms
    - pthread_numeric_id
    - bthread_rwlock_wrlock
    - bthread_rwlock_unlock
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void * wrlocker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:51,1
    - Dst: bthread_rwlock_init
      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_rdlock
      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_unlock
      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_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:54,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:55,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:55,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:60,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:60,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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:64,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 65
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:69,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:69,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:72,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:73,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:73,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:76,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:76,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:79,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:80,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:82,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:83,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:85,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:85,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 86
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_destroy
    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:90,1
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/test/bthread_rwlock_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: 1
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: do_timedrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_timedrdlock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * do_timedrdlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:96,1
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 94
    functionDepth: 1
    functionLinenumber: 94
    functionLinenumberEnd: 99
    functionName: do_timedwrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - EXPECT_EQ
    - bthread_rwlock_timedwrlock
    linkageType: ''
    returnType: void
    signature: void * do_timedwrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:103,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:105,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:107,1
    - Dst: bthread_start_urgent
      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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:109,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:111,1
    - Dst: bthread_rwlock_wrlock
      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_start_urgent
      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_join
      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_start_urgent
      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_join
      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_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:117,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 118
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, timedlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:127,1
    - Dst: bthread_rwlock_tryrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:131,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:131,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 133
    functionName: do_tryrdlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_unlock
    - EXPECT_EQ
    - bthread_rwlock_tryrdlock
    linkageType: ''
    returnType: void
    signature: void * do_tryrdlock(void *arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:137,1
    - Dst: bthread_rwlock_trywrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:141,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 143
    functionName: do_trywrlock
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_trywrlock
    - bthread_rwlock_unlock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * do_trywrlock(void *arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:147,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:149,1
    - Dst: bthread_rwlock_tryrdlock
      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_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:151,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:155,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:157,1
    - Dst: bthread_start_urgent
      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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:159,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:161,1
    - Dst: bthread_rwlock_trywrlock
      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_unlock
      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_rwlock_wrlock
      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_start_urgent
      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_join
      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_start_urgent
      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_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:168,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:170,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 171
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_rwlock_tryrdlock
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - bthread_rwlock_trywrlock
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, trylock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::RWLock::RWLock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:175,1
    - Dst: bthread::RWLock::try_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:175,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:176,1
    - Dst: bthread::RWLock::rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:177,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:179,1
    - Dst: bthread::RWLock::try_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:179,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:180,1
    - Dst: bthread::RWLock::wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:181,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:185,1
    - Dst: bthread::RWLock::timed_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:185,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:187,1
    - Dst: bthread::RWLock::timed_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:187,1
    - Dst: bthread::RWLock::unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:188,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:203,1
    - Dst: bthread::RWLock::native_handler
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::RWLock::timed_wrlock
    - ASSERT_TRUE
    - bthread::RWLock::RWLock
    - bthread::RWLock::try_wrlock
    - bthread::RWLock::unlock
    - bthread::RWLock::try_rdlock
    - bthread::RWLock::timed_rdlock
    - bthread::RWLock::rdlock
    - bthread::RWLock::native_handler
    - bthread::RWLock::wrlock
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, cpp_wrapper)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:214,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:214,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:218,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 219
    functionName: read_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - 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:222,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:222,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:226,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:226,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - rw
    - sleep_us
    argTypes:
    - bthread_rwlock_t*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 227
    functionName: write_op
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_usleep
    - bthread_rwlock_wrlock
    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:239,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 242
    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:247,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:247,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:257,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:259,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:262,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:266,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:266,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:266,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:271,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:276,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:276,1
    - Dst: std::vector::back
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:276,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:278,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:281,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:287,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:287,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 288
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - pthread_create
    - bthread_join
    - bthread_usleep
    - std::vector::push_back
    - pthread_join
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_rwlock_destroy
    - bthread_start_urgent
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, mix_thread_types)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:301,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:301,1
    - Dst: auto*::order::fetch_add
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:302,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:303,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:304,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 306
    functionName: wp_writer_fn
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - EXPECT_EQ
    - bthread_rwlock_wrlock
    - bthread_rwlock_unlock
    - auto*::order::fetch_add
    linkageType: ''
    returnType: void
    signature: void * wp_writer_fn(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:310,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:310,1
    - Dst: auto*::order::fetch_add
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:311,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:312,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:313,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:313,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 315
    functionName: wp_reader_fn
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_usleep
    - EXPECT_EQ
    - bthread_rwlock_unlock
    - auto*::order::fetch_add
    linkageType: ''
    returnType: void
    signature: void * wp_reader_fn(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:324,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:327,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:337,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:337,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:344,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:344,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:349,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:349,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:351,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:352,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:354,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:355,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:361,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:361,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 362
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_join
    - bthread_usleep
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_setconcurrency
    - EXPECT_LT
    - bthread_rwlock_destroy
    - EXPECT_GE
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, writer_priority)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:366,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:367,1
    - Dst: bthread_rwlock_timedwrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 369
    functionName: wp_timed_wrlock_short
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::milliseconds_from_now
    - bthread_rwlock_timedwrlock
    linkageType: ''
    returnType: void
    signature: void * wp_timed_wrlock_short(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:377,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:380,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:385,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:385,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:394,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:394,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:396,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:397,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:399,1
    - Dst: bthread_rwlock_timedrdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:399,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:400,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:401,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:401,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:405,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:406,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:406,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 374
    functionDepth: 1
    functionLinenumber: 374
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - butil::Timer::stop
    - bthread_join
    - bthread_rwlock_timedrdlock
    - butil::milliseconds_from_now
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_rwlock_unlock
    - bthread_setconcurrency
    - butil::Timer::start
    - EXPECT_LT
    - bthread_rwlock_destroy
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, wrlock_failure_does_not_leak_writer_count)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:421,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:421,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:424,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:426,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:431,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:431,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 417
    functionDepth: 1
    functionLinenumber: 417
    functionLinenumberEnd: 435
    functionName: dc_worker
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_rwlock_unlock
    - EXPECT_EQ
    - bthread_rwlock_wrlock
    linkageType: ''
    returnType: void
    signature: void * dc_worker(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:444,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:460,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:460,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:463,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:468,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:475,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:485,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:485,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 486
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - bthread_usleep
    - EXPECT_EQ
    - EXPECT_LE
    - bthread_rwlock_init
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_rwlock_destroy
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, data_consistency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:491,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:491,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:493,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:494,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:494,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 488
    functionDepth: 1
    functionLinenumber: 488
    functionLinenumberEnd: 497
    functionName: ws_reader_loop
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - bthread_usleep
    - bthread_rwlock_unlock
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * ws_reader_loop(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:505,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:505,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:512,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:512,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:516,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:519,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:521,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:521,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:522,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:524,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:524,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:528,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:528,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:534,1
    - Dst: bthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:534,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 535
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - bthread_rwlock_wrlock
    - bthread_rwlock_init
    - ASSERT_EQ
    - EXPECT_LT
    - bthread_setconcurrency
    - butil::Timer::start
    - bthread_rwlock_unlock
    - bthread_rwlock_destroy
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(RWLockTest, no_writer_starvation)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 544
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 544
    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: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    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:550,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:555,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:557,1
    - Dst: bthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:560,1
    - Dst: bthread_rwlock_wrlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:562,1
    - Dst: bthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:565,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:567,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:568,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 570
    functionName: add_with_mutex
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_rwlock_rdlock
    - butil::Timer::stop
    - bthread_usleep
    - bthread_rwlock_wrlock
    - bthread_rwlock_unlock
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:577,1
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:581,1
    - Dst: bthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:591,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:593,1
    - Dst: create_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:593,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:607,1
    - Dst: snprintf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:611,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:612,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:613,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:622,1
    - Dst: join_fn
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:622,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:631,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: 641
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 641
    functionName: PerfTest
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 7
    functionsReached:
    - create_fn
    - LOG
    - ProfilerStop
    - ASSERT_LE
    - ASSERT_EQ
    - bthread_rwlock_init
    - bthread_setconcurrency
    - usleep
    - snprintf
    - join_fn
    - ProfilerStart
    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: bthread_setconcurrency
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:644,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:646,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:647,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:648,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:649,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:650,1
    - Dst: PerfTest
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:651,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 643
    functionDepth: 1
    functionLinenumber: 643
    functionLinenumberEnd: 652
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - 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:662,1
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:665,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:666,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:668,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:669,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:672,1
    - Dst: long::long
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:673,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 674
    functionName: read_thread
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_ns
    - pthread_mutex_lock
    - pthread_rwlock_rdlock
    - pthread_mutex_unlock
    - pthread_rwlock_unlock
    - long::long
    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: 678
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 678
    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:683,1
    - Dst: pthread_rwlock_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:686,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:686,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:690,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:691,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:693,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:693,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:695,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:697,1
    - Dst: printf
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:698,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:701,1
    - Dst: pthread_rwlock_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:703,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/test/bthread_rwlock_unittest.cpp:705,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 707
      start: 680
    functionDepth: 1
    functionLinenumber: 680
    functionLinenumberEnd: 707
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_rwlock_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - pthread_mutex_init
    - ASSERT_EQ
    - pthread_rwlock_destroy
    - printf
    - pthread_rwlock_init
    - pthread_mutex_destroy
    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
    - Release
    - Try
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Sleep
    - 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:
    - Lock::Release
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - BasicLockTestThread::acquired
    - butil::PlatformThread::Create
    - EXPECT_GE
    - butil::TimeDelta::FromMilliseconds
    - Lock::Try
    - Lock::Acquire
    - butil::PlatformThread::Sleep
    - rand
    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:
    - Release
    - Try
    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_FALSE
    - Lock::Release
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - TryLockTestThread::got_lock
    - butil::PlatformThread::Create
    - 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::TimeDelta::FromMilliseconds
    - Lock*::Acquire
    - butil::PlatformThread::Sleep
    - 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:
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - EXPECT_EQ
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Create
    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:
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - EXPECT_EQ
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Create
    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
    - Release
    - Try
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Sleep
    - 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:
    - Lock::Release
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - BasicLockTestThread::acquired
    - butil::PlatformThread::Create
    - EXPECT_GE
    - butil::TimeDelta::FromMilliseconds
    - Lock::Try
    - Lock::Acquire
    - butil::PlatformThread::Sleep
    - rand
    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:
    - Release
    - Try
    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_FALSE
    - Lock::Release
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - TryLockTestThread::got_lock
    - butil::PlatformThread::Create
    - 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::TimeDelta::FromMilliseconds
    - Lock*::Acquire
    - butil::PlatformThread::Sleep
    - 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:
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - EXPECT_EQ
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Create
    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:
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - EXPECT_EQ
    - butil::MutexLockTestThread::DoStuff
    - butil::PlatformThread::Create
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::StringType
    - FilePath::value
    - FilePath::DirName
    - arraysize
    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:
    - FPL
    - FilePath::BaseName
    - EXPECT_EQ
    - FilePath::StringType
    - FilePath::value
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - WideToUTF8
    - FilePath::Append
    - FilePath::StringType
    - FilePath::value
    - FilePath::AppendASCII
    - FilePath
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::StripTrailingSeparators
    - FilePath::StringType
    - FilePath::value
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::IsAbsolute
    - FilePath::value
    - arraysize
    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::GetComponents
    - FPL
    - FilePath::StringType::append
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - FilePath::StringType
    - std::vector::size
    - FilePath::value
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::value
    - FilePath::IsParent
    - arraysize
    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:
    - FPL
    - FilePath::value
    - EXPECT_EQ
    - arraysize
    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::BaseName
    - EXPECT_EQ
    - FilePath::Append
    - FILE_PATH_LITERAL
    - FilePath::RemoveExtension
    - FilePath::value
    - FilePath::FinalExtension
    - FilePath::Extension
    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
    - FilePath::AddExtension
    - butil::FilePath::CompareIgnoreCase
    - FilePath::EndsWithSeparator
    - FilePath::Extension
    - FilePath::ReplaceExtension
    - FilePath::Append
    - EXPECT_TRUE
    - FilePath::AsEndingWithSeparator
    - FilePath::ReferencesParent
    - FilePath::NormalizePathSeparators
    - FPL
    - EXPECT_EQ
    - FilePath::RemoveExtension
    - FilePath::value
    - FilePath::InsertBeforeExtension
    - FilePath::StringType::c_str
    - FilePath::RemoveFinalExtension
    - FilePath::FinalExtension
    - arraysize
    - defined
    - EXPECT_STREQ
    - FilePath::MatchesExtension
    - FilePath::StringType
    - FilePath::IsContentUri
    - FPS
    - FilePath
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::value
    - FilePath::InsertBeforeExtension
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::RemoveExtension
    - FilePath::value
    - FilePath::RemoveFinalExtension
    - arraysize
    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:
    - FPL
    - FilePath::ReplaceExtension
    - EXPECT_EQ
    - FilePath::value
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::value
    - FilePath::AddExtension
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - defined
    - FilePath::MatchesExtension
    - FilePath::value
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - defined
    - butil::FilePath::CompareIgnoreCase
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::value
    - FilePath::ReferencesParent
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - ASSERT_EQ
    - FilePath::value
    - FPS
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::Append
    - ASSERT_EQ
    - FilePath::value
    - FPS
    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:
    - ASSERT_EQ
    - EXPECT_TRUE
    - FPS
    - 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:
    - FPL
    - EXPECT_EQ
    - FilePath::StringType
    - FilePath::value
    - FilePath::NormalizePathSeparators
    - arraysize
    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
    - EXPECT_EQ
    - FilePath::EndsWithSeparator
    - FilePath
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::AsEndingWithSeparator
    - FilePath::value
    - FilePath
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - FilePath::value
    - FilePath::IsContentUri
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST_F(FilePathTest, ContentUriTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:67,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:67,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 69
    functionName: check_tls_block
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    - ASSERT_EQ
    - butil::iobuf::get_tls_block_head
    linkageType: ''
    returnType: void
    signature: void check_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: operator
      Src: /src/brpc/test/iobuf_unittest.cpp:75,1
    - Dst: insert
      Src: /src/brpc/test/iobuf_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: debug_block_allocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - operator
    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:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - b
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 86
    functionName: debug_block_deallocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - erase
    - ASSERT_TRUE
    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: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    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:93,1
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:94,1
    - Dst: init
      Src: /src/brpc/test/iobuf_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 100
    functionName: install_debug_allocator
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - init
    - butil::iobuf::remove_tls_block_chain
    - is_debug_allocator_enabled
    - LOG
    linkageType: ''
    returnType: void
    signature: void install_debug_allocator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:105,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:109,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - bin_name
    - filename
    - topn
    argTypes:
    - char*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 110
    functionName: show_prof_and_rm
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - system
    - snprintf
    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:113,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:114,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: seek
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: butil::iobuf::get_portal_next
      Src: /src/brpc/test/iobuf_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:121,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:122,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 124
    functionName: check_memory_leak
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::get_tls_block_head
    - ASSERT_TRUE
    - butil::iobuf::get_portal_next
    - ASSERT_EQ
    - is_debug_allocator_enabled
    - seek
    - size
    - butil::iobuf::get_tls_block_count
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    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:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 2
    functionLinenumber: 132
    functionLinenumberEnd: 134
    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:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    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:143,1
    - Dst: pipe
      Src: /src/brpc/test/iobuf_unittest.cpp:143,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:145,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:146,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:147,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 148
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - pipe
    - ASSERT_EQ
    - 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:151,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:159,1
    - Dst: butil::IOBuf::pop_front
      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:162,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:162,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:170,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:171,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:172,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:172,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:175,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:186,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:187,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:188,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 150
    functionDepth: 2
    functionLinenumber: 150
    functionLinenumberEnd: 189
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - to_str
    - ASSERT_FALSE
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::append
    - std::string::push_back
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::empty
    - std::string::erase
    - butil::IOBuf::IOBuf
    - std::string::clear
    - butil::IOBuf::pop_front
    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:192,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:200,1
    - Dst: butil::IOBuf::pop_back
      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:203,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:203,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:204,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:211,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:212,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:212,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:213,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:213,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:216,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:220,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:227,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:228,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:228,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:229,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::append
    - butil::IOBuf::pop_back
    - std::string::push_back
    - ASSERT_EQ
    - std::string::resize
    - std::string::length
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - std::string::clear
    - std::string::size
    - to_str
    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:233,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:237,1
    - Dst: butil::IOBuf::empty
      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::append
      Src: /src/brpc/test/iobuf_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: std::string
      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::append
      Src: /src/brpc/test/iobuf_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:245,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:250,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:251,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:251,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:252,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:253,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 232
    functionDepth: 2
    functionLinenumber: 232
    functionLinenumberEnd: 254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::length
    - std::string
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - to_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:257,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:265,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:265,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:266,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:267,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:273,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:273,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:274,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:275,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:280,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:284,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:285,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:287,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:296,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:296,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:297,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:298,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:298,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:298,1
    - Dst: free
      Src: /src/brpc/test/iobuf_unittest.cpp:299,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 256
    functionDepth: 2
    functionLinenumber: 256
    functionLinenumberEnd: 300
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::appendv
    - malloc
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - free
    - ASSERT_EQ
    - butil::IOBuf::clear
    - butil::IOBuf::size
    - ASSERT_GT
    - butil::IOBuf::IOBuf
    - memcmp
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appendv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      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: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:310,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:316,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:316,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:318,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:319,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:319,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:330,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:330,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:337,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:337,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:340,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:340,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:342,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:342,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:342,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:348,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:348,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:349,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:350,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:351,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:351,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 352
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - ASSERT_GE
    - butil::IOBuf::append
    - butil::IOBuf::reserve
    - butil::IOBuf::pop_back
    - ASSERT_EQ
    - butil::IOBuf::size
    - std::string::data
    - butil::IOBuf::unsafe_assign
    - 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: 358
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 358
    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:362,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:373,1
    - Dst: FakeBlock::FakeBlock
      Src: /src/brpc/test/iobuf_unittest.cpp:373,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:382,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:383,1
    - Dst: butil::IOBuf::_pop_front_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::length
      Src: /src/brpc/test/iobuf_unittest.cpp:384,1
    - Dst: butil::IOBuf::_push_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_num
      Src: /src/brpc/test/iobuf_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:390,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:391,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:392,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: butil::IOBuf::_push_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_num
      Src: /src/brpc/test/iobuf_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:400,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:401,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:406,1
    - Dst: butil::IOBuf::_pop_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::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:410,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:411,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:416,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:417,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:418,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:418,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:424,1
    - Dst: butil::IOBuf::_ref_num
      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_num
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:426,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:429,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:431,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:431,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:435,1
    - Dst: butil::IOBuf::_ref_num
      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::_pop_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::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:442,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:443,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:443,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:444,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:444,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:445,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:452,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:453,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:454,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:454,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 461
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - install_debug_allocator
    - butil::IOBuf::_back_ref
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - std::max
    - butil::IOBuf::_push_back_ref
    - butil::IOBuf::_pop_front_ref
    - butil::iobuf::block_shared_count
    - FakeBlock::FakeBlock
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::_ref_at
    - butil::IOBuf::_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:465,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:467,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:470,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:478,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:478,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:479,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:479,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:484,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:485,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:485,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:490,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:492,1
    - Dst: to_str
      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:496,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:497,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:504,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:505,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:510,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:510,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:511,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:512,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:512,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:515,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:516,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:523,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:523,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:523,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:531,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:532,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:533,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 535
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - std::string::substr
    - install_debug_allocator
    - std::string::c_str
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - ASSERT_TRUE
    - butil::IOBuf::pop_front
    - LOG
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::push_back
    - butil::IOBuf::empty
    - butil::IOBuf::clear
    - std::string::erase
    - butil::IOBuf::IOBuf
    - to_str
    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:538,1
    - Dst: butil::GetDefaultBlockSize
      Src: /src/brpc/test/iobuf_unittest.cpp:540,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:541,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:542,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: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::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:550,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:551,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:552,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:556,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:561,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:564,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:565,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:568,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 537
    functionDepth: 2
    functionLinenumber: 537
    functionLinenumberEnd: 569
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::GetDefaultBlockSize
    - butil::IOBuf::resize
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::size
    - ASSERT_LT
    - butil::IOBuf::IOBuf
    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:572,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:575,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:576,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:578,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:580,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:581,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:583,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:587,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:591,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:593,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:595,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:597,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 571
    functionDepth: 2
    functionLinenumber: 571
    functionLinenumberEnd: 598
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::push_back
    - butil::IOBuf::clear
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:604,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:604,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
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:607,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:608,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:609,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:610,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:610,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 611
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - ASSERT_TRUE
    - butil::IOBuf::length
    - ASSERT_EQ
    - butil::IOBuf::push_back
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    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:614,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:618,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:620,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:621,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:623,1
    - Dst: std::string::size
      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: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:627,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:627,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:632,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      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::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:639,1
    - Dst: std::string::size
      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: 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: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:648,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:648,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:650,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:650,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:651,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 613
    functionDepth: 1
    functionLinenumber: 613
    functionLinenumberEnd: 652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - butil::IOBuf::append_to
    - butil::IOBuf::to_string
    - std::string::append
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::copy_to
    - butil::IOBuf::size
    - ASSERT_GT
    - 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:655,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:657,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:661,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:664,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:665,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:670,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:671,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:672,1
    - Dst: to_str
      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: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:676,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:677,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:678,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:678,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 679
      start: 654
    functionDepth: 2
    functionLinenumber: 654
    functionLinenumberEnd: 679
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - std::vector::push_back
    - butil::IOBuf::length
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::clear
    - std::vector::size
    - butil::IOBuf::IOBuf
    - to_str
    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:682,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:684,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:688,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:691,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:692,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:697,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:698,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:699,1
    - Dst: to_str
      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: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:702,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:703,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:704,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:705,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 681
    functionDepth: 2
    functionLinenumber: 681
    functionLinenumberEnd: 706
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - std::vector::push_back
    - butil::IOBuf::length
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::clear
    - std::vector::size
    - butil::IOBuf::IOBuf
    - to_str
    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:709,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:711,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:712,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:718,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:718,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:718,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:720,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:724,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:724,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 708
    functionDepth: 2
    functionLinenumber: 708
    functionLinenumberEnd: 727
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - std::string::substr
    - install_debug_allocator
    - butil::IOBuf::length
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::IOBuf
    - to_str
    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:730,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:732,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:737,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:740,1
    - Dst: butil::IOPortal::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:740,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:743,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:746,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:746,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:748,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:749,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:752,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:752,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:754,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:756,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:757,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:761,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:761,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:763,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:764,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 729
    functionDepth: 2
    functionLinenumber: 729
    functionLinenumberEnd: 765
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - install_debug_allocator
    - LOG
    - ASSERT_EQ
    - std::string::length
    - to_str
    - butil::IOPortal::length
    - std::string::push_back
    - length
    - printf
    - butil::IOPortal::append
    - append_from_file_descriptor
    - socketpair
    - butil::IOPortal::pop_front
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOPortal::empty
    - butil::make_non_blocking
    - std::string::erase
    - close
    - 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:768,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:771,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:775,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:778,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:780,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:781,1
    - Dst: butil::IOPortal*::append
      Src: /src/brpc/test/iobuf_unittest.cpp:782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:787,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: butil::IOBuf::cut_multiple_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:791,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:792,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:793,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:798,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:798,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:799,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:800,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:800,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:802,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:803,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 767
    functionDepth: 2
    functionLinenumber: 767
    functionLinenumberEnd: 804
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - to_str
    - butil::IOPortal::IOPortal
    - ARRAY_SIZE
    - install_debug_allocator
    - butil::IOPortal*::append
    - ASSERT_TRUE
    - std::string::append
    - std::string::push_back
    - ASSERT_EQ
    - std::string::length
    - butil::make_non_blocking
    - empty
    - butil::IOBuf::cut_multiple_into_file_descriptor
    - close
    - socketpair
    - butil::IOPortal::append_from_file_descriptor
    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:807,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:809,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:813,1
    - Dst: push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:814,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:815,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:817,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:818,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:819,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:820,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:820,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:821,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:821,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:826,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:826,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:826,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:827,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:827,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:829,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:833,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:834,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:836,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:842,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:842,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:844,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:844,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:849,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:849,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:851,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:852,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 806
    functionDepth: 2
    functionLinenumber: 806
    functionLinenumberEnd: 853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - install_debug_allocator
    - LOG
    - ASSERT_EQ
    - std::string::length
    - empty
    - cut_into_file_descriptor
    - to_str
    - butil::IOPortal::length
    - ASSERT_TRUE
    - std::string::push_back
    - length
    - append
    - setsockopt
    - printf
    - std::string::clear
    - size
    - butil::IOPortal::append
    - socketpair
    - append_from_file_descriptor
    - push_back
    - butil::IOPortal::cutn
    - butil::IOPortal::empty
    - butil::make_non_blocking
    - close
    - rand
    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:856,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:858,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:864,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:868,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:870,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:871,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:872,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:875,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:876,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:877,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:877,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:878,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 879
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - show_prof_and_rm
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::length
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - LOG
    - ASSERT_EQ
    - std::string::length
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    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:883,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:885,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:886,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:889,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:895,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:897,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:898,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:899,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:904,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:904,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:905,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:905,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:906,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:909,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:911,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:915,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:916,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:920,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:920,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:925,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:929,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:930,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:931,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:932,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:938,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:939,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:940,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:942,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:942,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:944,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:945,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:946,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:947,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:949,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:951,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:952,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:952,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:955,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:956,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 882
    functionDepth: 1
    functionLinenumber: 882
    functionLinenumberEnd: 957
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - ARRAY_SIZE
    - butil::Timer::stop
    - show_prof_and_rm
    - butil::IOBuf::_ref_num
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::length
    - butil::IOBuf::append
    - LOG
    - butil::IOBuf::clear
    - std::string::length
    - butil::IOBuf::push_back
    - butil::Timer::start
    - ASSERT_EQ
    - ASSERT_LT
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    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:960,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:963,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:963,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:964,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:968,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:972,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/iobuf_unittest.cpp:980,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:983,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:984,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:984,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:987,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:987,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:988,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:990,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:992,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:993,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:993,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:995,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:996,1
    - Dst: strerror
      Src: /src/brpc/test/iobuf_unittest.cpp:996,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:997,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1000,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1003,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1005,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1006,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1007,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1008,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1009,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1012,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:1013,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:1014,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1015,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1018,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1019,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1021,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1022,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1023,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1027,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1027,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1030,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1030,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1032,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1035,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:1035,1
    - Dst: remove
      Src: /src/brpc/test/iobuf_unittest.cpp:1038,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1042,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1043,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:1044,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1046
      start: 959
    functionDepth: 1
    functionLinenumber: 959
    functionLinenumberEnd: 1046
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - remove
    - butil::IOPortal::IOPortal
    - std::vector::clear
    - strerror
    - LOG
    - ASSERT_EQ
    - std::string::length
    - butil::TempFile::fname
    - butil::Timer::start
    - std::vector::size
    - cut_into_file_descriptor
    - empty
    - std::string::size
    - std::vector::reserve
    - butil::Timer::stop
    - ASSERT_TRUE
    - butil::IOPortal::length
    - length
    - append
    - open
    - snprintf
    - butil::TempFile::TempFile
    - butil::Timer::Timer
    - show_prof_and_rm
    - std::vector::push_back
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - std::string::resize
    - butil::TempFile::save_bin
    - butil::Timer::n_elapsed
    - butil::IOPortal::cutn
    - ARRAY_SIZE
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOPortal::empty
    - system
    - std::string::data
    - close
    - butil::IOBuf::IOBuf
    - rand
    - butil::IOPortal::append_from_file_descriptor
    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:1051,1
    - Dst: proto::Misc::set_required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1052,1
    - Dst: proto::Misc::set_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1053,1
    - Dst: proto::Misc::set_required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1054,1
    - Dst: proto::Misc::set_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1055,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1058,1
    - Dst: proto::Misc::add_repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1059,1
    - Dst: proto::Misc::set_required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1061,1
    - Dst: proto::Misc::set_required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1062,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1068,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1068,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: proto::Misc::SerializeToZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1079,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1080,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1080,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1082,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1085,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1088,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1088,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: proto::Misc::ParseFromZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: proto::Misc::has_optional_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: proto::Misc::has_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1102,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1102,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: proto::Misc::has_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1104,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1104,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: proto::Misc::repeated_string_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1109,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1109,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1109,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1110,1
    - Dst: proto::Misc::has_optional_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1111,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1111,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1111,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1112,1
    - Dst: proto::Misc::has_optional_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1113
      start: 1048
    functionDepth: 1
    functionLinenumber: 1048
    functionLinenumberEnd: 1113
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::BackUp
    - proto::Misc::required_enum
    - proto::Misc::set_optional_string
    - ASSERT_EQ
    - proto::Misc::has_optional_string
    - proto::Misc::has_optional_uint64
    - proto::Misc::set_required_uint64
    - ASSERT_FALSE
    - ASSERT_TRUE
    - proto::Misc::required_int32
    - proto::Misc::set_required_string
    - snprintf
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - proto::Misc::ByteSize
    - proto::Misc::required_bool
    - proto::Misc::SerializeToZeroCopyStream
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - butil::IOBuf::append
    - proto::Misc::add_repeated_string
    - proto::Misc::has_optional_bool
    - proto::Misc::required_string
    - proto::Misc::repeated_string_size
    - butil::IOBuf::pop_front
    - proto::Misc::required_uint64
    - proto::Misc::optional_string
    - proto::Misc::set_required_bool
    - proto::Misc::has_optional_enum
    - proto::Misc::ParseFromZeroCopyStream
    - butil::IOBuf::length
    - proto::Misc::repeated_string
    - butil::IOBufAsZeroCopyInputStream::Next
    - proto::Misc::has_optional_int32
    - proto::Misc::set_required_enum
    - proto::Misc::optional_uint64
    - butil::IOBuf::IOBuf
    - proto::Misc::set_required_int32
    - proto::Misc::set_optional_uint64
    - 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:1119,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1120,1
    - Dst: butil::GetDefaultBlockSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1121,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1129,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1131,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1134,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1136,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1136,1
    - Dst: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1139,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1142,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      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: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1149,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1152,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1154,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1160,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1162,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1164,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1115
    functionDepth: 1
    functionLinenumber: 1115
    functionLinenumberEnd: 1167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::GetDefaultBlockSize
    - ByteCount
    - BackUp
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - Next
    - 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:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1177,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1177,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1179,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1182,1
    - Dst: butil::IOBuf::backing_block_num
      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: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1186,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1188,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1188,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1191,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1197,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1198,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1203,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1204,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1205,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1207,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1208,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
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1212,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1214,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1215,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1169
    functionDepth: 1
    functionLinenumber: 1169
    functionLinenumberEnd: 1216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::resize
    - butil::IOBufAsZeroCopyOutputStream::Next
    - LOG
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - ASSERT_EQ
    - butil::IOBuf::size
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    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:1221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1223
      start: 1218
    functionDepth: 0
    functionLinenumber: 1218
    functionLinenumberEnd: 1223
    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:1226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1232,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1239,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1239,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1242,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1245,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1246
      start: 1225
    functionDepth: 1
    functionLinenumber: 1225
    functionLinenumberEnd: 1246
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBufAsZeroCopyOutputStream::Next
    - pthread_join
    - ASSERT_EQ
    - 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:1249,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1257,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1257,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1264,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1264,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1265,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1266,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1266,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1267
      start: 1248
    functionDepth: 1
    functionLinenumber: 1248
    functionLinenumberEnd: 1267
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::get_tls_block_head
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBufAsZeroCopyOutputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - ASSERT_EQ
    - static_cast<size_t>
    - butil::IOBuf::IOBuf
    - butil::iobuf::block_cap
    - butil::IOBuf::_front_ref
    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: 1270
      start: 1270
    functionDepth: 0
    functionLinenumber: 1270
    functionLinenumberEnd: 1270
    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: 1280
      start: 1278
    functionDepth: 0
    functionLinenumber: 1278
    functionLinenumberEnd: 1280
    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:1283,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' foo2'
    argTypes:
    - std::ostream
    - Foo2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1287
      start: 1282
    functionDepth: 0
    functionLinenumber: 1282
    functionLinenumberEnd: 1287
    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:1290,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/test/iobuf_unittest.cpp:1292,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1302,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1302,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: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: Foo2::foo1::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1313,1
    - Dst: Foo1
      Src: /src/brpc/test/iobuf_unittest.cpp:1313,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1321,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1323,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1323,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: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1289
    functionDepth: 1
    functionLinenumber: 1289
    functionLinenumberEnd: 1329
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::to_string
    - butil::IOBufBuilder::move_to
    - LOG
    - Foo2::foo1::push_back
    - ASSERT_EQ
    - butil::IOBufBuilder::buf
    - Foo1
    - std::ostringstream::str
    - butil::IOBufBuilder::IOBufBuilder
    - butil::IOBuf::IOBuf
    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:1332,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/iobuf_unittest.cpp:1333,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1334,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1334,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1336,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1339,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1339,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1342,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1342,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: butil::IOPortal::fetch
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1347
      start: 1331
    functionDepth: 1
    functionLinenumber: 1331
    functionLinenumberEnd: 1347
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - ASSERT_TRUE
    - butil::IOPortal::length
    - berror
    - butil::TempFile::save
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOPortal::fetch
    - butil::IOPortal::append
    - butil::TempFile::fname
    - ASSERT_EQ
    - open
    - butil::TempFile::TempFile
    - memcmp
    - butil::IOPortal::pappend_from_file_descriptor
    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:1355,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1359,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1360,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1361,1
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1361,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1352
    functionDepth: 1
    functionLinenumber: 1352
    functionLinenumberEnd: 1365
    functionName: cut_into_fd
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - butil::IOBuf::pcut_into_file_descriptor
    - butil::IOBuf::append
    - CHECK_EQ
    - 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:1368,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1371,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1372,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1372,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1374,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1374,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1376,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1377,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1379,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1382,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1384,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1385,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1387
      start: 1367
    functionDepth: 1
    functionLinenumber: 1367
    functionLinenumberEnd: 1387
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - butil::IOPortal::IOPortal
    - ASSERT_TRUE
    - berror
    - store
    - pthread_join
    - ASSERT_EQ
    - open
    - butil::IOPortal::cutn
    - butil::IOPortal::pappend_from_file_descriptor
    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:1392,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1393,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1395,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1396,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1398,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1402,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1403,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1403,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1404,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1404,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1404,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1406,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1407
      start: 1389
    functionDepth: 1
    functionLinenumber: 1389
    functionLinenumberEnd: 1407
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::StringPiece::empty
    - std::string::append
    - butil::StringPiece::data
    - std::string::push_back
    - butil::StringPiece::size
    - butil::IOBuf::push_back
    - butil::IOBuf::backing_block
    - butil::IOBuf::IOBuf
    - std::string::reserve
    - std::string::size
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, slice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1410,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1411,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1412,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1413,1
    - Dst: std::swap
      Src: /src/brpc/test/iobuf_unittest.cpp:1414,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1415,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1415,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1416,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1417
      start: 1409
    functionDepth: 1
    functionLinenumber: 1409
    functionLinenumberEnd: 1417
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::equals
    - ASSERT_TRUE
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::swap
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, swap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - 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: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1424,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1425,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1428,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1429,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1429,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1430,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1430,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1431,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1432
      start: 1419
    functionDepth: 1
    functionLinenumber: 1419
    functionLinenumberEnd: 1432
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::equals
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::resize
    - std::string::resize
    - ASSERT_EQ
    - 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:1435,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1436,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1443,1
    - Dst: std::string::size
      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:1447,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1448,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1452,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1459,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1460,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1434
    functionDepth: 1
    functionLinenumber: 1434
    functionLinenumberEnd: 1461
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - ASSERT_EQ
    - 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:1464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1466,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1467,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1469,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1469,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1470,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1472,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1473,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1477,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1478,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1481,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1481,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1482,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1484,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1486
      start: 1463
    functionDepth: 1
    functionLinenumber: 1463
    functionLinenumberEnd: 1486
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::buf
    - butil::IOBufAppender::move_to
    - std::string::append
    - ASSERT_EQ
    - snprintf
    - butil::IOBufAppender::push_back
    - butil::IOBufAppender::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appender)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1490,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1491,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1492,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1494,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1496,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1498,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1499,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1500,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1502,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1504,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1506,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1506,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1507,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1513,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1514,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1516,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1518,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1520,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1521,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1523,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1525,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1527,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1528,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1530,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1532,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1534,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1534,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1535,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1536,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1537,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1538
      start: 1488
    functionDepth: 1
    functionLinenumber: 1488
    functionLinenumberEnd: 1538
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::Timer::stop
    - std::string::append
    - LOG
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::Timer::start
    - butil::IOBufAppender::append
    - butil::Timer::n_elapsed
    - butil::IOBufAppender::push_back
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    - std::string::size
    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:1541,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1544,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1545,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1562,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1563,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1563,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1564,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1565,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1566,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1566,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1540
    functionDepth: 1
    functionLinenumber: 1540
    functionLinenumberEnd: 1567
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::push_back
    - butil::IOBuf::push_back
    - ASSERT_STREQ
    - std::ostringstream::str
    - butil::IOBuf::IOBuf
    - butil::ToPrintable::ToPrintable
    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:1570,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1572,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1572,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1577,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1578,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1579,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1580,1
    - Dst: butil::IOBufBytesIterator::copy_and_forward
      Src: /src/brpc/test/iobuf_unittest.cpp:1582,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:1583,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1584,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1587,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1587,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1588
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1588
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - butil::IOBuf::equals
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBufBytesIterator::copy_and_forward
    - butil::IOBuf::push_back
    - ASSERT_EQ
    - ASSERT_GT
    - butil::IOBuf::IOBuf
    - butil::fast_rand_in
    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:1592,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1591
    functionDepth: 0
    functionLinenumber: 1591
    functionLinenumberEnd: 1594
    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:1597,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1608,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1608,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1611,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1614,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1617,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1596
    functionDepth: 1
    functionLinenumber: 1596
    functionLinenumberEnd: 1624
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::_ref_num
    - ASSERT_TRUE
    - butil::iobuf::block_shared_count
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::size
    - butil::IOBuf::_front_ref
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::append_user_data
    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:1627,1
    - Dst: char::char
      Src: /src/brpc/test/iobuf_unittest.cpp:1630,1
    - Dst: std::default_delete<char[]>
      Src: /src/brpc/test/iobuf_unittest.cpp:1630,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1632,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1632,1
    - Dst: std::shared_ptr::get
      Src: /src/brpc/test/iobuf_unittest.cpp:1633,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1643,1
    - Dst: std::abort
      Src: /src/brpc/test/iobuf_unittest.cpp:1647,1
    - Dst: reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1650,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: std::shared_ptr::reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1664,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1669,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1669,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1671,1
    - Dst: std::weak_ptr::expired
      Src: /src/brpc/test/iobuf_unittest.cpp:1671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1674,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1678,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1681
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - ASSERT_EQ
    - std::shared_ptr::reset
    - butil::IOBuf::size
    - butil::IOBuf::append_user_data
    - std::default_delete<char[]>
    - ASSERT_TRUE
    - butil::iobuf::block_shared_count
    - std::move
    - std::shared_ptr::use_count
    - char::char
    - std::weak_ptr::expired
    - reset
    - std::abort
    - butil::IOBuf::_ref_num
    - std::shared_ptr::get
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - butil::IOBuf::_front_ref
    - 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:1643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - partial
    - ' incr'
    argTypes:
    - std::shared_ptr<char>
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1643
    functionDepth: 1
    functionLinenumber: 1643
    functionLinenumberEnd: 1643
    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: 1646
      start: 1644
    functionDepth: 0
    functionLinenumber: 1644
    functionLinenumberEnd: 1646
    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:1647,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1647
    functionDepth: 0
    functionLinenumber: 1647
    functionLinenumberEnd: 1647
    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: 1648
      start: 1648
    functionDepth: 0
    functionLinenumber: 1648
    functionLinenumberEnd: 1648
    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:1650,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1652
    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:1684,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1695,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1695,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1697,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1698,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1703,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1704,1
    - Dst: butil::IOBuf::size
      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: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1708,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1710,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1711,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1714,1
    - Dst: to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1717,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1717,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1723,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1724
      start: 1683
    functionDepth: 1
    functionLinenumber: 1683
    functionLinenumberEnd: 1724
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::_ref_num
    - ASSERT_TRUE
    - butil::iobuf::block_shared_count
    - to_string
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::size
    - butil::IOBuf::_front_ref
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::append_user_data
    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:1727,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1732,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1733,1
    - Dst: butil::IOBuf::append_user_data_with_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1737,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1738,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1738,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1739,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1740,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1740,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1742
      start: 1726
    functionDepth: 1
    functionLinenumber: 1726
    functionLinenumberEnd: 1742
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::get_first_data_meta
    - ASSERT_EQ
    - butil::IOBuf::append_user_data_with_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:1745,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1746,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1747,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1747,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1749,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1750,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1751,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1752,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1755,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1757,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1757,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1759,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1760,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1764,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1764,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1765,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1766,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1767
      start: 1744
    functionDepth: 1
    functionLinenumber: 1744
    functionLinenumberEnd: 1767
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::block_size
    - butil::iobuf::acquire_tls_block
    - ASSERT_NE
    - ASSERT_EQ
    - butil::IOBuf::push_back
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::share_tls_block
    - butil::iobuf::release_tls_block_chain
    - butil::IOBuf::IOBuf
    - butil::iobuf::block_cap
    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:1770,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1771,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1772,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1773,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,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::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1780,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::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,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: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1787,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1787,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1787,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1789,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1789,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1790,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1790,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1790,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1793,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1769
    functionDepth: 1
    functionLinenumber: 1769
    functionLinenumberEnd: 1794
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::get_tls_block_head
    - butil::iobuf::block_size
    - butil::iobuf::acquire_tls_block
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::release_tls_block_chain
    - butil::IOBuf::IOBuf
    - butil::iobuf::block_cap
    - butil::iobuf::get_tls_block_count
    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:1799,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1800,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1806,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1810,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1814,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1815,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1820,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1821,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1821,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1825,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1829,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1830,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1836,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1840,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1844,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1845,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1851,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1855,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1860,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1864,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1865,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1870,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1871,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1871,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1872,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1875,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1879,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1880,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1888,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1888,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    - Dst: std::memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: const_cast<void*>
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1895,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1896,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1896,1
    - Dst: butil::IOReserveAlignedBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1896,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1898
      start: 1796
    functionDepth: 1
    functionLinenumber: 1796
    functionLinenumberEnd: 1898
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::stringstream::str
    - const_cast<void*>
    - butil::IOBufAsZeroCopyInputStream::Next
    - ASSERT_NE
    - butil::IOReserveAlignedBuf::to_string
    - std::memcpy
    - ASSERT_EQ
    - reinterpret_cast<uintptr_t>
    - std::string::data
    - butil::IOReserveAlignedBuf::reserve
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, reserve_aligned)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1901,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1903,1
    - Dst: memset
      Src: /src/brpc/test/iobuf_unittest.cpp:1904,1
    - Dst: strncpy
      Src: /src/brpc/test/iobuf_unittest.cpp:1907,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1908,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1909,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1910,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1910,1
    - Dst: butil::SingleIOBuf::SingleIOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1911,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1912,1
    - Dst: butil::SingleIOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1912,1
    - Dst: butil::SingleIOBuf::assign
      Src: /src/brpc/test/iobuf_unittest.cpp:1913,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1914,1
    - Dst: butil::SingleIOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1914,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1915,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1916,1
    - Dst: butil::SingleIOBuf::get_begin
      Src: /src/brpc/test/iobuf_unittest.cpp:1917,1
    - Dst: strcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:1918,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1919,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1920,1
    - Dst: butil::SingleIOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1922,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1922,1
    - Dst: butil::SingleIOBuf::SingleIOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1923,1
    - Dst: butil::SingleIOBuf::swap
      Src: /src/brpc/test/iobuf_unittest.cpp:1924,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1925,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1926,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1926,1
    - Dst: butil::SingleIOBuf::reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1928,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1928,1
    - Dst: butil::SingleIOBuf::allocate
      Src: /src/brpc/test/iobuf_unittest.cpp:1930,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1931,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1932,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1933,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1934,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1935,1
    - Dst: butil::SingleIOBuf::get_cur_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1937,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1939,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1940,1
    - Dst: butil::SingleIOBuf::deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:1941,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1944,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1945,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1947,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1948,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1949,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1950,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1951,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1952,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1953
      start: 1900
    functionDepth: 1
    functionLinenumber: 1900
    functionLinenumberEnd: 1953
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::SingleIOBuf::get_begin
    - strcmp
    - strncpy
    - butil::SingleIOBuf::reallocate_downward
    - butil::SingleIOBuf::get_cur_ref
    - ASSERT_EQ
    - butil::IOBuf::append_user_data
    - malloc
    - ASSERT_TRUE
    - butil::SingleIOBuf::append_to
    - butil::SingleIOBuf::swap
    - butil::SingleIOBuf::reset
    - butil::SingleIOBuf::SingleIOBuf
    - butil::SingleIOBuf::assign
    - butil::IOBuf::backing_block_num
    - butil::SingleIOBuf::allocate
    - butil::IOBuf::append
    - butil::SingleIOBuf::deallocate
    - memset
    - butil::SingleIOBuf::get_length
    - butil::IOBuf::length
    - butil::SingleIOBuf::backing_block_num
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, single_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1961,1
    - Dst: memset
      Src: /src/brpc/test/iobuf_unittest.cpp:1962,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1963,1
    - Dst: memset
      Src: /src/brpc/test/iobuf_unittest.cpp:1964,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1965,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1966,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1968,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1968,1
    - Dst: butil::SingleIOBuf::SingleIOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1970,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1971,1
    - Dst: butil::SingleIOBuf::assign
      Src: /src/brpc/test/iobuf_unittest.cpp:1971,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1972,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1973,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1973,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1973,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1974,1
    - Dst: butil::SingleIOBuf::get_begin
      Src: /src/brpc/test/iobuf_unittest.cpp:1974,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1977,1
    - Dst: butil::SingleIOBuf::assign
      Src: /src/brpc/test/iobuf_unittest.cpp:1977,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1978,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1979,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1979,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1979,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1980,1
    - Dst: butil::SingleIOBuf::get_begin
      Src: /src/brpc/test/iobuf_unittest.cpp:1980,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1981
      start: 1955
    functionDepth: 1
    functionLinenumber: 1955
    functionLinenumberEnd: 1981
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::SingleIOBuf::get_begin
    - malloc
    - ASSERT_TRUE
    - std::string
    - ASSERT_EQ
    - memset
    - butil::IOBuf::backing_block_num
    - butil::SingleIOBuf::SingleIOBuf
    - butil::SingleIOBuf::get_length
    - butil::SingleIOBuf::assign
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append_user_data
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, single_iobuf_assign_large_multi_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1984,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1985,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1993,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:1993,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1996,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1996,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1997
      start: 1983
    functionDepth: 1
    functionLinenumber: 1983
    functionLinenumberEnd: 1997
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBufInputStream::peek
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2002,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:2002,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:2004,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2004,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2005,1
    - Dst: butil::IOBufInputStream::eof
      Src: /src/brpc/test/iobuf_unittest.cpp:2005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2006
      start: 1999
    functionDepth: 1
    functionLinenumber: 1999
    functionLinenumberEnd: 2006
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - butil::IOBufInputStream::get
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufInputStream::eof
    - butil::IOBuf::IOBuf
    - butil::IOBufInputStream::peek
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2009,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2010,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2014,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2014,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2014,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2015,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2015,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2016,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2017,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:2017,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2018
      start: 2008
    functionDepth: 1
    functionLinenumber: 2008
    functionLinenumberEnd: 2018
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufInputStream::get
    - ASSERT_TRUE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBufInputStream::peek
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_accepts_const_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2025,1
    - Dst: std::min
      Src: /src/brpc/test/iobuf_unittest.cpp:2026,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2026,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/iobuf_unittest.cpp:2027,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:2027,1
    - Dst: memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:2028,1
    - Dst: data
      Src: /src/brpc/test/iobuf_unittest.cpp:2028,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2029,1
    - Dst: butil::IOBuf*::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:2029,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - buf
    - ' payload'
    - chunk
    argTypes:
    - butil::IOBuf*
    - std::string
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2022
    functionDepth: 0
    functionLinenumber: 2022
    functionLinenumberEnd: 2031
    functionName: append_as_separate_blocks
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - static_cast<char*>
    - memcpy
    - butil::IOBuf*::append_user_data
    - std::min
    - ASSERT_EQ
    - data
    - size
    linkageType: ''
    returnType: void
    signature: "void append_as_separate_blocks(butil::IOBuf* buf,\n                                      const
      std::string& payload,\n                                      size_t chunk)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2034,1
    - Dst: append_as_separate_blocks
      Src: /src/brpc/test/iobuf_unittest.cpp:2036,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2037,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2037,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2040,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2041,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2041,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2044,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:2044,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2045
      start: 2033
    functionDepth: 1
    functionLinenumber: 2033
    functionLinenumberEnd: 2045
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append_as_separate_blocks
    - butil::IOBufInputStream::gcount
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - butil::IOBufInputStream::peek
    - ASSERT_GT
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_multi_block_read)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:2051,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2053,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/iobuf_unittest.cpp:2053,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2055,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2056,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2057,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2057,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2060,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2061,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2063,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2064
      start: 2047
    functionDepth: 1
    functionLinenumber: 2047
    functionLinenumberEnd: 2064
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufInputStream::gcount
    - butil::IOBuf::append
    - std::string::push_back
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - butil::IOBuf::backing_block_num
    - ASSERT_GT
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - std::string::reserve
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_large_payload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2067,1
    - Dst: append_as_separate_blocks
      Src: /src/brpc/test/iobuf_unittest.cpp:2069,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2075,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2076,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2078,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2082,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2083,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2085,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2086
      start: 2066
    functionDepth: 1
    functionLinenumber: 2066
    functionLinenumberEnd: 2086
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append_as_separate_blocks
    - butil::IOBufInputStream::get
    - butil::IOBufInputStream::gcount
    - std::string::push_back
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_get_matches_read)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2089,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2090,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2097,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2097,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2098,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:2098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2099,1
    - Dst: butil::IOBufInputStream::eof
      Src: /src/brpc/test/iobuf_unittest.cpp:2099,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2100
      start: 2088
    functionDepth: 0
    functionLinenumber: 2088
    functionLinenumberEnd: 2100
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufInputStream::gcount
    - ASSERT_TRUE
    - butil::IOBuf::append
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - butil::IOBufInputStream::eof
    - butil::IOBuf::IOBuf
    - memcmp
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_short_read_at_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2103,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:2106,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/iobuf_unittest.cpp:2107,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:2107,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2107,1
    - Dst: memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:2108,1
    - Dst: data
      Src: /src/brpc/test/iobuf_unittest.cpp:2108,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2109,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:2109,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2109,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2116,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2116,1
    - Dst: butil::IOBufInputStream::rdbuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2117
      start: 2102
    functionDepth: 1
    functionLinenumber: 2102
    functionLinenumberEnd: 2117
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append_user_data
    - malloc
    - static_cast<char*>
    - memcpy
    - ASSERT_EQ
    - data
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - butil::IOBufInputStream::rdbuf
    - size
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_in_avail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2125,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2126
      start: 2119
    functionDepth: 1
    functionLinenumber: 2119
    functionLinenumberEnd: 2126
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::to_string
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2129,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2135,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2136
      start: 2128
    functionDepth: 1
    functionLinenumber: 2128
    functionLinenumberEnd: 2136
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_appends_not_overwrites)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:2141,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2143,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/iobuf_unittest.cpp:2143,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2145,1
    - Dst: butil::IOBufOutputStream::write
      Src: /src/brpc/test/iobuf_unittest.cpp:2148,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:2148,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2149,1
    - Dst: butil::IOBufOutputStream::good
      Src: /src/brpc/test/iobuf_unittest.cpp:2149,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2151,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2152,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2153
      start: 2138
    functionDepth: 1
    functionLinenumber: 2138
    functionLinenumberEnd: 2153
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - ASSERT_GT
    - std::string::push_back
    - ASSERT_EQ
    - butil::IOBuf::backing_block_num
    - std::string::data
    - butil::IOBufOutputStream::write
    - butil::IOBuf::IOBuf
    - butil::IOBufOutputStream::good
    - std::string::reserve
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_large_payload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2159,1
    - Dst: butil::IOBufOutputStream::write
      Src: /src/brpc/test/iobuf_unittest.cpp:2162,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:2162,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2162,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2164,1
    - Dst: butil::IOBufOutputStream::put
      Src: /src/brpc/test/iobuf_unittest.cpp:2168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2171,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2172,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2173
      start: 2155
    functionDepth: 1
    functionLinenumber: 2155
    functionLinenumberEnd: 2173
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::to_string
    - ASSERT_EQ
    - std::string::data
    - butil::IOBufOutputStream::write
    - butil::IOBufOutputStream::put
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_xsputn_matches_overflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2178,1
    - Dst: butil::IOBufOutputStream::flush
      Src: /src/brpc/test/iobuf_unittest.cpp:2181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2182,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:2182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2183,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2183,1
    - Dst: butil::IOBufOutputStream::flush
      Src: /src/brpc/test/iobuf_unittest.cpp:2186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2187,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:2187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2188,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2189
      start: 2175
    functionDepth: 1
    functionLinenumber: 2175
    functionLinenumberEnd: 2189
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::length
    - butil::IOBuf::to_string
    - butil::IOBufOutputStream::flush
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_flush_shrinks_eagerly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2194,1
    - Dst: butil::IOBufOutputStream::write
      Src: /src/brpc/test/iobuf_unittest.cpp:2198,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:2198,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2200,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2200,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2201,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2202
      start: 2191
    functionDepth: 1
    functionLinenumber: 2191
    functionLinenumberEnd: 2202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::to_string
    - ASSERT_GT
    - ASSERT_EQ
    - std::string::data
    - butil::IOBufOutputStream::write
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_dedicated_block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2219
      start: 2204
    functionDepth: 0
    functionLinenumber: 2204
    functionLinenumberEnd: 2219
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_round_trip_with_input_stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2239,1
    - Dst: nlohmann::json::dump
      Src: /src/brpc/test/iobuf_unittest.cpp:2239,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2239,1
    - Dst: nlohmann::json::parse
      Src: /src/brpc/test/iobuf_unittest.cpp:2243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2247,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2248,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2252,1
    - Dst: std::setw
      Src: /src/brpc/test/iobuf_unittest.cpp:2255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2257,1
    - Dst: nlohmann::json::dump
      Src: /src/brpc/test/iobuf_unittest.cpp:2257,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2259,1
    - Dst: nlohmann::json::parse
      Src: /src/brpc/test/iobuf_unittest.cpp:2259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2260
      start: 2225
    functionDepth: 1
    functionLinenumber: 2225
    functionLinenumberEnd: 2260
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - nlohmann::json::parse
    - std::setw
    - butil::IOBuf::to_string
    - nlohmann::json::dump
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_stream_nlohmann_json_round_trip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/test/iobuf_unittest.cpp:2266,1
    - Dst: nlohmann::json::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2268,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2271,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2276,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2277,1
    - Dst: nlohmann::json::dump
      Src: /src/brpc/test/iobuf_unittest.cpp:2277,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2277,1
    - Dst: nlohmann::json::parse
      Src: /src/brpc/test/iobuf_unittest.cpp:2280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2282,1
    - Dst: nlohmann::json::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2285
      start: 2262
    functionDepth: 1
    functionLinenumber: 2262
    functionLinenumberEnd: 2285
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - nlohmann::json::parse
    - mcpack2pb::Serializer::begin_mcpack_array
    - nlohmann::json::size
    - butil::IOBuf::to_string
    - nlohmann::json::dump
    - ASSERT_EQ
    - nlohmann::json::push_back
    - ASSERT_GT
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_stream_nlohmann_json_large_array)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:67,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:67,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 66
    functionDepth: 1
    functionLinenumber: 66
    functionLinenumberEnd: 69
    functionName: check_tls_block
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    - ASSERT_EQ
    - butil::iobuf::get_tls_block_head
    linkageType: ''
    returnType: void
    signature: void check_tls_block()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: operator
      Src: /src/brpc/test/iobuf_unittest.cpp:75,1
    - Dst: insert
      Src: /src/brpc/test/iobuf_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - block_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: debug_block_allocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - operator
    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:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:82,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - b
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 86
    functionName: debug_block_deallocate
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - erase
    - ASSERT_TRUE
    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: 90
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 90
    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:93,1
    - Dst: butil::iobuf::remove_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:94,1
    - Dst: init
      Src: /src/brpc/test/iobuf_unittest.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 100
    functionName: install_debug_allocator
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 14
    functionsReached:
    - init
    - butil::iobuf::remove_tls_block_chain
    - is_debug_allocator_enabled
    - LOG
    linkageType: ''
    returnType: void
    signature: void install_debug_allocator()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:105,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:109,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - bin_name
    - filename
    - topn
    argTypes:
    - char*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 110
    functionName: show_prof_and_rm
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 3
    functionsReached:
    - ASSERT_EQ
    - system
    - snprintf
    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:113,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:114,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: seek
      Src: /src/brpc/test/iobuf_unittest.cpp:117,1
    - Dst: butil::iobuf::get_portal_next
      Src: /src/brpc/test/iobuf_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:121,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:122,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 124
    functionName: check_memory_leak
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::iobuf::get_tls_block_head
    - ASSERT_TRUE
    - butil::iobuf::get_portal_next
    - ASSERT_EQ
    - is_debug_allocator_enabled
    - seek
    - size
    - butil::iobuf::get_tls_block_count
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    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:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 132
    functionDepth: 2
    functionLinenumber: 132
    functionLinenumberEnd: 134
    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:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 139
    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:143,1
    - Dst: pipe
      Src: /src/brpc/test/iobuf_unittest.cpp:143,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:145,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:146,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:147,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:147,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 148
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - pipe
    - ASSERT_EQ
    - 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:151,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:154,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:158,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:159,1
    - Dst: butil::IOBuf::pop_front
      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:162,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:162,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:165,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:166,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:170,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:171,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:172,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:172,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:175,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:178,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:181,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:184,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:186,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:187,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:188,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 150
    functionDepth: 2
    functionLinenumber: 150
    functionLinenumberEnd: 189
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - to_str
    - ASSERT_FALSE
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::append
    - std::string::push_back
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::empty
    - std::string::erase
    - butil::IOBuf::IOBuf
    - std::string::clear
    - butil::IOBuf::pop_front
    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:192,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:195,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:200,1
    - Dst: butil::IOBuf::pop_back
      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:203,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:203,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:204,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:206,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:209,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:211,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:212,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:212,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:213,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:213,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:216,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:219,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:220,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:222,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:225,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:227,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:228,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:228,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:229,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:229,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::append
    - butil::IOBuf::pop_back
    - std::string::push_back
    - ASSERT_EQ
    - std::string::resize
    - std::string::length
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - std::string::clear
    - std::string::size
    - to_str
    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:233,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:237,1
    - Dst: butil::IOBuf::empty
      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::append
      Src: /src/brpc/test/iobuf_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:240,1
    - Dst: std::string
      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::append
      Src: /src/brpc/test/iobuf_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:243,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:245,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:246,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:250,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:251,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:251,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:252,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:253,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 232
    functionDepth: 2
    functionLinenumber: 232
    functionLinenumberEnd: 254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::length
    - std::string
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - to_str
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, append)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: install_debug_allocator
      Src: /src/brpc/test/iobuf_unittest.cpp:257,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:265,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:265,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:266,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:267,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:273,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:273,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:274,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:275,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:279,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:280,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:284,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:285,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:287,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:296,1
    - Dst: butil::IOBuf::appendv
      Src: /src/brpc/test/iobuf_unittest.cpp:296,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:297,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:298,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:298,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:298,1
    - Dst: free
      Src: /src/brpc/test/iobuf_unittest.cpp:299,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 256
    functionDepth: 2
    functionLinenumber: 256
    functionLinenumberEnd: 300
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::appendv
    - malloc
    - install_debug_allocator
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - free
    - ASSERT_EQ
    - butil::IOBuf::clear
    - butil::IOBuf::size
    - ASSERT_GT
    - butil::IOBuf::IOBuf
    - memcmp
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appendv)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:304,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      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: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:310,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:316,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:316,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:318,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:319,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:319,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:326,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:328,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:330,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:330,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:333,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:337,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:337,1
    - Dst: butil::IOBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:340,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:340,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:342,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:342,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:342,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:348,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:348,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:349,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:350,1
    - Dst: butil::IOBuf::unsafe_assign
      Src: /src/brpc/test/iobuf_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:351,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:351,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 352
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - ASSERT_GE
    - butil::IOBuf::append
    - butil::IOBuf::reserve
    - butil::IOBuf::pop_back
    - ASSERT_EQ
    - butil::IOBuf::size
    - std::string::data
    - butil::IOBuf::unsafe_assign
    - 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: 358
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 358
    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:362,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:373,1
    - Dst: FakeBlock::FakeBlock
      Src: /src/brpc/test/iobuf_unittest.cpp:373,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:382,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:383,1
    - Dst: butil::IOBuf::_pop_front_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::length
      Src: /src/brpc/test/iobuf_unittest.cpp:384,1
    - Dst: butil::IOBuf::_push_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_num
      Src: /src/brpc/test/iobuf_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:390,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:391,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:392,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:393,1
    - Dst: butil::IOBuf::_push_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_num
      Src: /src/brpc/test/iobuf_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:400,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:401,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:406,1
    - Dst: butil::IOBuf::_pop_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::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:410,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:411,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:416,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:417,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:418,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:418,1
    - Dst: butil::IOBuf::_push_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:424,1
    - Dst: butil::IOBuf::_ref_num
      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_num
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:426,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:427,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:429,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:429,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:431,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:431,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:435,1
    - Dst: butil::IOBuf::_ref_num
      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::_pop_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::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:440,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:442,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:443,1
    - Dst: butil::IOBuf::_back_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:443,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:444,1
    - Dst: std::max
      Src: /src/brpc/test/iobuf_unittest.cpp:444,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:445,1
    - Dst: butil::IOBuf::_ref_at
      Src: /src/brpc/test/iobuf_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:452,1
    - Dst: butil::IOBuf::_pop_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:453,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:454,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:454,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 63
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 361
    functionDepth: 2
    functionLinenumber: 361
    functionLinenumberEnd: 461
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - install_debug_allocator
    - butil::IOBuf::_back_ref
    - ASSERT_TRUE
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - std::max
    - butil::IOBuf::_push_back_ref
    - butil::IOBuf::_pop_front_ref
    - butil::iobuf::block_shared_count
    - FakeBlock::FakeBlock
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::_ref_at
    - butil::IOBuf::_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:465,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:467,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:470,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:478,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:478,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:479,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:479,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:484,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:485,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:485,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:490,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:492,1
    - Dst: to_str
      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:496,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:497,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:503,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:504,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:505,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:510,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:510,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/iobuf_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:511,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:512,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:512,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:515,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:516,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:519,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:523,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:523,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:523,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:526,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:531,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:531,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:532,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:532,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:533,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 535
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - std::string::substr
    - install_debug_allocator
    - std::string::c_str
    - butil::IOBuf::_ref_num
    - butil::IOBuf::length
    - ASSERT_TRUE
    - butil::IOBuf::pop_front
    - LOG
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::push_back
    - butil::IOBuf::empty
    - butil::IOBuf::clear
    - std::string::erase
    - butil::IOBuf::IOBuf
    - to_str
    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:538,1
    - Dst: butil::GetDefaultBlockSize
      Src: /src/brpc/test/iobuf_unittest.cpp:540,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:541,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:542,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: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::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:550,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:551,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:552,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:556,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:561,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:564,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:565,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:568,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 569
      start: 537
    functionDepth: 2
    functionLinenumber: 537
    functionLinenumberEnd: 569
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - butil::IOBuf::_ref_num
    - butil::GetDefaultBlockSize
    - butil::IOBuf::resize
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::size
    - ASSERT_LT
    - butil::IOBuf::IOBuf
    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:572,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:575,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:576,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:578,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:580,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:581,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:583,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:587,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:591,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:593,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:595,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:596,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:597,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 598
      start: 571
    functionDepth: 2
    functionLinenumber: 571
    functionLinenumberEnd: 598
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::push_back
    - butil::IOBuf::clear
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:604,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:604,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
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:607,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:608,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:609,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:610,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:610,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 611
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - ASSERT_TRUE
    - butil::IOBuf::length
    - ASSERT_EQ
    - butil::IOBuf::push_back
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    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:614,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:618,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:620,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:621,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:623,1
    - Dst: std::string::size
      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: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:627,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:627,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:628,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:632,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/iobuf_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      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::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:639,1
    - Dst: std::string::size
      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: 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: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:644,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:648,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:648,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:650,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:650,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:651,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 613
    functionDepth: 1
    functionLinenumber: 613
    functionLinenumberEnd: 652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - butil::IOBuf::append_to
    - butil::IOBuf::to_string
    - std::string::append
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::copy_to
    - butil::IOBuf::size
    - ASSERT_GT
    - 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:655,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:657,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:661,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:662,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:664,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:665,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:669,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:670,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:671,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:672,1
    - Dst: to_str
      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: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:676,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:677,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:678,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:678,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 679
      start: 654
    functionDepth: 2
    functionLinenumber: 654
    functionLinenumberEnd: 679
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - std::vector::push_back
    - butil::IOBuf::length
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::clear
    - std::vector::size
    - butil::IOBuf::IOBuf
    - to_str
    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:682,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:684,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:688,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:689,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:691,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:692,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:693,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:697,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:698,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:699,1
    - Dst: to_str
      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: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:702,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:703,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:704,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:705,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 681
    functionDepth: 2
    functionLinenumber: 681
    functionLinenumberEnd: 706
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - install_debug_allocator
    - std::vector::push_back
    - butil::IOBuf::length
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::clear
    - std::vector::size
    - butil::IOBuf::IOBuf
    - to_str
    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:709,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:711,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:712,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:718,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:718,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:718,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:720,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:721,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:724,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:724,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: std::string::substr
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:726,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 708
    functionDepth: 2
    functionLinenumber: 708
    functionLinenumberEnd: 727
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - std::string::substr
    - install_debug_allocator
    - butil::IOBuf::length
    - butil::IOBuf::append
    - ASSERT_EQ
    - std::string::length
    - butil::IOBuf::IOBuf
    - to_str
    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:730,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:732,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:737,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:740,1
    - Dst: butil::IOPortal::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:740,1
    - Dst: std::string::erase
      Src: /src/brpc/test/iobuf_unittest.cpp:741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:742,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:743,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:746,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:746,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:748,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:749,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:751,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:752,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:752,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:754,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:755,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:756,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:757,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:761,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:761,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:763,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:764,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 729
    functionDepth: 2
    functionLinenumber: 729
    functionLinenumberEnd: 765
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - install_debug_allocator
    - LOG
    - ASSERT_EQ
    - std::string::length
    - to_str
    - butil::IOPortal::length
    - std::string::push_back
    - length
    - printf
    - butil::IOPortal::append
    - append_from_file_descriptor
    - socketpair
    - butil::IOPortal::pop_front
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOPortal::empty
    - butil::make_non_blocking
    - std::string::erase
    - close
    - 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:768,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:771,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:775,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:778,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:780,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:781,1
    - Dst: butil::IOPortal*::append
      Src: /src/brpc/test/iobuf_unittest.cpp:782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:786,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:787,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:790,1
    - Dst: butil::IOBuf::cut_multiple_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:791,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:792,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:793,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:798,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:798,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:799,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:800,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:800,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:802,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:803,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 804
      start: 767
    functionDepth: 2
    functionLinenumber: 767
    functionLinenumberEnd: 804
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - to_str
    - butil::IOPortal::IOPortal
    - ARRAY_SIZE
    - install_debug_allocator
    - butil::IOPortal*::append
    - ASSERT_TRUE
    - std::string::append
    - std::string::push_back
    - ASSERT_EQ
    - std::string::length
    - butil::make_non_blocking
    - empty
    - butil::IOBuf::cut_multiple_into_file_descriptor
    - close
    - socketpair
    - butil::IOPortal::append_from_file_descriptor
    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:807,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:809,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:813,1
    - Dst: push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:814,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:815,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:817,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:818,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:819,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:820,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:820,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:821,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:821,1
    - Dst: std::string::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:826,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:826,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:826,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:827,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:827,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:828,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:829,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: socketpair
      Src: /src/brpc/test/iobuf_unittest.cpp:832,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:833,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/iobuf_unittest.cpp:834,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:836,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: setsockopt
      Src: /src/brpc/test/iobuf_unittest.cpp:838,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:841,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:842,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:842,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:844,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:844,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:845,1
    - Dst: printf
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:847,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:849,1
    - Dst: to_str
      Src: /src/brpc/test/iobuf_unittest.cpp:849,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:851,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:852,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 806
    functionDepth: 2
    functionLinenumber: 806
    functionLinenumberEnd: 853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - install_debug_allocator
    - LOG
    - ASSERT_EQ
    - std::string::length
    - empty
    - cut_into_file_descriptor
    - to_str
    - butil::IOPortal::length
    - ASSERT_TRUE
    - std::string::push_back
    - length
    - append
    - setsockopt
    - printf
    - std::string::clear
    - size
    - butil::IOPortal::append
    - socketpair
    - append_from_file_descriptor
    - push_back
    - butil::IOPortal::cutn
    - butil::IOPortal::empty
    - butil::make_non_blocking
    - close
    - rand
    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:856,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:858,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:864,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:864,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:866,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:868,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:870,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/test/iobuf_unittest.cpp:871,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:872,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:875,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:876,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:877,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:877,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:878,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 879
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 879
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - show_prof_and_rm
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::length
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - LOG
    - ASSERT_EQ
    - std::string::length
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    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:883,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:885,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:886,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:889,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:895,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:897,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:898,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:899,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:904,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:904,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:905,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:905,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:906,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:909,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:911,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:913,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:915,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:916,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:920,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:920,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:925,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:929,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:930,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:931,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:932,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:938,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:939,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:940,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/iobuf_unittest.cpp:942,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:942,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:944,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:945,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:946,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:947,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:948,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:949,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:951,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:952,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:952,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:955,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:956,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 957
      start: 882
    functionDepth: 1
    functionLinenumber: 882
    functionLinenumberEnd: 957
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - ARRAY_SIZE
    - butil::Timer::stop
    - show_prof_and_rm
    - butil::IOBuf::_ref_num
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::length
    - butil::IOBuf::append
    - LOG
    - butil::IOBuf::clear
    - std::string::length
    - butil::IOBuf::push_back
    - butil::Timer::start
    - ASSERT_EQ
    - ASSERT_LT
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    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:960,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:963,1
    - Dst: rand
      Src: /src/brpc/test/iobuf_unittest.cpp:963,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:964,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:968,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:972,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/iobuf_unittest.cpp:980,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: butil::TempFile::save_bin
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:981,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:983,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:984,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:984,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:987,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:987,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:988,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:990,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:992,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:993,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:993,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:995,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:996,1
    - Dst: strerror
      Src: /src/brpc/test/iobuf_unittest.cpp:996,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:997,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1000,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1003,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1005,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1006,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1007,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1008,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1009,1
    - Dst: std::vector::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1012,1
    - Dst: append
      Src: /src/brpc/test/iobuf_unittest.cpp:1013,1
    - Dst: length
      Src: /src/brpc/test/iobuf_unittest.cpp:1014,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1015,1
    - Dst: cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1018,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1019,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1021,1
    - Dst: close
      Src: /src/brpc/test/iobuf_unittest.cpp:1022,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1023,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1026,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1027,1
    - Dst: empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1027,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/iobuf_unittest.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1030,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1030,1
    - Dst: std::string::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1032,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1035,1
    - Dst: system
      Src: /src/brpc/test/iobuf_unittest.cpp:1035,1
    - Dst: remove
      Src: /src/brpc/test/iobuf_unittest.cpp:1038,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1042,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1043,1
    - Dst: show_prof_and_rm
      Src: /src/brpc/test/iobuf_unittest.cpp:1044,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1046
      start: 959
    functionDepth: 1
    functionLinenumber: 959
    functionLinenumberEnd: 1046
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - remove
    - butil::IOPortal::IOPortal
    - std::vector::clear
    - strerror
    - LOG
    - ASSERT_EQ
    - std::string::length
    - butil::TempFile::fname
    - butil::Timer::start
    - std::vector::size
    - cut_into_file_descriptor
    - empty
    - std::string::size
    - std::vector::reserve
    - butil::Timer::stop
    - ASSERT_TRUE
    - butil::IOPortal::length
    - length
    - append
    - open
    - snprintf
    - butil::TempFile::TempFile
    - butil::Timer::Timer
    - show_prof_and_rm
    - std::vector::push_back
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - std::string::resize
    - butil::TempFile::save_bin
    - butil::Timer::n_elapsed
    - butil::IOPortal::cutn
    - ARRAY_SIZE
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOPortal::empty
    - system
    - std::string::data
    - close
    - butil::IOBuf::IOBuf
    - rand
    - butil::IOPortal::append_from_file_descriptor
    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:1051,1
    - Dst: proto::Misc::set_required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1052,1
    - Dst: proto::Misc::set_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1053,1
    - Dst: proto::Misc::set_required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1054,1
    - Dst: proto::Misc::set_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1055,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1058,1
    - Dst: proto::Misc::add_repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1059,1
    - Dst: proto::Misc::set_required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1061,1
    - Dst: proto::Misc::set_required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1062,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1066,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1068,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1068,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: proto::Misc::SerializeToZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1075,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1079,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1080,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1080,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1081,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1082,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1085,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1088,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1088,1
    - Dst: butil::IOBufAsZeroCopyInputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1090,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: proto::Misc::ParseFromZeroCopyStream
      Src: /src/brpc/test/iobuf_unittest.cpp:1093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: proto::Misc::ByteSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: butil::IOBufAsZeroCopyInputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1095,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: proto::Misc::required_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1097,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: proto::Misc::has_optional_enum
      Src: /src/brpc/test/iobuf_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: proto::Misc::required_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1099,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: proto::Misc::has_optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: proto::Misc::optional_uint64
      Src: /src/brpc/test/iobuf_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1102,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1102,1
    - Dst: proto::Misc::required_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: proto::Misc::has_optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1104,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1104,1
    - Dst: proto::Misc::optional_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1104,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: proto::Misc::repeated_string_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: proto::Misc::repeated_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1109,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1109,1
    - Dst: proto::Misc::required_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1109,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1110,1
    - Dst: proto::Misc::has_optional_bool
      Src: /src/brpc/test/iobuf_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1111,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1111,1
    - Dst: proto::Misc::required_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1111,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1112,1
    - Dst: proto::Misc::has_optional_int32
      Src: /src/brpc/test/iobuf_unittest.cpp:1112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1113
      start: 1048
    functionDepth: 1
    functionLinenumber: 1048
    functionLinenumberEnd: 1113
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::BackUp
    - proto::Misc::required_enum
    - proto::Misc::set_optional_string
    - ASSERT_EQ
    - proto::Misc::has_optional_string
    - proto::Misc::has_optional_uint64
    - proto::Misc::set_required_uint64
    - ASSERT_FALSE
    - ASSERT_TRUE
    - proto::Misc::required_int32
    - proto::Misc::set_required_string
    - snprintf
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - proto::Misc::ByteSize
    - proto::Misc::required_bool
    - proto::Misc::SerializeToZeroCopyStream
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - butil::IOBuf::append
    - proto::Misc::add_repeated_string
    - proto::Misc::has_optional_bool
    - proto::Misc::required_string
    - proto::Misc::repeated_string_size
    - butil::IOBuf::pop_front
    - proto::Misc::required_uint64
    - proto::Misc::optional_string
    - proto::Misc::set_required_bool
    - proto::Misc::has_optional_enum
    - proto::Misc::ParseFromZeroCopyStream
    - butil::IOBuf::length
    - proto::Misc::repeated_string
    - butil::IOBufAsZeroCopyInputStream::Next
    - proto::Misc::has_optional_int32
    - proto::Misc::set_required_enum
    - proto::Misc::optional_uint64
    - butil::IOBuf::IOBuf
    - proto::Misc::set_required_int32
    - proto::Misc::set_optional_uint64
    - 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:1119,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1120,1
    - Dst: butil::GetDefaultBlockSize
      Src: /src/brpc/test/iobuf_unittest.cpp:1121,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1129,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1131,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1131,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1134,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1136,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1136,1
    - Dst: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1139,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1142,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      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: BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1149,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1152,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1154,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1156,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1160,1
    - Dst: Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1162,1
    - Dst: ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1164,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1115
    functionDepth: 1
    functionLinenumber: 1115
    functionLinenumberEnd: 1167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::GetDefaultBlockSize
    - ByteCount
    - BackUp
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - Next
    - 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:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1177,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1177,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1179,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1182,1
    - Dst: butil::IOBuf::backing_block_num
      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: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1186,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1188,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1188,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1191,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1197,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1198,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1203,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1204,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1205,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1206,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1207,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1208,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
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1212,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1214,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::ByteCount
      Src: /src/brpc/test/iobuf_unittest.cpp:1214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1215,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1216
      start: 1169
    functionDepth: 1
    functionLinenumber: 1169
    functionLinenumberEnd: 1216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::resize
    - butil::IOBufAsZeroCopyOutputStream::Next
    - LOG
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - ASSERT_EQ
    - butil::IOBuf::size
    - butil::IOBufAsZeroCopyOutputStream::ByteCount
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    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:1221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1223
      start: 1218
    functionDepth: 0
    functionLinenumber: 1218
    functionLinenumberEnd: 1223
    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:1226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1232,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1235,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1239,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1239,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1242,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1245,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1245,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1246
      start: 1225
    functionDepth: 1
    functionLinenumber: 1225
    functionLinenumberEnd: 1246
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBufAsZeroCopyOutputStream::Next
    - pthread_join
    - ASSERT_EQ
    - 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:1249,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1257,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1257,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::BackUp
      Src: /src/brpc/test/iobuf_unittest.cpp:1260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1264,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1264,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1265,1
    - Dst: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1266,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1266,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1266,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1267
      start: 1248
    functionDepth: 1
    functionLinenumber: 1248
    functionLinenumberEnd: 1267
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::get_tls_block_head
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBufAsZeroCopyOutputStream::Next
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - ASSERT_EQ
    - static_cast<size_t>
    - butil::IOBuf::IOBuf
    - butil::iobuf::block_cap
    - butil::IOBuf::_front_ref
    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: 1270
      start: 1270
    functionDepth: 0
    functionLinenumber: 1270
    functionLinenumberEnd: 1270
    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: 1280
      start: 1278
    functionDepth: 0
    functionLinenumber: 1278
    functionLinenumberEnd: 1280
    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:1283,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' foo2'
    argTypes:
    - std::ostream
    - Foo2
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1287
      start: 1282
    functionDepth: 0
    functionLinenumber: 1282
    functionLinenumberEnd: 1287
    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:1290,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/test/iobuf_unittest.cpp:1292,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1302,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1302,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: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1309,1
    - Dst: Foo2::foo1::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1313,1
    - Dst: Foo1
      Src: /src/brpc/test/iobuf_unittest.cpp:1313,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1319,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1321,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1323,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1323,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: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1328,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1289
    functionDepth: 1
    functionLinenumber: 1289
    functionLinenumberEnd: 1329
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::iobuf::reset_blockmem_allocate_and_deallocate
    - butil::IOBuf::to_string
    - butil::IOBufBuilder::move_to
    - LOG
    - Foo2::foo1::push_back
    - ASSERT_EQ
    - butil::IOBufBuilder::buf
    - Foo1
    - std::ostringstream::str
    - butil::IOBufBuilder::IOBufBuilder
    - butil::IOBuf::IOBuf
    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:1332,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/iobuf_unittest.cpp:1333,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1334,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1334,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1335,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1336,1
    - Dst: butil::IOPortal::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1339,1
    - Dst: butil::IOPortal::cut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1339,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1342,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1342,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1342,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: butil::IOPortal::fetch
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1344,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1347
      start: 1331
    functionDepth: 1
    functionLinenumber: 1331
    functionLinenumberEnd: 1347
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - ASSERT_TRUE
    - butil::IOPortal::length
    - berror
    - butil::TempFile::save
    - butil::IOPortal::cut_into_file_descriptor
    - butil::IOPortal::fetch
    - butil::IOPortal::append
    - butil::TempFile::fname
    - ASSERT_EQ
    - open
    - butil::TempFile::TempFile
    - memcmp
    - butil::IOPortal::pappend_from_file_descriptor
    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:1355,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1359,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1360,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1361,1
    - Dst: butil::IOBuf::pcut_into_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1361,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1365
      start: 1352
    functionDepth: 1
    functionLinenumber: 1352
    functionLinenumberEnd: 1365
    functionName: cut_into_fd
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - butil::IOBuf::pcut_into_file_descriptor
    - butil::IOBuf::append
    - CHECK_EQ
    - 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:1368,1
    - Dst: open
      Src: /src/brpc/test/iobuf_unittest.cpp:1371,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1372,1
    - Dst: berror
      Src: /src/brpc/test/iobuf_unittest.cpp:1372,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1374,1
    - Dst: pthread_create
      Src: /src/brpc/test/iobuf_unittest.cpp:1374,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1376,1
    - Dst: pthread_join
      Src: /src/brpc/test/iobuf_unittest.cpp:1377,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/iobuf_unittest.cpp:1379,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/iobuf_unittest.cpp:1381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1382,1
    - Dst: butil::IOPortal::pappend_from_file_descriptor
      Src: /src/brpc/test/iobuf_unittest.cpp:1382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1384,1
    - Dst: butil::IOPortal::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1385,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1387
      start: 1367
    functionDepth: 1
    functionLinenumber: 1367
    functionLinenumberEnd: 1387
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - butil::IOPortal::IOPortal
    - ASSERT_TRUE
    - berror
    - store
    - pthread_join
    - ASSERT_EQ
    - open
    - butil::IOPortal::cutn
    - butil::IOPortal::pappend_from_file_descriptor
    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:1392,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1393,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1395,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1396,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1398,1
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1400,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1402,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:1403,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1403,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1404,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1404,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1404,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1406,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1407
      start: 1389
    functionDepth: 1
    functionLinenumber: 1389
    functionLinenumberEnd: 1407
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::StringPiece::empty
    - std::string::append
    - butil::StringPiece::data
    - std::string::push_back
    - butil::StringPiece::size
    - butil::IOBuf::push_back
    - butil::IOBuf::backing_block
    - butil::IOBuf::IOBuf
    - std::string::reserve
    - std::string::size
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, slice)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1410,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1411,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1412,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1413,1
    - Dst: std::swap
      Src: /src/brpc/test/iobuf_unittest.cpp:1414,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1415,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1415,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1416,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1417
      start: 1409
    functionDepth: 1
    functionLinenumber: 1409
    functionLinenumberEnd: 1417
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::equals
    - ASSERT_TRUE
    - butil::IOBuf::append
    - butil::IOBuf::IOBuf
    - std::swap
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, swap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - 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: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1424,1
    - Dst: butil::IOBuf::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1425,1
    - Dst: std::string::resize
      Src: /src/brpc/test/iobuf_unittest.cpp:1427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1428,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1429,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1429,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1430,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1430,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1431,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1432
      start: 1419
    functionDepth: 1
    functionLinenumber: 1419
    functionLinenumberEnd: 1432
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::equals
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBuf::resize
    - std::string::resize
    - ASSERT_EQ
    - 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:1435,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1436,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1443,1
    - Dst: std::string::size
      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:1447,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1448,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1452,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1459,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1460,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1434
    functionDepth: 1
    functionLinenumber: 1434
    functionLinenumberEnd: 1461
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - ASSERT_EQ
    - 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:1464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1466,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1467,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1468,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1469,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1469,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1470,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1472,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1473,1
    - Dst: snprintf
      Src: /src/brpc/test/iobuf_unittest.cpp:1477,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1478,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1481,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1481,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1482,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1484,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/iobuf_unittest.cpp:1484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1486
      start: 1463
    functionDepth: 1
    functionLinenumber: 1463
    functionLinenumberEnd: 1486
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::buf
    - butil::IOBufAppender::move_to
    - std::string::append
    - ASSERT_EQ
    - snprintf
    - butil::IOBufAppender::push_back
    - butil::IOBufAppender::append
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, appender)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1490,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1491,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1492,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1494,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1496,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1498,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1499,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1500,1
    - Dst: butil::IOBufAppender::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1502,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1504,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1506,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1506,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1507,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1513,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1514,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1516,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1518,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1520,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/iobuf_unittest.cpp:1521,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1523,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1525,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/iobuf_unittest.cpp:1527,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/iobuf_unittest.cpp:1528,1
    - Dst: std::string::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1530,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/iobuf_unittest.cpp:1532,1
    - Dst: LOG
      Src: /src/brpc/test/iobuf_unittest.cpp:1534,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1534,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1535,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/iobuf_unittest.cpp:1536,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1537,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1538
      start: 1488
    functionDepth: 1
    functionLinenumber: 1488
    functionLinenumberEnd: 1538
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::Timer::stop
    - std::string::append
    - LOG
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::Timer::start
    - butil::IOBufAppender::append
    - butil::Timer::n_elapsed
    - butil::IOBufAppender::push_back
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    - std::string::size
    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:1541,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1544,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1545,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1562,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1563,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1563,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1564,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/iobuf_unittest.cpp:1565,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1566,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1566,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1540
    functionDepth: 1
    functionLinenumber: 1540
    functionLinenumberEnd: 1567
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::push_back
    - butil::IOBuf::push_back
    - ASSERT_STREQ
    - std::ostringstream::str
    - butil::IOBuf::IOBuf
    - butil::ToPrintable::ToPrintable
    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:1570,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1572,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1572,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1577,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/iobuf_unittest.cpp:1578,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1579,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1580,1
    - Dst: butil::IOBufBytesIterator::copy_and_forward
      Src: /src/brpc/test/iobuf_unittest.cpp:1582,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:1583,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1584,1
    - Dst: butil::IOBuf::equals
      Src: /src/brpc/test/iobuf_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1587,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1587,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1588
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1588
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - butil::IOBuf::equals
    - ASSERT_TRUE
    - butil::IOBuf::length
    - butil::IOBufBytesIterator::copy_and_forward
    - butil::IOBuf::push_back
    - ASSERT_EQ
    - ASSERT_GT
    - butil::IOBuf::IOBuf
    - butil::fast_rand_in
    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:1592,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1591
    functionDepth: 0
    functionLinenumber: 1591
    functionLinenumberEnd: 1594
    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:1597,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1608,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1608,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1611,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1614,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1617,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1596
    functionDepth: 1
    functionLinenumber: 1596
    functionLinenumberEnd: 1624
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::_ref_num
    - ASSERT_TRUE
    - butil::iobuf::block_shared_count
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::size
    - butil::IOBuf::_front_ref
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::append_user_data
    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:1627,1
    - Dst: char::char
      Src: /src/brpc/test/iobuf_unittest.cpp:1630,1
    - Dst: std::default_delete<char[]>
      Src: /src/brpc/test/iobuf_unittest.cpp:1630,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1632,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1632,1
    - Dst: std::shared_ptr::get
      Src: /src/brpc/test/iobuf_unittest.cpp:1633,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1643,1
    - Dst: std::abort
      Src: /src/brpc/test/iobuf_unittest.cpp:1647,1
    - Dst: reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1650,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: std::move
      Src: /src/brpc/test/iobuf_unittest.cpp:1660,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: std::shared_ptr::use_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1663,1
    - Dst: std::shared_ptr::reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1664,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1669,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1669,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1670,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1671,1
    - Dst: std::weak_ptr::expired
      Src: /src/brpc/test/iobuf_unittest.cpp:1671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1672,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1674,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1678,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1681
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - ASSERT_EQ
    - std::shared_ptr::reset
    - butil::IOBuf::size
    - butil::IOBuf::append_user_data
    - std::default_delete<char[]>
    - ASSERT_TRUE
    - butil::iobuf::block_shared_count
    - std::move
    - std::shared_ptr::use_count
    - char::char
    - std::weak_ptr::expired
    - reset
    - std::abort
    - butil::IOBuf::_ref_num
    - std::shared_ptr::get
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - butil::IOBuf::_front_ref
    - 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:1643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - partial
    - ' incr'
    argTypes:
    - std::shared_ptr<char>
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1643
    functionDepth: 1
    functionLinenumber: 1643
    functionLinenumberEnd: 1643
    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: 1646
      start: 1644
    functionDepth: 0
    functionLinenumber: 1644
    functionLinenumberEnd: 1646
    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:1647,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1647
    functionDepth: 0
    functionLinenumber: 1647
    functionLinenumberEnd: 1647
    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: 1648
      start: 1648
    functionDepth: 0
    functionLinenumber: 1648
    functionLinenumberEnd: 1648
    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:1650,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1652
    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:1684,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1687,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1695,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1695,1
    - Dst: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1697,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1698,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1698,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1703,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1704,1
    - Dst: butil::IOBuf::size
      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: butil::IOBuf::_front_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1707,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1708,1
    - Dst: butil::iobuf::block_shared_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1708,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1710,1
    - Dst: butil::IOBuf::_ref_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1711,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/iobuf_unittest.cpp:1711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1714,1
    - Dst: to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1717,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1717,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1723,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1724
      start: 1683
    functionDepth: 1
    functionLinenumber: 1683
    functionLinenumberEnd: 1724
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::_ref_num
    - ASSERT_TRUE
    - butil::iobuf::block_shared_count
    - to_string
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::size
    - butil::IOBuf::_front_ref
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::append_user_data
    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:1727,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1732,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1733,1
    - Dst: butil::IOBuf::append_user_data_with_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1736,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1737,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1738,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1738,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1739,1
    - Dst: butil::IOBuf::get_first_data_meta
      Src: /src/brpc/test/iobuf_unittest.cpp:1739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1740,1
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/test/iobuf_unittest.cpp:1740,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1742
      start: 1726
    functionDepth: 1
    functionLinenumber: 1726
    functionLinenumberEnd: 1742
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - malloc
    - butil::IOBuf::get_first_data_meta
    - ASSERT_EQ
    - butil::IOBuf::append_user_data_with_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:1745,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1746,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1747,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1747,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1749,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1750,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1751,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1752,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1755,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1757,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1757,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1759,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:1760,1
    - Dst: butil::iobuf::share_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1764,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1764,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1765,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1766,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1767
      start: 1744
    functionDepth: 1
    functionLinenumber: 1744
    functionLinenumberEnd: 1767
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::block_size
    - butil::iobuf::acquire_tls_block
    - ASSERT_NE
    - ASSERT_EQ
    - butil::IOBuf::push_back
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::share_tls_block
    - butil::iobuf::release_tls_block_chain
    - butil::IOBuf::IOBuf
    - butil::iobuf::block_cap
    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:1770,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1771,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1772,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1773,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1775,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::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1779,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1780,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::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1783,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: butil::iobuf::get_tls_block_head
      Src: /src/brpc/test/iobuf_unittest.cpp:1786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1787,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1787,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1787,1
    - Dst: butil::iobuf::acquire_tls_block
      Src: /src/brpc/test/iobuf_unittest.cpp:1788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1789,1
    - Dst: butil::iobuf::get_tls_block_count
      Src: /src/brpc/test/iobuf_unittest.cpp:1789,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1790,1
    - Dst: butil::iobuf::block_cap
      Src: /src/brpc/test/iobuf_unittest.cpp:1790,1
    - Dst: butil::iobuf::block_size
      Src: /src/brpc/test/iobuf_unittest.cpp:1790,1
    - Dst: butil::iobuf::release_tls_block_chain
      Src: /src/brpc/test/iobuf_unittest.cpp:1793,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1769
    functionDepth: 1
    functionLinenumber: 1769
    functionLinenumberEnd: 1794
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::iobuf::get_tls_block_head
    - butil::iobuf::block_size
    - butil::iobuf::acquire_tls_block
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::iobuf::remove_tls_block_chain
    - butil::iobuf::release_tls_block_chain
    - butil::IOBuf::IOBuf
    - butil::iobuf::block_cap
    - butil::iobuf::get_tls_block_count
    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:1799,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1800,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1806,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1810,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1814,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1815,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1820,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1821,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1821,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1822,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1825,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1829,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1830,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1835,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1836,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1840,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1844,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1845,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1851,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1855,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1860,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1864,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1865,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1870,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1871,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1871,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1872,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1875,1
    - Dst: butil::IOReserveAlignedBuf::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:1879,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/iobuf_unittest.cpp:1880,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/test/iobuf_unittest.cpp:1887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1888,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/test/iobuf_unittest.cpp:1888,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1889,1
    - Dst: std::memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: const_cast<void*>
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:1892,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1895,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1896,1
    - Dst: std::stringstream::str
      Src: /src/brpc/test/iobuf_unittest.cpp:1896,1
    - Dst: butil::IOReserveAlignedBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1896,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1898
      start: 1796
    functionDepth: 1
    functionLinenumber: 1796
    functionLinenumberEnd: 1898
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::stringstream::str
    - const_cast<void*>
    - butil::IOBufAsZeroCopyInputStream::Next
    - ASSERT_NE
    - butil::IOReserveAlignedBuf::to_string
    - std::memcpy
    - ASSERT_EQ
    - reinterpret_cast<uintptr_t>
    - std::string::data
    - butil::IOReserveAlignedBuf::reserve
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, reserve_aligned)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1901,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1903,1
    - Dst: memset
      Src: /src/brpc/test/iobuf_unittest.cpp:1904,1
    - Dst: strncpy
      Src: /src/brpc/test/iobuf_unittest.cpp:1907,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1908,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1909,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1910,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1910,1
    - Dst: butil::SingleIOBuf::SingleIOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1911,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1912,1
    - Dst: butil::SingleIOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1912,1
    - Dst: butil::SingleIOBuf::assign
      Src: /src/brpc/test/iobuf_unittest.cpp:1913,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1914,1
    - Dst: butil::SingleIOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1914,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1915,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1916,1
    - Dst: butil::SingleIOBuf::get_begin
      Src: /src/brpc/test/iobuf_unittest.cpp:1917,1
    - Dst: strcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:1918,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1919,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1920,1
    - Dst: butil::SingleIOBuf::append_to
      Src: /src/brpc/test/iobuf_unittest.cpp:1921,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1922,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:1922,1
    - Dst: butil::SingleIOBuf::SingleIOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1923,1
    - Dst: butil::SingleIOBuf::swap
      Src: /src/brpc/test/iobuf_unittest.cpp:1924,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1925,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1926,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1926,1
    - Dst: butil::SingleIOBuf::reset
      Src: /src/brpc/test/iobuf_unittest.cpp:1927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1928,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1928,1
    - Dst: butil::SingleIOBuf::allocate
      Src: /src/brpc/test/iobuf_unittest.cpp:1930,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1931,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1932,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1933,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1934,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1935,1
    - Dst: butil::SingleIOBuf::get_cur_ref
      Src: /src/brpc/test/iobuf_unittest.cpp:1937,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1939,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1940,1
    - Dst: butil::SingleIOBuf::deallocate
      Src: /src/brpc/test/iobuf_unittest.cpp:1941,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1944,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1945,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1947,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1948,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1949,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1950,1
    - Dst: butil::SingleIOBuf::reallocate_downward
      Src: /src/brpc/test/iobuf_unittest.cpp:1951,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1952,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1953
      start: 1900
    functionDepth: 1
    functionLinenumber: 1900
    functionLinenumberEnd: 1953
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::SingleIOBuf::get_begin
    - strcmp
    - strncpy
    - butil::SingleIOBuf::reallocate_downward
    - butil::SingleIOBuf::get_cur_ref
    - ASSERT_EQ
    - butil::IOBuf::append_user_data
    - malloc
    - ASSERT_TRUE
    - butil::SingleIOBuf::append_to
    - butil::SingleIOBuf::swap
    - butil::SingleIOBuf::reset
    - butil::SingleIOBuf::SingleIOBuf
    - butil::SingleIOBuf::assign
    - butil::IOBuf::backing_block_num
    - butil::SingleIOBuf::allocate
    - butil::IOBuf::append
    - butil::SingleIOBuf::deallocate
    - memset
    - butil::SingleIOBuf::get_length
    - butil::IOBuf::length
    - butil::SingleIOBuf::backing_block_num
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, single_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1961,1
    - Dst: memset
      Src: /src/brpc/test/iobuf_unittest.cpp:1962,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:1963,1
    - Dst: memset
      Src: /src/brpc/test/iobuf_unittest.cpp:1964,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1965,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1966,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:1967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1968,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:1968,1
    - Dst: butil::SingleIOBuf::SingleIOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1970,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1971,1
    - Dst: butil::SingleIOBuf::assign
      Src: /src/brpc/test/iobuf_unittest.cpp:1971,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1972,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1973,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1973,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1973,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1974,1
    - Dst: butil::SingleIOBuf::get_begin
      Src: /src/brpc/test/iobuf_unittest.cpp:1974,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:1977,1
    - Dst: butil::SingleIOBuf::assign
      Src: /src/brpc/test/iobuf_unittest.cpp:1977,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1978,1
    - Dst: butil::SingleIOBuf::get_length
      Src: /src/brpc/test/iobuf_unittest.cpp:1978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1979,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1979,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1979,1
    - Dst: std::string
      Src: /src/brpc/test/iobuf_unittest.cpp:1980,1
    - Dst: butil::SingleIOBuf::get_begin
      Src: /src/brpc/test/iobuf_unittest.cpp:1980,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1981
      start: 1955
    functionDepth: 1
    functionLinenumber: 1955
    functionLinenumberEnd: 1981
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::SingleIOBuf::get_begin
    - malloc
    - ASSERT_TRUE
    - std::string
    - ASSERT_EQ
    - memset
    - butil::IOBuf::backing_block_num
    - butil::SingleIOBuf::SingleIOBuf
    - butil::SingleIOBuf::get_length
    - butil::SingleIOBuf::assign
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append_user_data
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, single_iobuf_assign_large_multi_block)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:1984,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:1985,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1993,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:1993,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:1996,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:1996,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1997
      start: 1983
    functionDepth: 1
    functionLinenumber: 1983
    functionLinenumberEnd: 1997
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBufInputStream::peek
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2002,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:2002,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/iobuf_unittest.cpp:2004,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2004,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2005,1
    - Dst: butil::IOBufInputStream::eof
      Src: /src/brpc/test/iobuf_unittest.cpp:2005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2006
      start: 1999
    functionDepth: 1
    functionLinenumber: 1999
    functionLinenumberEnd: 2006
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - butil::IOBufInputStream::get
    - ASSERT_TRUE
    - ASSERT_EQ
    - butil::IOBufInputStream::eof
    - butil::IOBuf::IOBuf
    - butil::IOBufInputStream::peek
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2009,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2010,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2014,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2014,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2014,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2015,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2015,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2016,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2017,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:2017,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2018
      start: 2008
    functionDepth: 1
    functionLinenumber: 2008
    functionLinenumberEnd: 2018
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufInputStream::get
    - ASSERT_TRUE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBufInputStream::peek
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_accepts_const_iobuf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2025,1
    - Dst: std::min
      Src: /src/brpc/test/iobuf_unittest.cpp:2026,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2026,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/iobuf_unittest.cpp:2027,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:2027,1
    - Dst: memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:2028,1
    - Dst: data
      Src: /src/brpc/test/iobuf_unittest.cpp:2028,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2029,1
    - Dst: butil::IOBuf*::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:2029,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - buf
    - ' payload'
    - chunk
    argTypes:
    - butil::IOBuf*
    - std::string
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 2022
    functionDepth: 0
    functionLinenumber: 2022
    functionLinenumberEnd: 2031
    functionName: append_as_separate_blocks
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - static_cast<char*>
    - memcpy
    - butil::IOBuf*::append_user_data
    - std::min
    - ASSERT_EQ
    - data
    - size
    linkageType: ''
    returnType: void
    signature: "void append_as_separate_blocks(butil::IOBuf* buf,\n                                      const
      std::string& payload,\n                                      size_t chunk)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2034,1
    - Dst: append_as_separate_blocks
      Src: /src/brpc/test/iobuf_unittest.cpp:2036,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2037,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2037,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2040,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2041,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2041,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2042,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2044,1
    - Dst: butil::IOBufInputStream::peek
      Src: /src/brpc/test/iobuf_unittest.cpp:2044,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2045
      start: 2033
    functionDepth: 1
    functionLinenumber: 2033
    functionLinenumberEnd: 2045
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append_as_separate_blocks
    - butil::IOBufInputStream::gcount
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - butil::IOBufInputStream::peek
    - ASSERT_GT
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_multi_block_read)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:2051,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2053,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/iobuf_unittest.cpp:2053,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2055,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2056,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2057,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2057,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2060,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2061,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2062,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2063,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2064
      start: 2047
    functionDepth: 1
    functionLinenumber: 2047
    functionLinenumberEnd: 2064
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufInputStream::gcount
    - butil::IOBuf::append
    - std::string::push_back
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - butil::IOBuf::backing_block_num
    - ASSERT_GT
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - std::string::reserve
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_large_payload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2067,1
    - Dst: append_as_separate_blocks
      Src: /src/brpc/test/iobuf_unittest.cpp:2069,1
    - Dst: butil::IOBufInputStream::get
      Src: /src/brpc/test/iobuf_unittest.cpp:2075,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2076,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2078,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2082,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2083,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2084,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2085,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2086
      start: 2066
    functionDepth: 1
    functionLinenumber: 2066
    functionLinenumberEnd: 2086
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - append_as_separate_blocks
    - butil::IOBufInputStream::get
    - butil::IOBufInputStream::gcount
    - std::string::push_back
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_get_matches_read)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2089,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2090,1
    - Dst: butil::IOBufInputStream::read
      Src: /src/brpc/test/iobuf_unittest.cpp:2094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2097,1
    - Dst: butil::IOBufInputStream::gcount
      Src: /src/brpc/test/iobuf_unittest.cpp:2097,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2098,1
    - Dst: memcmp
      Src: /src/brpc/test/iobuf_unittest.cpp:2098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2099,1
    - Dst: butil::IOBufInputStream::eof
      Src: /src/brpc/test/iobuf_unittest.cpp:2099,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2100
      start: 2088
    functionDepth: 0
    functionLinenumber: 2088
    functionLinenumberEnd: 2100
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufInputStream::gcount
    - ASSERT_TRUE
    - butil::IOBuf::append
    - butil::IOBufInputStream::read
    - ASSERT_EQ
    - butil::IOBufInputStream::eof
    - butil::IOBuf::IOBuf
    - memcmp
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_short_read_at_eof)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2103,1
    - Dst: arraysize
      Src: /src/brpc/test/iobuf_unittest.cpp:2106,1
    - Dst: static_cast<char*>
      Src: /src/brpc/test/iobuf_unittest.cpp:2107,1
    - Dst: malloc
      Src: /src/brpc/test/iobuf_unittest.cpp:2107,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2107,1
    - Dst: memcpy
      Src: /src/brpc/test/iobuf_unittest.cpp:2108,1
    - Dst: data
      Src: /src/brpc/test/iobuf_unittest.cpp:2108,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2109,1
    - Dst: butil::IOBuf::append_user_data
      Src: /src/brpc/test/iobuf_unittest.cpp:2109,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2109,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2116,1
    - Dst: static_cast<std::streamsize>
      Src: /src/brpc/test/iobuf_unittest.cpp:2116,1
    - Dst: butil::IOBufInputStream::rdbuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2117
      start: 2102
    functionDepth: 1
    functionLinenumber: 2102
    functionLinenumberEnd: 2117
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append_user_data
    - malloc
    - static_cast<char*>
    - memcpy
    - ASSERT_EQ
    - data
    - static_cast<std::streamsize>
    - butil::IOBuf::IOBuf
    - butil::IOBufInputStream::rdbuf
    - size
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_input_stream_in_avail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2125,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2126
      start: 2119
    functionDepth: 1
    functionLinenumber: 2119
    functionLinenumberEnd: 2126
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::to_string
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_basic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2129,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/iobuf_unittest.cpp:2130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2135,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2136
      start: 2128
    functionDepth: 1
    functionLinenumber: 2128
    functionLinenumberEnd: 2136
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_appends_not_overwrites)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/iobuf_unittest.cpp:2141,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2143,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/iobuf_unittest.cpp:2143,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2145,1
    - Dst: butil::IOBufOutputStream::write
      Src: /src/brpc/test/iobuf_unittest.cpp:2148,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:2148,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/iobuf_unittest.cpp:2149,1
    - Dst: butil::IOBufOutputStream::good
      Src: /src/brpc/test/iobuf_unittest.cpp:2149,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2151,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2152,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2153
      start: 2138
    functionDepth: 1
    functionLinenumber: 2138
    functionLinenumberEnd: 2153
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - ASSERT_GT
    - std::string::push_back
    - ASSERT_EQ
    - butil::IOBuf::backing_block_num
    - std::string::data
    - butil::IOBufOutputStream::write
    - butil::IOBuf::IOBuf
    - butil::IOBufOutputStream::good
    - std::string::reserve
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_large_payload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2159,1
    - Dst: butil::IOBufOutputStream::write
      Src: /src/brpc/test/iobuf_unittest.cpp:2162,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:2162,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2162,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2164,1
    - Dst: butil::IOBufOutputStream::put
      Src: /src/brpc/test/iobuf_unittest.cpp:2168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2171,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2171,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2172,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2173
      start: 2155
    functionDepth: 1
    functionLinenumber: 2155
    functionLinenumberEnd: 2173
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::to_string
    - ASSERT_EQ
    - std::string::data
    - butil::IOBufOutputStream::write
    - butil::IOBufOutputStream::put
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_xsputn_matches_overflow)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2178,1
    - Dst: butil::IOBufOutputStream::flush
      Src: /src/brpc/test/iobuf_unittest.cpp:2181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2182,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:2182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2183,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2183,1
    - Dst: butil::IOBufOutputStream::flush
      Src: /src/brpc/test/iobuf_unittest.cpp:2186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2187,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/iobuf_unittest.cpp:2187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2188,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2189
      start: 2175
    functionDepth: 1
    functionLinenumber: 2175
    functionLinenumberEnd: 2189
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::length
    - butil::IOBuf::to_string
    - butil::IOBufOutputStream::flush
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_flush_shrinks_eagerly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2194,1
    - Dst: butil::IOBufOutputStream::write
      Src: /src/brpc/test/iobuf_unittest.cpp:2198,1
    - Dst: std::string::data
      Src: /src/brpc/test/iobuf_unittest.cpp:2198,1
    - Dst: std::string::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2198,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2200,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2200,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2201,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2202
      start: 2191
    functionDepth: 1
    functionLinenumber: 2191
    functionLinenumberEnd: 2202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::to_string
    - ASSERT_GT
    - ASSERT_EQ
    - std::string::data
    - butil::IOBufOutputStream::write
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_dedicated_block_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2217,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2219
      start: 2204
    functionDepth: 0
    functionLinenumber: 2204
    functionLinenumberEnd: 2219
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_output_stream_round_trip_with_input_stream)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2239,1
    - Dst: nlohmann::json::dump
      Src: /src/brpc/test/iobuf_unittest.cpp:2239,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2239,1
    - Dst: nlohmann::json::parse
      Src: /src/brpc/test/iobuf_unittest.cpp:2243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2247,1
    - Dst: size
      Src: /src/brpc/test/iobuf_unittest.cpp:2247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2248,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2252,1
    - Dst: std::setw
      Src: /src/brpc/test/iobuf_unittest.cpp:2255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2257,1
    - Dst: nlohmann::json::dump
      Src: /src/brpc/test/iobuf_unittest.cpp:2257,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2259,1
    - Dst: nlohmann::json::parse
      Src: /src/brpc/test/iobuf_unittest.cpp:2259,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2260
      start: 2225
    functionDepth: 1
    functionLinenumber: 2225
    functionLinenumberEnd: 2260
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - nlohmann::json::parse
    - std::setw
    - butil::IOBuf::to_string
    - nlohmann::json::dump
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_stream_nlohmann_json_round_trip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/test/iobuf_unittest.cpp:2266,1
    - Dst: nlohmann::json::push_back
      Src: /src/brpc/test/iobuf_unittest.cpp:2268,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/iobuf_unittest.cpp:2271,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/iobuf_unittest.cpp:2276,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/test/iobuf_unittest.cpp:2276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2277,1
    - Dst: nlohmann::json::dump
      Src: /src/brpc/test/iobuf_unittest.cpp:2277,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/iobuf_unittest.cpp:2277,1
    - Dst: nlohmann::json::parse
      Src: /src/brpc/test/iobuf_unittest.cpp:2280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2282,1
    - Dst: nlohmann::json::size
      Src: /src/brpc/test/iobuf_unittest.cpp:2282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/iobuf_unittest.cpp:2284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2285
      start: 2262
    functionDepth: 1
    functionLinenumber: 2262
    functionLinenumberEnd: 2285
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/iobuf_unittest.cpp
    functionUses: 0
    functionsReached:
    - nlohmann::json::parse
    - mcpack2pb::Serializer::begin_mcpack_array
    - nlohmann::json::size
    - butil::IOBuf::to_string
    - nlohmann::json::dump
    - ASSERT_EQ
    - nlohmann::json::push_back
    - ASSERT_GT
    - butil::IOBuf::IOBuf
    - butil::IOBuf::backing_block_num
    linkageType: ''
    returnType: void
    signature: void TEST_F(IOBufTest, as_stream_nlohmann_json_large_array)
  - 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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - ASSERT_FALSE
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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_EQ
    - SCOPED_TRACE
    - EXPECT_TRUE
    - ARRAYSIZE_UNSAFE
    - butil::debug::ParseProcMaps
    - std::vector::size
    - std::vector::empty
    - butil::StringPrintf
    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:
    - butil::debug::ReadProcMaps
    - std::string::find
    - EXPECT_EQ
    - ASSERT_TRUE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - ASSERT_FALSE
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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_EQ
    - SCOPED_TRACE
    - EXPECT_TRUE
    - ARRAYSIZE_UNSAFE
    - butil::debug::ParseProcMaps
    - std::vector::size
    - std::vector::empty
    - butil::StringPrintf
    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:
    - butil::debug::ReadProcMaps
    - std::string::find
    - EXPECT_EQ
    - ASSERT_TRUE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - ASSERT_FALSE
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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_EQ
    - SCOPED_TRACE
    - EXPECT_TRUE
    - ARRAYSIZE_UNSAFE
    - butil::debug::ParseProcMaps
    - std::vector::size
    - std::vector::empty
    - butil::StringPrintf
    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:
    - butil::debug::ReadProcMaps
    - std::string::find
    - EXPECT_EQ
    - ASSERT_TRUE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - ASSERT_FALSE
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ASSERT_EQ
    - std::vector::size
    - butil::debug::ParseProcMaps
    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_EQ
    - SCOPED_TRACE
    - EXPECT_TRUE
    - ARRAYSIZE_UNSAFE
    - butil::debug::ParseProcMaps
    - std::vector::size
    - std::vector::empty
    - butil::StringPrintf
    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:
    - butil::debug::ReadProcMaps
    - std::string::find
    - EXPECT_EQ
    - ASSERT_TRUE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - arraysize
    - SCOPED_TRACE
    - butil::debug::ParseProcMaps
    - butil::StringPrintf
    - EXPECT_FALSE
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    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:
    - std::vector::size
    - EXPECT_TRUE
    - butil::debug::ParseProcMaps
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 52
    functionName: AutoConcurrencyLimiterTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: AutoConcurrencyLimiterTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:80,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:81,1
    - Dst: AddSample
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:85,1
    - Dst: AddSample
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:89,1
    - Dst: AddSample
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:96,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 5
    argNames:
    - ' limiter'
    - succ_count
    - succ_latency
    - fail_count
    - fail_latency
    argTypes:
    - brpc::policy::AutoConcurrencyLimiter
    - int
    - int64_t
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 97
    functionName: AddSamplesAndTriggerWindow
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    - AddSample
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: "void AddSamplesAndTriggerWindow(brpc::policy::AutoConcurrencyLimiter&
      limiter,\n                                 int succ_count, int64_t succ_latency,\n
      \                                int fail_count, int64_t fail_latency)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:104,1
    - Dst: AddSamplesAndTriggerWindow
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:105,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:109,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 100
    functionDepth: 2
    functionLinenumber: 100
    functionLinenumberEnd: 111
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_LT
    - brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    - AddSamplesAndTriggerWindow
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(AutoConcurrencyLimiterTest, ThresholdZeroPreservesOriginalBehavior)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:118,1
    - Dst: AddSamplesAndTriggerWindow
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:119,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:123,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 125
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_LT
    - brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    - AddSamplesAndTriggerWindow
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(AutoConcurrencyLimiterTest, BelowThresholdZeroPunishment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:132,1
    - Dst: AddSamplesAndTriggerWindow
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:133,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:137,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:138,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 128
    functionDepth: 2
    functionLinenumber: 128
    functionLinenumberEnd: 139
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_LT
    - brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    - AddSamplesAndTriggerWindow
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(AutoConcurrencyLimiterTest, ExactlyAtThresholdZeroPunishment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:151,1
    - Dst: AddSamplesAndTriggerWindow
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:152,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:153,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:154,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:162,1
    - Dst: AddSamplesAndTriggerWindow
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:163,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:164,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 142
    functionDepth: 2
    functionLinenumber: 142
    functionLinenumberEnd: 167
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_auto_concurrency_limiter_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_LT
    - brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    - AddSamplesAndTriggerWindow
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(AutoConcurrencyLimiterTest, AboveThresholdLinearScaling)
  - 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:
    - printf
    - IsTcMallocBypassed
    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:
    - static_cast<char*>
    - ASSERT_TRUE
    - HideValueFromCompiler
    - 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:
    - malloc
    - static_cast<char*>
    - ASSERT_TRUE
    - free
    - 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:
    - ASSERT_TRUE
    - IsTcMallocBypassed
    - HideValueFromCompiler
    - 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:
    - char::char
    - ASSERT_TRUE
    - IsTcMallocBypassed
    - HideValueFromCompiler
    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:
    - butil::BaseIteratorRangeToNumberTraits::max
    - static_cast<size_t>
    - ASSERT_EQ
    - char::char
    - HideValueFromCompiler
    - OverflowTestsSoftExpectTrue
    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:
    - CallocDiesOnOOM
    - EXPECT_TRUE
    - butil::BaseIteratorRangeToNumberTraits::max
    - 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::min
    - static_cast<size_t>
    - std::max
    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:
    - mmap
    - ASSERT_TRUE
    - sbrk
    - ArePointersToSameArea
    - static_cast<void*>
    - ASSERT_NE
    - ASSERT_EQ
    - EXPECT_FALSE
    - scoped_ptr::get
    - reinterpret_cast<uintptr_t>
    - IsTcMallocBypassed
    - reinterpret_cast<void*>
    - munmap
    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:
    - printf
    - IsTcMallocBypassed
    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:
    - static_cast<char*>
    - ASSERT_TRUE
    - HideValueFromCompiler
    - 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:
    - malloc
    - static_cast<char*>
    - ASSERT_TRUE
    - free
    - 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:
    - ASSERT_TRUE
    - IsTcMallocBypassed
    - HideValueFromCompiler
    - 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:
    - char::char
    - ASSERT_TRUE
    - IsTcMallocBypassed
    - HideValueFromCompiler
    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:
    - butil::BaseIteratorRangeToNumberTraits::max
    - static_cast<size_t>
    - ASSERT_EQ
    - char::char
    - HideValueFromCompiler
    - OverflowTestsSoftExpectTrue
    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:
    - CallocDiesOnOOM
    - EXPECT_TRUE
    - butil::BaseIteratorRangeToNumberTraits::max
    - 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::min
    - static_cast<size_t>
    - std::max
    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:
    - mmap
    - ASSERT_TRUE
    - sbrk
    - ArePointersToSameArea
    - static_cast<void*>
    - ASSERT_NE
    - ASSERT_EQ
    - EXPECT_FALSE
    - scoped_ptr::get
    - reinterpret_cast<uintptr_t>
    - IsTcMallocBypassed
    - reinterpret_cast<void*>
    - munmap
    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:
    - butil::atomic*::fetch_sub
    - butil::atomic*::fetch_add
    - cpu_relax
    - int::int
    - butil::cpuwide_time_ns
    - bthread::futex_wait_private
    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
    - pthread_create
    - bthread_usleep
    - butil::atomic::fetch_add
    - sched_yield
    - butil::cpuwide_time_ns
    - pthread_join
    - ASSERT_EQ
    - bthread::futex_wake_private
    - butil::atomic::load
    - printf
    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_wake_private
    - bthread::futex_wait_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:
    - sleep
    - pthread_create
    - butil::Timer::stop
    - printf
    - ASSERT_EQ
    - bthread::futex_wake_private
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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
    - EXPECT_EQ
    - printf
    - bthread::futex_wake_private
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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
    - EXPECT_EQ
    - compare_exchange_strong
    - printf
    - fetch_add
    - bthread::futex_wake_private
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - pthread_create
    - ARRAY_SIZE
    - ASSERT_EQ
    - 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:
    - butil::atomic*::fetch_sub
    - butil::atomic*::fetch_add
    - cpu_relax
    - int::int
    - butil::cpuwide_time_ns
    - bthread::futex_wait_private
    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
    - pthread_create
    - bthread_usleep
    - butil::atomic::fetch_add
    - sched_yield
    - butil::cpuwide_time_ns
    - pthread_join
    - ASSERT_EQ
    - bthread::futex_wake_private
    - butil::atomic::load
    - printf
    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_wake_private
    - bthread::futex_wait_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:
    - sleep
    - pthread_create
    - butil::Timer::stop
    - printf
    - ASSERT_EQ
    - bthread::futex_wake_private
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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
    - EXPECT_EQ
    - printf
    - bthread::futex_wake_private
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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
    - EXPECT_EQ
    - compare_exchange_strong
    - printf
    - fetch_add
    - bthread::futex_wake_private
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - pthread_create
    - ARRAY_SIZE
    - ASSERT_EQ
    - 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::SetCommandLineOption
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - testing::InitGoogleTest
    - RUN_ALL_TESTS
    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*::gzip
    - EXPECT_EQ
    - ::test::GrpcRequest*::timeout_us
    - ::test::GrpcResponse*::set_message
    - ::test::GrpcRequest*::has_timeout_us
    - brpc::Controller*::set_response_compress_type
    - brpc::Controller*::SetFailed
    - ::test::GrpcRequest*::return_error
    - brpc::Controller*::deadline_us
    - butil::gettimeofday_us
    - static_cast<brpc::Controller*>
    - EXPECT_NEAR
    - ::test::GrpcRequest*::message
    - c_str
    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
    - bthread_usleep
    - ::test::GrpcResponse*::set_message
    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:
    - Start
    - EXPECT_EQ
    - Init
    - c_str
    - AddService
    - brpc::ChannelOptions::ChannelOptions
    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:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - test::GrpcRequest::set_gzip
    - test::GrpcResponse::message
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_return_error
    - EXPECT_FALSE
    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:
    - EXPECT_TRUE
    - brpc::PercentDecode
    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:
    - EXPECT_EQ
    - test::GrpcService_Stub::Method
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - butil::BasicStringPiece::BasicStringPiece
    - test::GrpcRequest::set_gzip
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - butil::string_printf
    - test::GrpcRequest::set_return_error
    - c_str
    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:
    - brpc::Channel::Init
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - test::GrpcService_Stub::MethodTimeOut
    - test::GrpcRequest::set_gzip
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::GrpcRequest::set_return_error
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    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:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - butil::BasicStringPiece::BasicStringPiece
    - test::GrpcRequest::set_gzip
    - test::GrpcService_Stub::MethodNotExist
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_return_error
    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_timeout_us
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - test::GrpcRequest::set_message
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - test::GrpcRequest::set_gzip
    - EXPECT_FALSE
    - strtol
    - test::GrpcRequest::set_return_error
    - arraysize
    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*::gzip
    - EXPECT_EQ
    - ::test::GrpcRequest*::timeout_us
    - ::test::GrpcResponse*::set_message
    - ::test::GrpcRequest*::has_timeout_us
    - brpc::Controller*::set_response_compress_type
    - brpc::Controller*::SetFailed
    - ::test::GrpcRequest*::return_error
    - brpc::Controller*::deadline_us
    - butil::gettimeofday_us
    - static_cast<brpc::Controller*>
    - EXPECT_NEAR
    - ::test::GrpcRequest*::message
    - c_str
    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
    - bthread_usleep
    - ::test::GrpcResponse*::set_message
    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:
    - Start
    - EXPECT_EQ
    - Init
    - c_str
    - AddService
    - brpc::ChannelOptions::ChannelOptions
    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:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - test::GrpcRequest::set_gzip
    - test::GrpcResponse::message
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_return_error
    - EXPECT_FALSE
    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:
    - EXPECT_TRUE
    - brpc::PercentDecode
    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:
    - EXPECT_EQ
    - test::GrpcService_Stub::Method
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - butil::BasicStringPiece::BasicStringPiece
    - test::GrpcRequest::set_gzip
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - butil::string_printf
    - test::GrpcRequest::set_return_error
    - c_str
    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:
    - brpc::Channel::Init
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - test::GrpcService_Stub::MethodTimeOut
    - test::GrpcRequest::set_gzip
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::GrpcRequest::set_return_error
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    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:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::ErrorCode
    - test::GrpcRequest::set_message
    - brpc::Controller::Failed
    - butil::BasicStringPiece::BasicStringPiece
    - test::GrpcRequest::set_gzip
    - test::GrpcService_Stub::MethodNotExist
    - EXPECT_TRUE
    - brpc::Controller::ErrorText
    - test::GrpcRequest::set_return_error
    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_timeout_us
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::Controller
    - test::GrpcService_Stub::Method
    - test::GrpcRequest::set_message
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - test::GrpcRequest::set_gzip
    - EXPECT_FALSE
    - strtol
    - test::GrpcRequest::set_return_error
    - arraysize
    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
    - json2pb::ProtoMessageToJson
    - std::string::clear
    - RepeatedMessage::add_strings
    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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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_FALSE
    - ASSERT_TRUE
    - 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:
    - RefCountedStaticMemory::RefCountedStaticMemory
    - EXPECT_EQ
    - scoped_refptr::size
    - std::string
    - scoped_refptr::front_as
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - scoped_refptr::size
    - scoped_refptr::front
    - std::vector::size
    - scoped_refptr::scoped_refptr
    - RefCountedBytes::RefCountedBytes
    - butil::RefCountedBytes::TakeVector
    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:
    - EXPECT_EQ
    - scoped_refptr::size
    - scoped_refptr::front
    - 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:
    - malloc
    - EXPECT_EQ
    - scoped_refptr::size
    - memcpy
    - scoped_refptr::front
    - RefCountedMallocedMemory::RefCountedMallocedMemory
    - memcmp
    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:
    - std::vector::push_back
    - EXPECT_TRUE
    - scoped_refptr::Equals
    - butil::RefCountedString::TakeString
    - butil::RefCountedBytes::TakeVector
    - EXPECT_FALSE
    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:
    - scoped_refptr::Equals
    - butil::RefCountedString::TakeString
    - 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:
    - RefCountedStaticMemory::RefCountedStaticMemory
    - EXPECT_EQ
    - scoped_refptr::size
    - std::string
    - scoped_refptr::front_as
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - scoped_refptr::size
    - scoped_refptr::front
    - std::vector::size
    - scoped_refptr::scoped_refptr
    - RefCountedBytes::RefCountedBytes
    - butil::RefCountedBytes::TakeVector
    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:
    - EXPECT_EQ
    - scoped_refptr::size
    - scoped_refptr::front
    - 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:
    - malloc
    - EXPECT_EQ
    - scoped_refptr::size
    - memcpy
    - scoped_refptr::front
    - RefCountedMallocedMemory::RefCountedMallocedMemory
    - memcmp
    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:
    - std::vector::push_back
    - EXPECT_TRUE
    - scoped_refptr::Equals
    - butil::RefCountedString::TakeString
    - butil::RefCountedBytes::TakeVector
    - EXPECT_FALSE
    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:
    - scoped_refptr::Equals
    - butil::RefCountedString::TakeString
    - 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:
    - brpc::HttpReasonPhrase
    - ASSERT_STREQ
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::Initialize
    - butil::ScopedTempDir::path
    - butil::PathExists
    - File::error_details
    - File::created
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - File::Close
    - EXPECT_FALSE
    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:
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::ScopedTempDir::path
    - File::async
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - 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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::ScopedTempDir::path
    - butil::PathExists
    - File::error_details
    - File::created
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - File::Close
    - EXPECT_FALSE
    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:
    - File::Write
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - EXPECT_LE
    - butil::ScopedTempDir::path
    - static_cast<int>
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - File::ReadNoBestEffort
    - GetFileSize
    - File::Read
    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:
    - File::Write
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::ScopedTempDir::path
    - File::Pass
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - File::Close
    - File::Read
    - EXPECT_FALSE
    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:
    - File::Write
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::ScopedTempDir::path
    - File::SetLength
    - static_cast<int>
    - File::GetLength
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - GetFileSize
    - File::Read
    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:
    - File::Write
    - butil::Time::ToTimeVal
    - butil::File::Info::last_accessed::ToInternalValue
    - butil::Time::ToInternalValue
    - ASSERT_TRUE
    - File::SetTimes
    - butil::File::Info::last_accessed::ToTimeVal
    - butil::File::Info::creation_time::ToInternalValue
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::TimeDelta::FromSeconds
    - EXPECT_EQ
    - EXPECT_LE
    - butil::Time::Now
    - butil::ScopedTempDir::path
    - butil::TimeDelta::FromMinutes
    - butil::ScopedTempDir::ScopedTempDir
    - butil::File::Info::last_modified::ToInternalValue
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::IsValid
    - File::GetInfo
    - butil::File::Info::last_modified::ToTimeVal
    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:
    - File::Write
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::Seek
    - butil::ScopedTempDir::path
    - std::string
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - File::ReadAtCurrentPos
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::ScopedTempDir::path
    - std::string
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    - File::WriteAtCurrentPos
    - File::Read
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - File::Seek
    - butil::ScopedTempDir::path
    - File::SetLength
    - EXPECT_TRUE
    - File::IsValid
    - butil::ScopedTempDir::ScopedTempDir
    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::File::GetInfo
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::ScopedTempDir::CreateUniqueTempDir
    - butil::ScopedTempDir::path
    - FILE_PATH_LITERAL
    - butil::File::IsValid
    - CreateDirectory
    - EXPECT_TRUE
    - FilePath::value
    - butil::ScopedTempDir::ScopedTempDir
    - ::CreateFile
    - EXPECT_FALSE
    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:
    - PLOG
    - LOG
    - SocketMeta*::req::exchange
    - read
    - SocketMeta*::req::fetch_add
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:129,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:142,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:144,1
    - Dst: SocketMeta*::req::fetch_add
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:155,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:157,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 31
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 166
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - PLOG
    - kevent
    - SocketMeta*::req::fetch_add
    - bthread_start_urgent
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:174,1
    - Dst: write
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:181,1
    - Dst: writev
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:188,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:192,1
    - Dst: free
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:204,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 206
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - PLOG
    - free
    - write
    - writev
    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: 215
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 215
    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:234,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:236,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:243,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:245,1
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:256,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:256,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:260,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:260,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:267,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:267,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:270,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:271,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:272,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:279,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:281,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:281,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:285,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:287,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:288,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:301,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:301,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:302,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:307,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:314,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:316,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:319,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:320,1
    - Dst: free
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:323,1
    - Dst: close
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:329,1
    - Dst: close
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:332,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 71
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 217
    functionDepth: 2
    functionLinenumber: 217
    functionLinenumberEnd: 334
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketMeta::SocketMeta
    - butil::Timer::u_elapsed
    - bthread_join
    - pthread_join
    - LOG
    - ASSERT_EQ
    - kqueue
    - butil::Timer::start
    - epoll_ctl
    - malloc
    - pthread_create
    - butil::Timer::stop
    - epoll_create
    - kevent
    - ClientMeta::ClientMeta
    - stop_and_join_epoll_threads
    - butil::Timer::Timer
    - ProfilerStart
    - sleep
    - free
    - EpollMeta::EpollMeta
    - ProfilerStop
    - ASSERT_GT
    - socketpair
    - bthread_usleep
    - butil::make_non_blocking
    - close
    - fmix32
    - bthread_start_background
    - EV_SET
    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:
    - PLOG
    - LOG
    - SocketMeta*::req::exchange
    - read
    - SocketMeta*::req::fetch_add
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:123,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:129,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:129,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:142,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:144,1
    - Dst: SocketMeta*::req::fetch_add
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:155,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:157,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 31
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 166
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - PLOG
    - kevent
    - SocketMeta*::req::fetch_add
    - bthread_start_urgent
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:174,1
    - Dst: write
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:181,1
    - Dst: writev
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:188,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:192,1
    - Dst: free
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:204,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 206
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - PLOG
    - free
    - write
    - writev
    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: 215
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 215
    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:234,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:236,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:242,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:243,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:245,1
    - Dst: malloc
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:256,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:256,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:260,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:260,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:267,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:267,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:270,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:271,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:272,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:279,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:281,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:281,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:285,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:287,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:288,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:301,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:301,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:302,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:307,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:314,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:316,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:319,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:320,1
    - Dst: free
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:323,1
    - Dst: close
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:329,1
    - Dst: close
      Src: /src/brpc/test/bthread_dispatcher_unittest.cpp:332,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 71
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 217
    functionDepth: 2
    functionLinenumber: 217
    functionLinenumberEnd: 334
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_dispatcher_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketMeta::SocketMeta
    - butil::Timer::u_elapsed
    - bthread_join
    - pthread_join
    - LOG
    - ASSERT_EQ
    - kqueue
    - butil::Timer::start
    - epoll_ctl
    - malloc
    - pthread_create
    - butil::Timer::stop
    - epoll_create
    - kevent
    - ClientMeta::ClientMeta
    - stop_and_join_epoll_threads
    - butil::Timer::Timer
    - ProfilerStart
    - sleep
    - free
    - EpollMeta::EpollMeta
    - ProfilerStop
    - ASSERT_GT
    - socketpair
    - bthread_usleep
    - butil::make_non_blocking
    - close
    - fmix32
    - bthread_start_background
    - EV_SET
    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:
    - ConstIntExtension
    - int::int
    - ASSERT_EQ
    - IntExtension
    - std::ostringstream::str
    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::timespec_to_microseconds
    - clock_gettime
    - butil::gettimeofday_us
    - 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::Timer::stop
    - butil::monotonic_time_ns
    - butil::gettimeofday_us
    - arraysize
    - printf
    - clock
    - butil::cpuwide_time_ns
    - syscall
    - clock_gettime
    - butil::Timer::start
    - stop
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - time
    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::microseconds_from
    - butil::nanoseconds_from
    - butil::timespec_normalize
    - butil::milliseconds_from
    - ASSERT_EQ
    - butil::timespec_minus
    - butil::timespec_add
    - butil::seconds_from
    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:
    - printf
    - butil::gettimeofday_ms
    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:
    - printf
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - 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::timespec_to_microseconds
    - clock_gettime
    - butil::gettimeofday_us
    - 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::Timer::stop
    - butil::monotonic_time_ns
    - butil::gettimeofday_us
    - arraysize
    - printf
    - clock
    - butil::cpuwide_time_ns
    - syscall
    - clock_gettime
    - butil::Timer::start
    - stop
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - time
    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::microseconds_from
    - butil::nanoseconds_from
    - butil::timespec_normalize
    - butil::milliseconds_from
    - ASSERT_EQ
    - butil::timespec_minus
    - butil::timespec_add
    - butil::seconds_from
    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:
    - printf
    - butil::gettimeofday_ms
    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:
    - printf
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - 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:
    - butil::bits::Log2Floor
    - EXPECT_EQ
    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:
    - butil::bits::Log2Floor
    - EXPECT_EQ
    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:
    - butil::bits::Log2Floor
    - EXPECT_EQ
    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:
    - butil::bits::Log2Floor
    - EXPECT_EQ
    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:
    - srand
    - time
    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:
    - butil::class_name<char*>
    - butil::class_name<short>
    - LOG
    - ASSERT_EQ
    - butil::class_name_str
    - ASSERT_STREQ
    - butil::class_name<butil::foobar::MyClass>
    - butil::class_name<const char*>
    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:
    - srand
    - time
    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:
    - butil::class_name<char*>
    - butil::class_name<short>
    - LOG
    - ASSERT_EQ
    - butil::class_name_str
    - ASSERT_STREQ
    - butil::class_name<butil::foobar::MyClass>
    - butil::class_name<const char*>
    linkageType: ''
    returnType: void
    signature: void TEST_F(ClassNameTest, class_name_sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: SaveRecycle::BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:51,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:51,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:56,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - addr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: CreateServer
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - Socket::Create
    - SaveRecycle::SaveRecycle
    - butil::EndPoint::EndPoint
    - str2endpoint
    linkageType: ''
    returnType: brpc::ServerId
    signature: brpc::ServerId CreateServer(const char* addr, const char* tag = "")
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:66,1
    - Dst: brpc::LoadBalancer*::Feedback
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - lb
    - server_id
    - latency_us
    argTypes:
    - brpc::LoadBalancer*
    - brpc::SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: FeedbackLatency
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancer*::Feedback
    - butil::gettimeofday_us
    linkageType: ''
    returnType: void
    signature: "void FeedbackLatency(brpc::LoadBalancer* lb, brpc::SocketId server_id,\n
      \                    int64_t latency_us, int error_code = 0,\n                     const
      brpc::Controller* cntl = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.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: P2CEwmaLoadBalancerTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:79,1
    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: P2CEwmaLoadBalancerTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - Destroy
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:85,1
    - Dst: SelectServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - brpc::SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 92
    functionName: P2CEwmaLoadBalancerTest::Select
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - SelectServer
    linkageType: ''
    returnType: int
    signature: "int Select(brpc::SocketUniquePtr* ptr, bool* need_feedback = NULL,\n
      \              const brpc::ExcludedServers* excluded = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:99,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:99,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:102,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:102,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:103,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:103,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:104,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:106,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:106,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:108,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:109,1
    - Dst: AddServersInBatch
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:109,1
    - Dst: std::vector<brpc::ServerId>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:110,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:110,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:112,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:112,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:114,1
    - Dst: RemoveServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:114,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:115,1
    - Dst: RemoveServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:116,1
    - Dst: RemoveServersInBatch
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:116,1
    - Dst: std::vector<brpc::ServerId>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:117,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:117,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:118,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 97
    functionDepth: 2
    functionLinenumber: 97
    functionLinenumberEnd: 119
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - std::vector::push_back
    - std::vector<brpc::ServerId>
    - std::vector::end
    - RemoveServersInBatch
    - Select
    - ASSERT_EQ
    - CreateServer
    - AddServer
    - std::vector::begin
    - AddServersInBatch
    - RemoveServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, add_remove_servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:123,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:127,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:128,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:129,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 121
    functionDepth: 2
    functionLinenumber: 121
    functionLinenumberEnd: 132
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, single_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:135,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:136,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:137,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:138,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:146,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:146,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:147,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:149,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:149,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:151,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 154
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - ASSERT_GE
    - Select
    - FeedbackLatency
    - LOG
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, prefers_lower_latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:157,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:159,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:160,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:164,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:164,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:165,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:165,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:173,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:173,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:174,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:175,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:175,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:175,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:177,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 178
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - ASSERT_GE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, sheds_degraded_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:181,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:183,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:184,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:190,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:191,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:191,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:192,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:192,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:192,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:196,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:196,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:197,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:199,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 180
    functionDepth: 2
    functionLinenumber: 180
    functionLinenumberEnd: 200
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - ASSERT_NE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, inflight_breaks_ties)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:205,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:206,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:207,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:209,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:209,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:210,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:211,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:211,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:212,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:212,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:213,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:213,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:222,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:222,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:226,1
    - Dst: ASSERT_NEAR
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:231,1
    - Dst: ASSERT_NEAR
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:232,1
    - Dst: ASSERT_NEAR
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:233,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 202
    functionDepth: 2
    functionLinenumber: 202
    functionLinenumberEnd: 235
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - brpc::policy::P2CEwmaLoadBalancer*::AddServer
    - butil::gettimeofday_us
    - brpc::policy::P2CEwmaLoadBalancer*::SelectServer
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    - ASSERT_NEAR
    - CreateServer
    - ASSERT_EQ
    - brpc::policy::P2CEwmaLoadBalancer*::Destroy
    - New
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, weighted_split_by_inflight)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:238,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:240,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:240,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:241,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:245,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:245,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:246,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:246,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:246,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:251,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:256,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:256,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:257,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:258,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:259,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:261,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:264,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 237
    functionDepth: 2
    functionLinenumber: 237
    functionLinenumberEnd: 265
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_timeout_ms
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - ASSERT_GE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, error_feedback_punishes_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:268,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:270,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:271,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:271,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:273,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:277,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:278,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:278,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:279,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:284,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:284,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 267
    functionDepth: 2
    functionLinenumber: 267
    functionLinenumberEnd: 286
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ExcludedServers::Destroy
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - brpc::ExcludedServers*::Add
    - ASSERT_EQ
    - brpc::ExcludedServers::Create
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, excluded_servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:289,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:290,1
    - Dst: brpc::LoadBalancer*::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:291,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:292,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:293,1
    - Dst: brpc::LoadBalancer*::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:294,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:295,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:295,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:296,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:296,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:297,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:297,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:298,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:298,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 299
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancer*::Destroy
    - New
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, invalid_parameters)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChurnArg*>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:308,1
    - Dst: ChurnArg*::stop::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:309,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:312,1
    - Dst: ChurnArg*::lb::SelectServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:314,1
    - Dst: ChurnArg*::nselected::fetch_add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:315,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:317,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:317,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 322
    functionName: SelectAndFeedback
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChurnArg*::nselected::fetch_add
    - brpc::SocketUniquePtr::id
    - butil::gettimeofday_us
    - ChurnArg*::lb::SelectServer
    - ChurnArg*::stop::load
    - static_cast<ChurnArg*>
    - FeedbackLatency
    linkageType: ''
    returnType: void
    signature: void * SelectAndFeedback(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:328,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:329,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:329,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:330,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:330,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:330,1
    - Dst: ChurnArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:335,1
    - Dst: ChurnArg::nselected::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:336,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:339,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:339,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:343,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:344,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:345,1
    - Dst: RemoveServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:345,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:346,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:346,1
    - Dst: ChurnArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:348,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:350,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:352,1
    - Dst: ChurnArg::nselected::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:352,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:353,1
    - Dst: ChurnArg::nselected::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:353,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 324
    functionDepth: 2
    functionLinenumber: 324
    functionLinenumberEnd: 354
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - std::vector::push_back
    - ASSERT_TRUE
    - butil::gettimeofday_us
    - ChurnArg::nselected::load
    - ChurnArg::nselected::store
    - pthread_join
    - LOG
    - CreateServer
    - AddServer
    - ChurnArg::stop::store
    - ASSERT_EQ
    - snprintf
    - ASSERT_GT
    - RemoveServer
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, concurrent_select_with_churn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:357,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:358,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:358,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:359,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:365,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:365,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:366,1
    - Dst: Describe
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:371,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:372,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:373,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:374,1
    - Dst: strtoll
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:375,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:375,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:376,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 356
    functionDepth: 2
    functionLinenumber: 356
    functionLinenumberEnd: 377
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_timeout_ms
    - strtoll
    - std::string::find
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string::c_str
    - ASSERT_NE
    - Select
    - FeedbackLatency
    - ASSERT_LE
    - CreateServer
    - AddServer
    - ASSERT_EQ
    - Describe
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, error_punish_is_capped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<FeedbackBenchArg*>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:387,1
    - Dst: FeedbackBenchArg*::stop::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:389,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:390,1
    - Dst: FeedbackBenchArg*::nfeedback::fetch_add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 395
    functionName: FeedbackHammer
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<FeedbackBenchArg*>
    - FeedbackBenchArg*::stop::load
    - FeedbackBenchArg*::nfeedback::fetch_add
    - FeedbackLatency
    linkageType: ''
    returnType: void
    signature: void * FeedbackHammer(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:401,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:401,1
    - Dst: FeedbackBenchArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:406,1
    - Dst: FeedbackBenchArg::nfeedback::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:407,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:411,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:411,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:414,1
    - Dst: FeedbackBenchArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:417,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:417,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:419,1
    - Dst: FeedbackBenchArg::nfeedback::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:420,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:422,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 397
    functionDepth: 2
    functionLinenumber: 397
    functionLinenumberEnd: 426
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - FeedbackBenchArg::stop::store
    - ASSERT_TRUE
    - butil::gettimeofday_us
    - pthread_join
    - FeedbackBenchArg::nfeedback::store
    - LOG
    - CreateServer
    - AddServer
    - ASSERT_EQ
    - usleep
    - FeedbackBenchArg::nfeedback::load
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, feedback_lock_overhead)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 46
    functionName: SaveRecycle::BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:51,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:51,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:55,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:56,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:56,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - addr
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 59
    functionName: CreateServer
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 11
    functionsReached:
    - EXPECT_EQ
    - Socket::Create
    - SaveRecycle::SaveRecycle
    - butil::EndPoint::EndPoint
    - str2endpoint
    linkageType: ''
    returnType: brpc::ServerId
    signature: brpc::ServerId CreateServer(const char* addr, const char* tag = "")
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:66,1
    - Dst: brpc::LoadBalancer*::Feedback
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:70,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - lb
    - server_id
    - latency_us
    argTypes:
    - brpc::LoadBalancer*
    - brpc::SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 71
    functionName: FeedbackLatency
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 9
    functionsReached:
    - brpc::LoadBalancer*::Feedback
    - butil::gettimeofday_us
    linkageType: ''
    returnType: void
    signature: "void FeedbackLatency(brpc::LoadBalancer* lb, brpc::SocketId server_id,\n
      \                    int64_t latency_us, int error_code = 0,\n                     const
      brpc::Controller* cntl = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.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: P2CEwmaLoadBalancerTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:79,1
    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: P2CEwmaLoadBalancerTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - Destroy
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:85,1
    - Dst: SelectServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - brpc::SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 92
    functionName: P2CEwmaLoadBalancerTest::Select
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - SelectServer
    linkageType: ''
    returnType: int
    signature: "int Select(brpc::SocketUniquePtr* ptr, bool* need_feedback = NULL,\n
      \              const brpc::ExcludedServers* excluded = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:99,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:99,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:102,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:102,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:103,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:103,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:104,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:106,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:106,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:108,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:108,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:109,1
    - Dst: AddServersInBatch
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:109,1
    - Dst: std::vector<brpc::ServerId>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:110,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:110,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:112,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:112,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:114,1
    - Dst: RemoveServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:114,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:115,1
    - Dst: RemoveServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:115,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:116,1
    - Dst: RemoveServersInBatch
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:116,1
    - Dst: std::vector<brpc::ServerId>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:117,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:117,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:118,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 97
    functionDepth: 2
    functionLinenumber: 97
    functionLinenumberEnd: 119
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - std::vector::push_back
    - std::vector<brpc::ServerId>
    - std::vector::end
    - RemoveServersInBatch
    - Select
    - ASSERT_EQ
    - CreateServer
    - AddServer
    - std::vector::begin
    - AddServersInBatch
    - RemoveServer
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, add_remove_servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:122,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:123,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:127,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:128,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:129,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 121
    functionDepth: 2
    functionLinenumber: 121
    functionLinenumberEnd: 132
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, single_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:135,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:136,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:137,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:138,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:146,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:146,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:147,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:149,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:149,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:151,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 154
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - ASSERT_GE
    - Select
    - FeedbackLatency
    - LOG
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, prefers_lower_latency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:157,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:159,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:159,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:160,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:164,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:164,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:165,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:165,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:173,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:173,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:174,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:175,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:175,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:175,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:177,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 178
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - ASSERT_GE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, sheds_degraded_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:181,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:182,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:183,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:184,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:190,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:191,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:191,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:192,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:192,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:192,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:196,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:196,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:197,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:199,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 180
    functionDepth: 2
    functionLinenumber: 180
    functionLinenumberEnd: 200
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - ASSERT_NE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, inflight_breaks_ties)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:205,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:206,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:207,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:209,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:209,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:210,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:211,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:211,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:212,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:212,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:213,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:213,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:222,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:222,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:226,1
    - Dst: ASSERT_NEAR
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:231,1
    - Dst: ASSERT_NEAR
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:232,1
    - Dst: ASSERT_NEAR
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:233,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer*::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:234,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 202
    functionDepth: 2
    functionLinenumber: 202
    functionLinenumberEnd: 235
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - brpc::policy::P2CEwmaLoadBalancer*::AddServer
    - butil::gettimeofday_us
    - brpc::policy::P2CEwmaLoadBalancer*::SelectServer
    - butil::BasicStringPiece::BasicStringPiece
    - LOG
    - ASSERT_NEAR
    - CreateServer
    - ASSERT_EQ
    - brpc::policy::P2CEwmaLoadBalancer*::Destroy
    - New
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, weighted_split_by_inflight)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:238,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:240,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:240,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:241,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:245,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:245,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:246,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:246,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:246,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:251,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:256,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:256,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:257,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:258,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:259,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:261,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:264,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 237
    functionDepth: 2
    functionLinenumber: 237
    functionLinenumberEnd: 265
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_timeout_ms
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - ASSERT_GE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, error_feedback_punishes_server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:268,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:270,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:271,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:271,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:273,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:277,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:278,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:278,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:279,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:284,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:284,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 267
    functionDepth: 2
    functionLinenumber: 267
    functionLinenumberEnd: 286
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ExcludedServers::Destroy
    - brpc::SocketUniquePtr::id
    - ASSERT_TRUE
    - Select
    - FeedbackLatency
    - CreateServer
    - AddServer
    - brpc::ExcludedServers*::Add
    - ASSERT_EQ
    - brpc::ExcludedServers::Create
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, excluded_servers)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:289,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:290,1
    - Dst: brpc::LoadBalancer*::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:291,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:292,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:292,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:293,1
    - Dst: brpc::LoadBalancer*::Destroy
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:294,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:295,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:295,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:296,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:296,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:297,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:297,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:298,1
    - Dst: New
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:298,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:298,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 299
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::LoadBalancer*::Destroy
    - New
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, invalid_parameters)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChurnArg*>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:308,1
    - Dst: ChurnArg*::stop::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:309,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:312,1
    - Dst: ChurnArg*::lb::SelectServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:314,1
    - Dst: ChurnArg*::nselected::fetch_add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:315,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:317,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:317,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 322
    functionName: SelectAndFeedback
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChurnArg*::nselected::fetch_add
    - brpc::SocketUniquePtr::id
    - butil::gettimeofday_us
    - ChurnArg*::lb::SelectServer
    - ChurnArg*::stop::load
    - static_cast<ChurnArg*>
    - FeedbackLatency
    linkageType: ''
    returnType: void
    signature: void * SelectAndFeedback(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:328,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:329,1
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:329,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:330,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:330,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:330,1
    - Dst: ChurnArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:335,1
    - Dst: ChurnArg::nselected::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:336,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:339,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:339,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:343,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:344,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:345,1
    - Dst: RemoveServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:345,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:346,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:346,1
    - Dst: ChurnArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:348,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:350,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:350,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:352,1
    - Dst: ChurnArg::nselected::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:352,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:353,1
    - Dst: ChurnArg::nselected::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:353,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 324
    functionDepth: 2
    functionLinenumber: 324
    functionLinenumberEnd: 354
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - std::vector::push_back
    - ASSERT_TRUE
    - butil::gettimeofday_us
    - ChurnArg::nselected::load
    - ChurnArg::nselected::store
    - pthread_join
    - LOG
    - CreateServer
    - AddServer
    - ChurnArg::stop::store
    - ASSERT_EQ
    - snprintf
    - ASSERT_GT
    - RemoveServer
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, concurrent_select_with_churn)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:357,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:358,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:358,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:359,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:365,1
    - Dst: Select
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:365,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:366,1
    - Dst: Describe
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:371,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:372,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:373,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:374,1
    - Dst: strtoll
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:375,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:375,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:376,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 356
    functionDepth: 2
    functionLinenumber: 356
    functionLinenumberEnd: 377
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_timeout_ms
    - strtoll
    - std::string::find
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string::c_str
    - ASSERT_NE
    - Select
    - FeedbackLatency
    - ASSERT_LE
    - CreateServer
    - AddServer
    - ASSERT_EQ
    - Describe
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, error_punish_is_capped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<FeedbackBenchArg*>
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:387,1
    - Dst: FeedbackBenchArg*::stop::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:389,1
    - Dst: FeedbackLatency
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:390,1
    - Dst: FeedbackBenchArg*::nfeedback::fetch_add
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 395
    functionName: FeedbackHammer
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<FeedbackBenchArg*>
    - FeedbackBenchArg*::stop::load
    - FeedbackBenchArg*::nfeedback::fetch_add
    - FeedbackLatency
    linkageType: ''
    returnType: void
    signature: void * FeedbackHammer(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CreateServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:401,1
    - Dst: AddServer
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:401,1
    - Dst: FeedbackBenchArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:406,1
    - Dst: FeedbackBenchArg::nfeedback::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:407,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:411,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:411,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:414,1
    - Dst: FeedbackBenchArg::stop::store
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:417,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:417,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:419,1
    - Dst: FeedbackBenchArg::nfeedback::load
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:420,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:421,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp:422,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 397
    functionDepth: 2
    functionLinenumber: 397
    functionLinenumberEnd: 426
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_p2c_ewma_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - FeedbackBenchArg::stop::store
    - ASSERT_TRUE
    - butil::gettimeofday_us
    - pthread_join
    - FeedbackBenchArg::nfeedback::store
    - LOG
    - CreateServer
    - AddServer
    - ASSERT_EQ
    - usleep
    - FeedbackBenchArg::nfeedback::load
    - ASSERT_GT
    linkageType: ''
    returnType: void
    signature: void TEST_F(P2CEwmaLoadBalancerTest, feedback_lock_overhead)
  - 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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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: 0
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr::DoStuff
    - scoped_ptr::reset
    - NonThreadSafeClass::NonThreadSafeClass
    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::Join
    - NonThreadSafeClass::NonThreadSafeClass
    - scoped_ptr::DetachFromThread
    - scoped_ptr::release
    - DeleteNonThreadSafeClassOnThread::Start
    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::Start
    - CallDoStuffOnThread::Join
    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:
    - ASSERT_DEATH
    - butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    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:
    - DeleteNonThreadSafeClassOnThread::Join
    - scoped_ptr::release
    - NonThreadSafeClass::NonThreadSafeClass
    - DeleteNonThreadSafeClassOnThread::Start
    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:
    - ASSERT_DEATH
    - butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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: 0
    functionLinenumber: 86
    functionLinenumberEnd: 95
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/non_thread_safe_unittest.cc
    functionUses: 0
    functionsReached:
    - scoped_ptr::DoStuff
    - scoped_ptr::reset
    - NonThreadSafeClass::NonThreadSafeClass
    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::Join
    - NonThreadSafeClass::NonThreadSafeClass
    - scoped_ptr::DetachFromThread
    - scoped_ptr::release
    - DeleteNonThreadSafeClassOnThread::Start
    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::Start
    - CallDoStuffOnThread::Join
    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:
    - ASSERT_DEATH
    - butil::NonThreadSafeClass::MethodOnDifferentThreadImpl
    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:
    - DeleteNonThreadSafeClassOnThread::Join
    - scoped_ptr::release
    - NonThreadSafeClass::NonThreadSafeClass
    - DeleteNonThreadSafeClassOnThread::Start
    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:
    - ASSERT_DEATH
    - butil::NonThreadSafeClass::DestructorOnDifferentThreadImpl
    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:30,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bthread_unittest.cpp:31,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bthread_unittest.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 34
    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: 230
    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:
    - bthread_jump_fcontext
    - malloc
    - bthread_make_fcontext
    - std::make_pair
    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:
    - bthread_self
    - ASSERT_EQ
    - 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:
    - bthread_usleep
    - LOG
    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:
    - bthread_usleep
    - LOG
    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:
    - bthread_usleep
    - bthread_start_urgent
    - LOG
    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:
    - bthread_usleep
    - LOG
    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_join
    - EXPECT_EQ
    - LOG
    - bthread_start_urgent
    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:
    - bthread_join
    - LOG
    - ASSERT_EQ
    - pthread_self
    - bthread_start_urgent
    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: 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:
    - bthread_join
    - ASSERT_TRUE
    - free
    - backtrace_symbols
    - ASSERT_EQ
    - puts
    - bthread_start_urgent
    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:
    - bthread_self
    - EXPECT_NE
    - 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:
    - bthread_self
    - ASSERT_EQ
    - 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:
    - bthread_self
    - bthread_join
    - EXPECT_EQ
    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
    - bthread_usleep
    - butil::cpuwide_time_us
    - LOG
    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:
    - std::vector::reserve
    - butil::Timer::stop
    - bthread_join
    - std::unique
    - std::vector::push_back
    - std::vector::clear
    - butil::Timer::Timer
    - std::vector::end
    - LOG
    - ProfilerStop
    - ASSERT_EQ
    - std::vector::begin
    - butil::Timer::start
    - snprintf
    - butil::Timer::n_elapsed
    - std::sort
    - ProfilerStart
    - bthread_start_urgent
    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:
    - load
    - bthread_join
    - EXPECT_EQ
    - std::vector::push_back
    - std::vector::size
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - AlignedCounter::AlignedCounter
    - butil::Timer::Timer
    - bthread_getconcurrency
    - ProfilerStop
    - ASSERT_EQ
    - butil::Timer::start
    - snprintf
    - ASSERT_GT
    - ProfilerStart
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer*::stop
    - static_cast<butil::Timer*>
    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_join
    - LOG
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - bthread_start_background
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - labs
    - ASSERT_LE
    - ASSERT_EQ
    - butil::Timer::start
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - pthread_create
    - bthread_join
    - EXPECT_EQ
    - pthread_join
    - ASSERT_EQ
    - bthread_start_background
    - bthread_start_urgent
    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_join
    - ASSERT_EQ
    - bthread_equal
    - 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:
    - pthread_self
    - static_cast<pthread_t*>
    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:
    - bthread_join
    - EXPECT_EQ
    - bthread_usleep
    - EXPECT_NE
    - EXPECT_TRUE
    - bthread_flush
    - bthread_self
    - pthread_self
    - bthread_start_urgent
    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
    - usleep
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_usleep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:538,1
    - 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:
    - bthread::tls_bls_ptr
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:545,1
    - 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:
    - bthread::tls_bls_ptr
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_grandson_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:552,1
    - 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:
    - bthread::tls_bls_ptr
    - bthread_join
    - bthread_start_urgent
    - LOG
    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:
    - std::atomic::fetch_add
    - LOG
    linkageType: ''
    returnType: void
    signature: void * create_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - span
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 571
    functionName: destroy_span_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void destroy_span_func(void* span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 574
    functionName: end_span_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void end_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:581,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:585,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:586,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:589,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:590,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:592,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:593,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:597,1
    - Dst: bthread_set_span_funcs
      Src: /src/brpc/test/bthread_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:605,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:607,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:608,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:608,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:609,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:610,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:610,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:611,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:613,1
    - Dst: bthread_set_span_funcs
      Src: /src/brpc/test/bthread_unittest.cpp:613,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 614
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::tls_bls_ptr
    - bthread_join
    - bthread_start_background
    - ASSERT_NE
    - std::find
    - LOG
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_set_span_funcs
    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: 618
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 618
    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:624,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:624,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 620
    functionDepth: 1
    functionLinenumber: 620
    functionLinenumberEnd: 626
    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:629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 631
    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:635,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:636,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 633
    functionDepth: 1
    functionLinenumber: 633
    functionLinenumberEnd: 637
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_start_background
    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:646,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:646,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:648,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:652,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:656,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:656,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:658,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:659,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:660,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:660,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:666,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 640
    functionDepth: 1
    functionLinenumber: 640
    functionLinenumberEnd: 667
    functionName: spin_and_log_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - std::string::find
    - ASSERT_TRUE
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - usleep
    - bthread_start_urgent
    - bthread::stack_trace
    linkageType: ''
    returnType: void
    signature: void spin_and_log_trace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:675,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:675,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:677,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:681,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:685,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:685,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:688,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:689,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:689,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:695,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 696
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 696
    functionName: repeated_sleep_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - std::string::find
    - ASSERT_TRUE
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - usleep
    - bthread_start_urgent
    - bthread::stack_trace
    linkageType: ''
    returnType: void
    signature: void repeated_sleep_trace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: spin_and_log_trace
      Src: /src/brpc/test/bthread_unittest.cpp:699,1
    - Dst: repeated_sleep_trace
      Src: /src/brpc/test/bthread_unittest.cpp:700,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 701
      start: 698
    functionDepth: 2
    functionLinenumber: 698
    functionLinenumberEnd: 701
    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: 240
    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:
    - bthread_jump_fcontext
    - malloc
    - bthread_make_fcontext
    - std::make_pair
    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:
    - bthread_self
    - ASSERT_EQ
    - 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:
    - bthread_usleep
    - LOG
    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:
    - bthread_usleep
    - LOG
    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:
    - bthread_usleep
    - bthread_start_urgent
    - LOG
    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:
    - bthread_usleep
    - LOG
    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_join
    - EXPECT_EQ
    - LOG
    - bthread_start_urgent
    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:
    - bthread_join
    - LOG
    - ASSERT_EQ
    - pthread_self
    - bthread_start_urgent
    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: 73
    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:
    - bthread_join
    - ASSERT_TRUE
    - free
    - backtrace_symbols
    - ASSERT_EQ
    - puts
    - bthread_start_urgent
    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:
    - bthread_self
    - EXPECT_NE
    - 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:
    - bthread_self
    - ASSERT_EQ
    - 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:
    - bthread_self
    - bthread_join
    - EXPECT_EQ
    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
    - bthread_usleep
    - butil::cpuwide_time_us
    - LOG
    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:
    - std::vector::reserve
    - butil::Timer::stop
    - bthread_join
    - std::unique
    - std::vector::push_back
    - std::vector::clear
    - butil::Timer::Timer
    - std::vector::end
    - LOG
    - ProfilerStop
    - ASSERT_EQ
    - std::vector::begin
    - butil::Timer::start
    - snprintf
    - butil::Timer::n_elapsed
    - std::sort
    - ProfilerStart
    - bthread_start_urgent
    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:
    - load
    - bthread_join
    - EXPECT_EQ
    - std::vector::push_back
    - std::vector::size
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - AlignedCounter::AlignedCounter
    - butil::Timer::Timer
    - bthread_getconcurrency
    - ProfilerStop
    - ASSERT_EQ
    - butil::Timer::start
    - snprintf
    - ASSERT_GT
    - ProfilerStart
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer*::stop
    - static_cast<butil::Timer*>
    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_join
    - LOG
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - bthread_start_background
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - labs
    - ASSERT_LE
    - ASSERT_EQ
    - butil::Timer::start
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - pthread_create
    - bthread_join
    - EXPECT_EQ
    - pthread_join
    - ASSERT_EQ
    - bthread_start_background
    - bthread_start_urgent
    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_join
    - ASSERT_EQ
    - bthread_equal
    - 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:
    - pthread_self
    - static_cast<pthread_t*>
    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:
    - bthread_join
    - EXPECT_EQ
    - bthread_usleep
    - EXPECT_NE
    - EXPECT_TRUE
    - bthread_flush
    - bthread_self
    - pthread_self
    - bthread_start_urgent
    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
    - usleep
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST_F(BthreadTest, bthread_usleep)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:538,1
    - 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:
    - bthread::tls_bls_ptr
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:545,1
    - 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:
    - bthread::tls_bls_ptr
    - LOG
    linkageType: ''
    returnType: void
    signature: void * test_grandson_parent_span(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:552,1
    - 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:
    - bthread::tls_bls_ptr
    - bthread_join
    - bthread_start_urgent
    - LOG
    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:
    - std::atomic::fetch_add
    - LOG
    linkageType: ''
    returnType: void
    signature: void * create_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - span
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 569
    functionDepth: 1
    functionLinenumber: 569
    functionLinenumberEnd: 571
    functionName: destroy_span_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void destroy_span_func(void* span)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 574
    functionName: end_span_func
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void end_span_func()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:581,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/test/bthread_unittest.cpp:583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:585,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:586,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:589,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:589,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:590,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:592,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:593,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:597,1
    - Dst: bthread_set_span_funcs
      Src: /src/brpc/test/bthread_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:605,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:607,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:608,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:608,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:609,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:610,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:610,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:611,1
    - Dst: std::find
      Src: /src/brpc/test/bthread_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:613,1
    - Dst: bthread_set_span_funcs
      Src: /src/brpc/test/bthread_unittest.cpp:613,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 614
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::tls_bls_ptr
    - bthread_join
    - bthread_start_background
    - ASSERT_NE
    - std::find
    - LOG
    - ASSERT_EQ
    - bthread_start_urgent
    - bthread_set_span_funcs
    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: 618
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 618
    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:624,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:624,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 620
    functionDepth: 1
    functionLinenumber: 620
    functionLinenumberEnd: 626
    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:629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 631
    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:635,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:636,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 633
    functionDepth: 1
    functionLinenumber: 633
    functionLinenumberEnd: 637
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_start_background
    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:646,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:646,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:648,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:651,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:652,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:656,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:656,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:658,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:659,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:660,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:660,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:666,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 640
    functionDepth: 1
    functionLinenumber: 640
    functionLinenumberEnd: 667
    functionName: spin_and_log_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_join
    - std::string::find
    - ASSERT_TRUE
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - usleep
    - bthread_start_urgent
    - bthread::stack_trace
    linkageType: ''
    returnType: void
    signature: void spin_and_log_trace()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:675,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_unittest.cpp:675,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_unittest.cpp:677,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:681,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:682,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_unittest.cpp:685,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_unittest.cpp:685,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/test/bthread_unittest.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_unittest.cpp:688,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_unittest.cpp:689,1
    - Dst: std::string::find
      Src: /src/brpc/test/bthread_unittest.cpp:689,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bthread_unittest.cpp:695,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 696
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 696
    functionName: repeated_sleep_trace
    functionSourceFile: /src/brpc/test/bthread_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_join
    - std::string::find
    - ASSERT_TRUE
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - usleep
    - bthread_start_urgent
    - bthread::stack_trace
    linkageType: ''
    returnType: void
    signature: void repeated_sleep_trace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: spin_and_log_trace
      Src: /src/brpc/test/bthread_unittest.cpp:699,1
    - Dst: repeated_sleep_trace
      Src: /src/brpc/test/bthread_unittest.cpp:700,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 701
      start: 698
    functionDepth: 2
    functionLinenumber: 698
    functionLinenumberEnd: 701
    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:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:42,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:43,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:44,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:47,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:50,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 51
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - EXPECT_TRUE
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_succeeds_when_body_only)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:54,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:55,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:56,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:57,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:58,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:61,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:64,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - EXPECT_TRUE
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_succeeds_when_attachment_included)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:68,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:69,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:70,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:71,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:72,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:78,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:79,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:81,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 82
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_fails_when_attachment_corrupted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:85,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:86,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:87,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:88,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:89,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:98,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_fails_when_attachment_dropped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:104,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:105,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:106,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:107,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:108,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:111,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:114,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 115
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_fails_when_body_and_attachment_swapped)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:129,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:130,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:130,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:133,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:133,1
    - Dst: brpc::Controller*::set_response_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:135,1
    - Dst: brpc::Controller*::set_response_checksum_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:136,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: 139
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 139
    functionName: ChecksumEchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoRequest*::message
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::Controller*::set_response_checksum_type
    - brpc::Controller*::set_response_checksum_attachment
    - test::EchoResponse*::set_message
    - brpc::Controller*::request_attachment
    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) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - type
    - with_attachment
    argTypes:
    - brpc::ChecksumType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: ChecksumEchoServiceImpl::set_response_checksum
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_checksum(brpc::ChecksumType type, bool with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:154,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:155,1
    - Dst: Start
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:155,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    - Dst: Init
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: ChecksumAttachmentEndToEndTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - Start
    - Init
    - butil::my_ip
    - ASSERT_EQ
    - AddService
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:162,1
    - Dst: Join
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 164
    functionName: ChecksumAttachmentEndToEndTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:173,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:175,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:176,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:177,1
    - Dst: brpc::Controller::set_request_checksum_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:178,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:182,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:183,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:185,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:185,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:186,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:186,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:187,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 188
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - brpc::Controller::set_request_checksum_type
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::set_request_checksum_attachment
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, request_checksum_with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:191,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:193,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:194,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:198,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:199,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:201,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:201,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:202,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:202,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:203,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 204
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, response_checksum_with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:207,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:209,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:210,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:211,1
    - Dst: brpc::Controller::set_request_checksum_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:212,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:216,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:217,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:219,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:219,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:219,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:220,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:220,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:221,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 222
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - brpc::Controller::set_request_checksum_type
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::set_request_checksum_attachment
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, both_directions_checksum_with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:227,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:229,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:230,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:231,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:236,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:237,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:239,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:239,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:240,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:240,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:240,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:241,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 242
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - brpc::Controller::set_request_checksum_type
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, checksum_without_attachment_still_works)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:42,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:43,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:44,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:47,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:50,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:50,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 41
    functionDepth: 1
    functionLinenumber: 41
    functionLinenumberEnd: 51
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - EXPECT_TRUE
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_succeeds_when_body_only)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:54,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:55,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:56,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:57,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:58,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:61,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:64,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 65
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - EXPECT_TRUE
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_succeeds_when_attachment_included)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:68,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:69,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:70,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:71,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:72,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:75,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:78,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:79,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:81,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 82
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_fails_when_attachment_corrupted)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:85,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:86,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:87,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:88,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:89,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:93,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:98,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_fails_when_attachment_dropped)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:104,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:105,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:106,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:107,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:108,1
    - Dst: brpc::policy::Crc32cCompute
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:111,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:114,1
    - Dst: brpc::policy::Crc32cVerify
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:114,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 115
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - butil::IOBuf::append
    - brpc::policy::Crc32cVerify
    - butil::IOBuf::IOBuf
    - brpc::policy::Crc32cCompute
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentTest, verify_fails_when_body_and_attachment_swapped)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:129,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:130,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:130,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:133,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:133,1
    - Dst: brpc::Controller*::set_response_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:135,1
    - Dst: brpc::Controller*::set_response_checksum_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:136,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: 139
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 139
    functionName: ChecksumEchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoRequest*::message
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::Controller*::set_response_checksum_type
    - brpc::Controller*::set_response_checksum_attachment
    - test::EchoResponse*::set_message
    - brpc::Controller*::request_attachment
    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) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - type
    - with_attachment
    argTypes:
    - brpc::ChecksumType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: ChecksumEchoServiceImpl::set_response_checksum
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_response_checksum(brpc::ChecksumType type, bool with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:154,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:155,1
    - Dst: Start
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:155,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:156,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    - Dst: Init
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:157,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: ChecksumAttachmentEndToEndTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - Start
    - Init
    - butil::my_ip
    - ASSERT_EQ
    - AddService
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:162,1
    - Dst: Join
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:163,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 164
    functionName: ChecksumAttachmentEndToEndTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:173,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:175,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:176,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:177,1
    - Dst: brpc::Controller::set_request_checksum_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:178,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:182,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:183,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:185,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:185,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:186,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:186,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:187,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 188
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - brpc::Controller::set_request_checksum_type
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::set_request_checksum_attachment
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, request_checksum_with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:191,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:193,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:194,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:198,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:199,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:201,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:201,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:201,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:202,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:202,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:203,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:203,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 190
    functionDepth: 1
    functionLinenumber: 190
    functionLinenumberEnd: 204
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, response_checksum_with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:207,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:209,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:210,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:211,1
    - Dst: brpc::Controller::set_request_checksum_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:212,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:216,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:217,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:219,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:219,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:219,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:220,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:220,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:220,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:221,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 222
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - brpc::Controller::set_request_checksum_type
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::set_request_checksum_attachment
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, both_directions_checksum_with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_response_checksum
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:227,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:229,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:230,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:231,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:236,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:237,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:239,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:239,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:240,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:240,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:240,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:241,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_checksum_unittest.cpp:241,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 242
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_checksum_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - ASSERT_FALSE
    - brpc::Controller::set_request_checksum_type
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - std::string
    - brpc::Controller::Failed
    - set_response_checksum
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChecksumAttachmentEndToEndTest, checksum_without_attachment_still_works)
  - 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:
    - srand
    - time
    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:
    - subscribe
    - push_back
    - 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:
    - subscribe
    - clear
    - notify
    - ASSERT_EQ
    - FooObserver::FooObserver
    - size
    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:
    - srand
    - time
    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:
    - subscribe
    - push_back
    - 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:
    - subscribe
    - clear
    - notify
    - ASSERT_EQ
    - FooObserver::FooObserver
    - size
    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:
    - butil::FileWatcher::init
    - butil::FileWatcher::filepath
    - EXPECT_EQ
    - butil::FileWatcher::check_and_consume
    - LOG
    - ASSERT_EQ
    - system
    - usleep
    - butil::FileWatcher::FileWatcher
    - srand
    - rand
    - time
    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:
    - butil::FileWatcher::init
    - butil::FileWatcher::filepath
    - EXPECT_EQ
    - butil::FileWatcher::check_and_consume
    - LOG
    - ASSERT_EQ
    - system
    - usleep
    - butil::FileWatcher::FileWatcher
    - srand
    - rand
    - time
    linkageType: ''
    returnType: void
    signature: void TEST_F(FileWatcherTest, random_op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:44,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:44,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:45,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:47,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' hex'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 50
    functionName: FromHex
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::resize
    - strtol
    - size
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: std::string FromHex(const std::string& hex)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:100,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:101,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:102,1
    - Dst: BIO_free
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:104,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:106,1
    - Dst: EVP_PKEY_decrypt_init
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:110,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:111,1
    - Dst: EVP_PKEY_decrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:113,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:115,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:115,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:116,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:119,1
    - Dst: EVP_PKEY_decrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:120,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:122,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:123,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:123,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:124,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:125,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:128,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:131,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:132,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 1
    argNames:
    - ' ciphertext'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 134
    functionName: RsaOaepDecrypt
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - EVP_PKEY_free
    - BIO_new_mem_buf
    - static_cast<int>
    - EVP_PKEY_decrypt_init
    - reinterpret_cast<unsigned char*>
    - std::string::resize
    - reinterpret_cast<const unsigned char*>
    - EVP_PKEY_decrypt
    - data
    - std::string::clear
    - EVP_PKEY_CTX_new
    - PEM_read_bio_PrivateKey
    - size
    - EVP_PKEY_CTX_free
    linkageType: ''
    returnType: std::string
    signature: std::string RsaOaepDecrypt(const std::string& ciphertext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:146,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:148,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:149,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:150,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 152
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, KnownVector_PasswordPassword_AsciiSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:156,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:157,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:157,1
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:160,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:162,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:163,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 165
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - ASSERT_EQ
    - std::string::reserve
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, KnownVector_PasswordSecret_BinarySalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:169,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:169,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:170,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, EmptyPasswordReturnsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:176,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:176,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:177,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:177,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:178,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:178,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:179,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 180
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, BadSaltLengthReturnsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:184,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:185,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:185,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:186,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:187,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 190
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, DeterministicAcrossCalls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:195,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:195,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:195,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:196,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:197,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:197,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 199
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::BasicStringPiece::BasicStringPiece
    - NativePasswordScramble
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, DifferentSaltsProduceDifferentOutputs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:205,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:206,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:207,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, ZeroSaltEdgeCase)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:213,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:214,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:214,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:215,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, LongPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:224,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:224,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:224,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:225,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:226,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:226,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 228
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::BasicStringPiece::BasicStringPiece
    - NativePasswordScramble
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, NulByteInPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:235,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:236,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:237,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 238
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, HighBitPasswordBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:254,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:254,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:257,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:258,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:259,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 260
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - CachingSha2PasswordScramble
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, KnownVector_UpstreamMysqlServerTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:265,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:268,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:269,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:270,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 272
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - CachingSha2PasswordScramble
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, KnownVector_PasswordPassword_AsciiSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:276,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:277,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:277,1
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:279,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:282,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:283,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 285
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - CachingSha2PasswordScramble
    - std::string::reserve
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, KnownVector_PasswordSecret_BinarySalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:289,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:289,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:290,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 291
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, EmptyPasswordReturnsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:298,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:299,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:300,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 301
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::size
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, LongPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:306,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:306,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:307,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:307,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:308,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:308,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:309,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 310
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, BadSaltLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:314,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:315,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:315,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:316,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:317,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 319
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, Deterministic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:324,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:324,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:324,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:325,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:326,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:326,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 328
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, DifferentSaltsProduceDifferentOutputs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:334,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:334,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:334,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:335,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:336,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:336,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 330
    functionDepth: 1
    functionLinenumber: 330
    functionLinenumberEnd: 338
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, NulByteInPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:343,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:344,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:345,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 346
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::size
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, HighBitPasswordBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:358,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:359,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:360,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:361,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:362,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:362,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:363,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:363,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:366,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:366,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:366,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:370,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:370,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:371,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:372,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 354
    functionDepth: 2
    functionLinenumber: 354
    functionLinenumberEnd: 375
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::string::resize
    - CachingSha2PasswordRsaEncrypt
    - RsaOaepDecrypt
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, RoundTripRecoversObfuscatedPlaintext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:379,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:380,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:381,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:382,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:383,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:383,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:386,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:386,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:387,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:387,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 389
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - static_cast<unsigned char>
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - CachingSha2PasswordRsaEncrypt
    - RsaOaepDecrypt
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, EmptyPasswordEncryptsNulTerminator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:392,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:392,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:393,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:394,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:394,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 396
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_TRUE
    - CachingSha2PasswordRsaEncrypt
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, BadSaltLengthReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:399,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:399,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:400,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:401,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:401,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:402,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:403,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:403,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:404,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:405,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:405,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_TRUE
    - CachingSha2PasswordRsaEncrypt
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, InvalidPubKeyReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:413,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:414,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:415,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:416,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:417,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:418,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:419,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:420,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:421,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:421,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:422,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:422,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:423,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:424,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:424,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 409
    functionDepth: 2
    functionLinenumber: 409
    functionLinenumberEnd: 425
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - EXPECT_NE
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordRsaEncrypt
    - RsaOaepDecrypt
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, ProducesNondeterministicCiphertext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:433,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:434,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:435,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 436
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - CachingSha2PasswordCleartext
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, AppendsNulTerminator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:439,1
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:439,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 440
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachingSha2PasswordCleartext
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, EmptyPasswordReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:446,1
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:446,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 447
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - CachingSha2PasswordCleartext
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, NulByteInPasswordPreserved)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:452,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:454,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:454,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:455,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:455,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:456,1
    - Dst: std::string::back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:456,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 457
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::back
    - CachingSha2PasswordCleartext
    - std::string::compare
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, HighBitPasswordBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:461,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:462,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:463,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:463,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 464
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - CachingSha2PasswordCleartext
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, LongPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:472,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:473,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:474,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:475,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:477,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:477,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:478,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:478,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 470
    functionDepth: 1
    functionLinenumber: 470
    functionLinenumberEnd: 479
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::size
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, ExplicitIsSslFalseTakesRsaPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:483,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:484,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:485,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:488,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 481
    functionDepth: 1
    functionLinenumber: 481
    functionLinenumberEnd: 489
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslTrueReturnsCleartextPayload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:494,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:495,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:496,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:497,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:499,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 491
    functionDepth: 1
    functionLinenumber: 491
    functionLinenumberEnd: 500
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslTrueIgnoresSaltAndPubKey)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:504,1
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:504,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:505,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:506,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 509
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslTrueEmptyPasswordReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:513,1
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:513,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:514,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:515,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 518
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslFalseRejectsBadPubKey)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:44,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:44,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:45,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:47,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' hex'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 50
    functionName: FromHex
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 4
    functionsReached:
    - std::string::resize
    - strtol
    - size
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: std::string FromHex(const std::string& hex)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:100,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:101,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:102,1
    - Dst: BIO_free
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:104,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:106,1
    - Dst: EVP_PKEY_decrypt_init
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:110,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:111,1
    - Dst: EVP_PKEY_decrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:113,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:115,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:115,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:116,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:119,1
    - Dst: EVP_PKEY_decrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:120,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:122,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:123,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:123,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:124,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:125,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:128,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:131,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:132,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 1
    argNames:
    - ' ciphertext'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 134
    functionName: RsaOaepDecrypt
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 3
    functionsReached:
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - EVP_PKEY_free
    - BIO_new_mem_buf
    - static_cast<int>
    - EVP_PKEY_decrypt_init
    - reinterpret_cast<unsigned char*>
    - std::string::resize
    - reinterpret_cast<const unsigned char*>
    - EVP_PKEY_decrypt
    - data
    - std::string::clear
    - EVP_PKEY_CTX_new
    - PEM_read_bio_PrivateKey
    - size
    - EVP_PKEY_CTX_free
    linkageType: ''
    returnType: std::string
    signature: std::string RsaOaepDecrypt(const std::string& ciphertext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:146,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:148,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:149,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:149,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:150,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 152
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, KnownVector_PasswordPassword_AsciiSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:156,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:157,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:157,1
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:160,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:162,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:163,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 165
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - ASSERT_EQ
    - std::string::reserve
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, KnownVector_PasswordSecret_BinarySalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:169,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:169,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:170,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 171
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, EmptyPasswordReturnsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:176,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:176,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:177,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:177,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:178,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:178,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:179,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 180
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, BadSaltLengthReturnsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:184,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:185,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:185,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:186,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:187,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:187,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:188,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 190
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, DeterministicAcrossCalls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:195,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:195,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:195,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:196,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:197,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:197,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 199
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::BasicStringPiece::BasicStringPiece
    - NativePasswordScramble
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, DifferentSaltsProduceDifferentOutputs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:205,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:206,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:207,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 201
    functionDepth: 1
    functionLinenumber: 201
    functionLinenumberEnd: 208
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, ZeroSaltEdgeCase)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:213,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:214,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:214,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:215,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:215,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 216
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, LongPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:224,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:224,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:224,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:225,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:226,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:226,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 228
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - butil::BasicStringPiece::BasicStringPiece
    - NativePasswordScramble
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, NulByteInPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:235,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:236,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:236,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:237,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 238
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - NativePasswordScramble
    - std::string::size
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlNativePasswordTest, HighBitPasswordBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:254,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:254,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:257,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:258,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:259,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 260
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - CachingSha2PasswordScramble
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, KnownVector_UpstreamMysqlServerTest)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:265,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:268,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:269,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:270,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:270,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 272
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - CachingSha2PasswordScramble
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, KnownVector_PasswordPassword_AsciiSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:276,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:277,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:277,1
    - Dst: FromHex
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:279,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:282,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:283,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 285
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - FromHex
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - CachingSha2PasswordScramble
    - std::string::reserve
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, KnownVector_PasswordSecret_BinarySalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:289,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:289,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:290,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 291
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, EmptyPasswordReturnsEmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:298,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:299,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:300,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:300,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 293
    functionDepth: 1
    functionLinenumber: 293
    functionLinenumberEnd: 301
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::size
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, LongPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:306,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:306,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:307,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:307,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:308,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:308,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:309,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 310
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 310
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, BadSaltLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:314,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:315,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:315,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:316,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:317,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 312
    functionDepth: 1
    functionLinenumber: 312
    functionLinenumberEnd: 319
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, Deterministic)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:324,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:324,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:324,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:325,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:326,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:326,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 328
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, DifferentSaltsProduceDifferentOutputs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:334,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:334,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:334,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:335,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:336,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:336,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 330
    functionDepth: 1
    functionLinenumber: 330
    functionLinenumberEnd: 338
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, NulByteInPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:343,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:344,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:344,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:345,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 346
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::size
    - CachingSha2PasswordScramble
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2PasswordTest, HighBitPasswordBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:358,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:359,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:360,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:361,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:362,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:362,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:363,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:363,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:366,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:366,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:366,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:370,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:370,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:371,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:372,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 354
    functionDepth: 2
    functionLinenumber: 354
    functionLinenumberEnd: 375
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::string::resize
    - CachingSha2PasswordRsaEncrypt
    - RsaOaepDecrypt
    - std::string::size
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, RoundTripRecoversObfuscatedPlaintext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:379,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:380,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:381,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:382,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:383,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:383,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:386,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:386,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:387,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:387,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 389
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - static_cast<unsigned char>
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - CachingSha2PasswordRsaEncrypt
    - RsaOaepDecrypt
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, EmptyPasswordEncryptsNulTerminator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:392,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:392,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:393,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:394,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:394,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:395,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 396
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_TRUE
    - CachingSha2PasswordRsaEncrypt
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, BadSaltLengthReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:399,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:399,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:400,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:401,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:401,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:402,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:403,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:403,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:404,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:405,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:405,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 407
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_TRUE
    - CachingSha2PasswordRsaEncrypt
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, InvalidPubKeyReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:413,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:414,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:415,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:416,1
    - Dst: CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:417,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:418,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:419,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:420,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:421,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:421,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:422,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:422,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:423,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:424,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:424,1
    - Dst: RsaOaepDecrypt
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 409
    functionDepth: 2
    functionLinenumber: 409
    functionLinenumberEnd: 425
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - EXPECT_NE
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordRsaEncrypt
    - RsaOaepDecrypt
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2RsaTest, ProducesNondeterministicCiphertext)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:433,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:434,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:435,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 436
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - CachingSha2PasswordCleartext
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, AppendsNulTerminator)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:439,1
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:439,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:439,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 440
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - CachingSha2PasswordCleartext
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, EmptyPasswordReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:446,1
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:446,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 442
    functionDepth: 1
    functionLinenumber: 442
    functionLinenumberEnd: 447
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - CachingSha2PasswordCleartext
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, NulByteInPasswordPreserved)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:452,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:454,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:454,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:454,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:455,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:455,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:456,1
    - Dst: std::string::back
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:456,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 457
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::back
    - CachingSha2PasswordCleartext
    - std::string::compare
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, HighBitPasswordBytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:461,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:462,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:463,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:463,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 464
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - CachingSha2PasswordCleartext
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2CleartextTest, LongPassword)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:472,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:473,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:474,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:475,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:477,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:477,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:478,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:478,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 470
    functionDepth: 1
    functionLinenumber: 470
    functionLinenumberEnd: 479
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::size
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, ExplicitIsSslFalseTakesRsaPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:483,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:484,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:485,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:486,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:488,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 489
      start: 481
    functionDepth: 1
    functionLinenumber: 481
    functionLinenumberEnd: 489
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslTrueReturnsCleartextPayload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:494,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:495,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:496,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:497,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:499,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 491
    functionDepth: 1
    functionLinenumber: 491
    functionLinenumberEnd: 500
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslTrueIgnoresSaltAndPubKey)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:504,1
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:504,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:505,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:506,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 509
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslTrueEmptyPasswordReturnsEmpty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:513,1
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:513,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:514,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:515,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 518
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_scramble_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - CachingSha2PasswordSlowPath
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlCachingSha2SlowPathTest, IsSslFalseRejectsBadPubKey)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:106,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:106,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:107,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:108,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:110,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:113,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:113,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:115,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:117,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:117,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:118,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:118,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:120,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:120,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:122,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:122,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:123,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:123,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:125,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:125,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:126,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:126,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:130,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:130,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:132,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:135,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:135,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:135,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:136,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:139,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:140,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 7
    argNames:
    - ' server_version'
    - connection_id
    - ' salt'
    - capability_flags
    - character_set
    - status_flags
    - ' auth_plugin_name'
    argTypes:
    - std::string
    - uint32_t
    - std::string
    - uint32_t
    - uint8_t
    - uint16_t
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 143
    functionName: MakeHandshakeV10Payload
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - std::string::push_back
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string MakeHandshakeV10Payload(\n        const std::string& server_version,\n
      \       uint32_t connection_id,\n        const std::string& salt,\n        uint32_t
      capability_flags,\n        uint8_t character_set,\n        uint16_t status_flags,\n
      \       const std::string& auth_plugin_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:151,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:151,1
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:161,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:166,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:167,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:168,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 172
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - HandshakeV10::auth_plugin_data::size
    - EXPECT_EQ
    - ParseHandshakeV10
    - ASSERT_TRUE
    - MakeHandshakeV10Payload
    - std::string::push_back
    - EXPECT_TRUE
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, HappyPath_Mysql8Style)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:176,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:176,1
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:184,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 174
    functionDepth: 2
    functionLinenumber: 174
    functionLinenumberEnd: 187
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ParseHandshakeV10
    - ASSERT_TRUE
    - MakeHandshakeV10Payload
    - std::string::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, HappyPath_CachingSha2Server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:190,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:191,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:193,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 194
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseHandshakeV10
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsBadProtocolVersion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:198,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:201,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 202
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseHandshakeV10
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsTruncatedAtServerVersion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:206,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:206,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 207
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ParseHandshakeV10
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsEmptyPayload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:212,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:216,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:218,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 219
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - MakeHandshakeV10Payload
    - ParseHandshakeV10
    - std::string::data
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsTruncatedBeforeSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:223,1
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:229,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:230,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 232
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - HandshakeV10::auth_plugin_data::size
    - EXPECT_EQ
    - ParseHandshakeV10
    - ASSERT_TRUE
    - MakeHandshakeV10Payload
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, ExtractsFull20ByteSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:250,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:250,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:253,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:253,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:255,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:256,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:256,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:257,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:257,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:258,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:259,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:262,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:262,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:264,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:266,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:266,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:266,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:269,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:269,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 270
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<uint32_t>
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - static_cast<unsigned char>
    - ASSERT_GE
    - BuildHandshakeResponse41
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, BuildsExpectedLayout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:285,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:286,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 287
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, OmitsDatabaseWhenFlagAbsent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:302,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:302,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:303,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 304
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - std::string
    - EXPECT_NE
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, IncludesDatabaseWhenFlagSet)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:319,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:319,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:322,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 323
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - std::string
    - EXPECT_NE
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, HandlesLargeAuthResponseViaLenEncoding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:340,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:340,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:341,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 343
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::empty
    - std::string
    - BuildHandshakeResponse41
    - EXPECT_TRUE
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, RejectsOversizeAuthResponseWithoutLenEnc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:353,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:357,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:357,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:360,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 361
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - EXPECT_EQ
    - std::string
    - static_cast<unsigned char>
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, AcceptsMaxSizeAuthResponseWithoutLenEnc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:374,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:374,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:377,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 378
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - EXPECT_EQ
    - std::string
    - static_cast<unsigned char>
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, UsesSingleByteLengthWithoutLenEncFlag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:385,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:386,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:387,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:388,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:389,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:391,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:391,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:392,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:393,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 384
    functionDepth: 1
    functionLinenumber: 384
    functionLinenumberEnd: 394
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ParseAuthSwitchRequest
    - std::string
    - std::string::append
    - std::string::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthSwitchRequestTest, HappyPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:397,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:398,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:400,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 396
    functionDepth: 1
    functionLinenumber: 396
    functionLinenumberEnd: 401
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseAuthSwitchRequest
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthSwitchRequestTest, RejectsBadTag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:404,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:405,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:407,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 408
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseAuthSwitchRequest
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthSwitchRequestTest, RejectsMissingPluginNameNul)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:415,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:417,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:417,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:418,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:418,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 419
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    - ParseAuthMoreData
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, FastAuthOkMarker)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:422,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:424,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:424,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:425,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 426
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    - ParseAuthMoreData
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, RequestPubKeyMarker)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:429,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:431,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:433,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 435
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string::append
    - static_cast<char>
    - ParseAuthMoreData
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, PubKeyPayload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:438,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:439,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:441,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:441,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 442
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - std::string::append
    - ParseAuthMoreData
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, RejectsBadTag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    functionName: IsSpawnedServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsSpawnedServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:512,1
    - Dst: password::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:513,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - use_ssl
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 511
    functionDepth: 0
    functionLinenumber: 511
    functionLinenumberEnd: 519
    functionName: FindNonEmptyCase
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - password::empty
    - size
    linkageType: ''
    returnType: AuthCase
    signature: AuthCase * FindNonEmptyCase(bool use_ssl)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:526,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:527,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:529,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 530
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:534,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:536,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:537,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:537,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:539,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:540,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:540,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:541,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 532
    functionDepth: 1
    functionLinenumber: 532
    functionLinenumberEnd: 543
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:548,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:553,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:555,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:555,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:556,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:556,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:557,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:558,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 562
    functionName: ConnectTestMysql
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ConnectTestMysql()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:572,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:573,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:573,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:574,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:576,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:578,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:580,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:583,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:585,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:592,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:593,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:599,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:600,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:604,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:605,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:605,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:606,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:607,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:612,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:615,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:615,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:616,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:617,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:618,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:618,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:619,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:619,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:622,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:624,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:626,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:627,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:629,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:631,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:638,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:640,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:641,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:642,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:646,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:647,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:648,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:654,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:656,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:658,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:659,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:666,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:674,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:677,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:678,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:681,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:685,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:690,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:692,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 564
    functionDepth: 1
    functionLinenumber: 564
    functionLinenumberEnd: 694
    functionName: RunMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - fork
    - TestDataDir
    - std::string::c_str
    - printf
    - clear
    - std::string
    - CHECK
    - execvp
    - ConnectTestMysql
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - push_back
    linkageType: ''
    returnType: void
    signature: void RunMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SSL_read
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:702,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:702,1
    - Dst: read
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:703,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:705,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 3
    argNames:
    - fd
    - buf
    - n
    argTypes:
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 699
    functionDepth: 0
    functionLinenumber: 699
    functionLinenumberEnd: 713
    functionName: ReadFull
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - SSL_read
    - static_cast<size_t>
    - read
    - static_cast<int>
    linkageType: ''
    returnType: bool
    signature: bool ReadFull(int fd, char* buf, size_t n, SSL* ssl = NULL)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:719,1
    - Dst: SSL_write
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:720,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:720,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:721,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:721,1
    - Dst: write
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:722,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:722,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:722,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:724,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - fd
    - ' data'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 732
    functionName: WriteFull
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - SSL_write
    - static_cast<int>
    - static_cast<size_t>
    - write
    - data
    - size
    linkageType: ''
    returnType: bool
    signature: bool WriteFull(int fd, const std::string& data, SSL* ssl = NULL)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ReadFull
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:739,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:743,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:743,1
    - Dst: std::string*::resize
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:747,1
    - Dst: ReadFull
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:749,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - fd
    - payload
    - seq
    argTypes:
    - int
    - std::string*
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 753
      start: 736
    functionDepth: 1
    functionLinenumber: 736
    functionLinenumberEnd: 753
    functionName: ReadPacket
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::resize
    - ReadFull
    - DecodePacketHeader
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: bool
    signature: "bool ReadPacket(int fd, std::string* payload, uint8_t* seq,\n                       SSL*
      ssl = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:760,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:760,1
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:762,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:763,1
    - Dst: WriteFull
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 756
    functionDepth: 2
    functionLinenumber: 756
    functionLinenumberEnd: 765
    functionName: WritePacket
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<uint32_t>
    - EncodePacketHeader
    - WriteFull
    - std::string::append
    - size
    linkageType: ''
    returnType: bool
    signature: "bool WritePacket(int fd, const std::string& payload, uint8_t seq,\n
      \                       SSL* ssl = NULL)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:781,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:781,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:784,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:784,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:785,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:785,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:786,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:787,1
    - Dst: SSL_CTX_new
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:794,1
    - Dst: TLS_client_method
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:794,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:798,1
    - Dst: SSL_new
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:800,1
    - Dst: SSL_set_fd
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:804,1
    - Dst: SSL_connect
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:805,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:806,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 3
    argNames:
    - fd
    - capability_flags
    - seq
    argTypes:
    - int
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 775
    functionDepth: 3
    functionLinenumber: 775
    functionLinenumberEnd: 810
    functionName: UpgradeToSSL
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - TLS_client_method
    - SSL_new
    - SSL_connect
    - std::string::append
    - SSL_CTX_set_verify
    - std::string::push_back
    - SSL_CTX_new
    - WritePacket
    - SSL_free
    - SSL_set_fd
    - static_cast<char>
    linkageType: ''
    returnType: SSL
    signature: SSL * UpgradeToSSL(int fd, uint32_t capability_flags, uint8_t seq)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 835
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 835
    functionName: path
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * path() const
  - BBCount: 26
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:864,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:869,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:875,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:884,1
    - Dst: HandshakeV10::auth_plugin_name::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:886,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:899,1
    - Dst: UpgradeToSSL
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:901,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:908,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:913,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:915,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:919,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:923,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:933,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:937,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:941,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:947,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:947,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:948,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:954,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:963,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:964,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:965,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:966,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:974,1
    - Dst: AuthMoreData::data::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:974,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:978,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:990,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:992,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:992,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:993,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1000,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1005,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1010,1
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1015,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1017,1
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1024,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1025,1
    - Dst: SSL_shutdown
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1042,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1043,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 143
    argCount: 4
    argNames:
    - fd
    - ' user'
    - ' password'
    - use_ssl
    argTypes:
    - int
    - std::string
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1046
      start: 861
    functionDepth: 4
    functionLinenumber: 861
    functionLinenumberEnd: 1046
    functionName: PerformSha2Login
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - HandshakeV10::auth_plugin_name::empty
    - BuildHandshakeResponse41
    - empty
    - static_cast<uint8_t>
    - CachingSha2PasswordSlowPath
    - NativePasswordScramble
    - std::string::substr
    - std::string::empty
    - std::string
    - UpgradeToSSL
    - AuthMoreData::data::empty
    - SSL_shutdown
    - WritePacket
    - SSL_free
    - CachingSha2PasswordCleartext
    - CachingSha2PasswordScramble
    - ReadPacket
    - ParseHandshakeV10
    - ParseAuthSwitchRequest
    - std::string::size
    - ParseAuthMoreData
    linkageType: ''
    returnType: LoginTrace
    signature: "LoginTrace PerformSha2Login(int fd, const std::string& user,\n                                   const
      std::string& password, bool use_ssl,\n                                   const
      std::string& initial_plugin =\n                                       std::string())"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1051,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1052
      start: 1050
    functionDepth: 0
    functionLinenumber: 1050
    functionLinenumberEnd: 1052
    functionName: MysqlHandshakeServerTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 1054
    functionDepth: 0
    functionLinenumber: 1054
    functionLinenumberEnd: 1054
    functionName: MysqlHandshakeServerTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1059,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1060,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1063,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1064,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1068,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1068,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1069,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1072,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1072,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1073,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1074,1
    - Dst: HandshakeV10::server_version::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1074,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1075,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1075,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1076,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1077,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1078,1
    - Dst: HandshakeV10::auth_plugin_name::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1078,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1079,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1080
      start: 1058
    functionDepth: 2
    functionLinenumber: 1058
    functionLinenumberEnd: 1080
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadPacket
    - HandshakeV10::auth_plugin_name::empty
    - HandshakeV10::auth_plugin_data::size
    - EXPECT_EQ
    - ASSERT_TRUE
    - ParseHandshakeV10
    - ASSERT_GE
    - NoServer
    - HandshakeV10::server_version::empty
    - ConnectTestMysql
    - EXPECT_TRUE
    - puts
    - close
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, ParsesRealServerGreeting)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1090,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1091,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1094,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1095,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1098,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1100,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1100,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1102,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1102,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1105,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1106,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1108,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1108,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1111,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1113,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1114,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1115,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1116,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1118,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1119,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1122
      start: 1089
    functionDepth: 2
    functionLinenumber: 1089
    functionLinenumberEnd: 1122
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - NoServer
    - ASSERT_EQ
    - empty
    - NativePasswordScramble
    - HandshakeV10::auth_plugin_data::size
    - ASSERT_TRUE
    - std::string::empty
    - std::string
    - ConnectTestMysql
    - EXPECT_TRUE
    - EXPECT_EQ
    - SCOPED_TRACE
    - CachingSha2PasswordScramble
    - puts
    - ReadPacket
    - ParseHandshakeV10
    - ASSERT_GE
    - close
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, GeneratesScramblesFromRealSalt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1128,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1129,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1133,1
    - Dst: password::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1134,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1140,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1143,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1144,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1146,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1148,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1149,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1127
    functionDepth: 5
    functionLinenumber: 1127
    functionLinenumberEnd: 1151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - password::empty
    - NoServer
    - ASSERT_GE
    - ConnectTestMysql
    - EXPECT_TRUE
    - PerformSha2Login
    - puts
    - close
    - size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, AuthenticatesEmptyPasswordFastPath)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1157,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1158,1
    - Dst: FindNonEmptyCase
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1161,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1163,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1168,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1169,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1171,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1172,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1174,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1175,1
    - Dst: IsSpawnedServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1178,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1182,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1185
      start: 1156
    functionDepth: 5
    functionLinenumber: 1156
    functionLinenumberEnd: 1185
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - IsSpawnedServer
    - FindNonEmptyCase
    - ASSERT_GE
    - NoServer
    - ConnectTestMysql
    - EXPECT_TRUE
    - PerformSha2Login
    - puts
    - close
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, FullAuthenticationNotSSL)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1192,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1193,1
    - Dst: FindNonEmptyCase
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1196,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1198,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1201,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1202,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1204,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1208,1
    - Dst: IsSpawnedServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1209,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1214,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1191
    functionDepth: 5
    functionLinenumber: 1191
    functionLinenumberEnd: 1217
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - IsSpawnedServer
    - FindNonEmptyCase
    - ASSERT_GE
    - NoServer
    - ConnectTestMysql
    - EXPECT_TRUE
    - PerformSha2Login
    - puts
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, FullAuthenticationSSL)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1227,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1228,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1231,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1231,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1233,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1235,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1236,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1238,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1240,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1244,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1245,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1247,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1248,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1249,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1254
      start: 1226
    functionDepth: 5
    functionLinenumber: 1226
    functionLinenumberEnd: 1254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - SCOPED_TRACE
    - NoServer
    - ASSERT_GE
    - ConnectTestMysql
    - EXPECT_TRUE
    - empty
    - PerformSha2Login
    - puts
    - close
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, CachesCredentialOnSecondLogin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1262,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1266,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1266,1
    - Dst: front
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1267,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1268,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1269,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1271,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1273,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1275,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1281
      start: 1261
    functionDepth: 5
    functionLinenumber: 1261
    functionLinenumberEnd: 1281
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - front
    - EXPECT_EQ
    - NoServer
    - ASSERT_GE
    - ConnectTestMysql
    - EXPECT_TRUE
    - empty
    - PerformSha2Login
    - puts
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, SwitchesFromNativePasswordToServerPlugin)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:106,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:106,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:107,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:108,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:110,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:113,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:113,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:115,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:117,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:117,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:118,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:118,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:120,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:120,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:122,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:122,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:123,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:123,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:125,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:125,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:126,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:126,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:130,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:130,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:132,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:135,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:135,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:135,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:136,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:139,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:140,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 7
    argNames:
    - ' server_version'
    - connection_id
    - ' salt'
    - capability_flags
    - character_set
    - status_flags
    - ' auth_plugin_name'
    argTypes:
    - std::string
    - uint32_t
    - std::string
    - uint32_t
    - uint8_t
    - uint16_t
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 143
    functionName: MakeHandshakeV10Payload
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 4
    functionsReached:
    - std::string::append
    - std::string::push_back
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string MakeHandshakeV10Payload(\n        const std::string& server_version,\n
      \       uint32_t connection_id,\n        const std::string& salt,\n        uint32_t
      capability_flags,\n        uint8_t character_set,\n        uint16_t status_flags,\n
      \       const std::string& auth_plugin_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:151,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:151,1
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:161,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:163,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:164,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:165,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:166,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:166,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:167,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:168,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:169,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 149
    functionDepth: 2
    functionLinenumber: 149
    functionLinenumberEnd: 172
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - HandshakeV10::auth_plugin_data::size
    - EXPECT_EQ
    - ParseHandshakeV10
    - ASSERT_TRUE
    - MakeHandshakeV10Payload
    - std::string::push_back
    - EXPECT_TRUE
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, HappyPath_Mysql8Style)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:176,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:176,1
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:180,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:184,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:184,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:185,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:186,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 174
    functionDepth: 2
    functionLinenumber: 174
    functionLinenumberEnd: 187
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ParseHandshakeV10
    - ASSERT_TRUE
    - MakeHandshakeV10Payload
    - std::string::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, HappyPath_CachingSha2Server)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:190,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:191,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:193,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 194
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseHandshakeV10
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsBadProtocolVersion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:198,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:199,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:201,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 202
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseHandshakeV10
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsTruncatedAtServerVersion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:206,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:206,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 207
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ParseHandshakeV10
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsEmptyPayload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:212,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:216,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:218,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 209
    functionDepth: 2
    functionLinenumber: 209
    functionLinenumberEnd: 219
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - MakeHandshakeV10Payload
    - ParseHandshakeV10
    - std::string::data
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, RejectsTruncatedBeforeSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:223,1
    - Dst: MakeHandshakeV10Payload
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:229,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:229,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:230,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:230,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 232
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - HandshakeV10::auth_plugin_data::size
    - EXPECT_EQ
    - ParseHandshakeV10
    - ASSERT_TRUE
    - MakeHandshakeV10Payload
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeV10Test, ExtractsFull20ByteSalt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:246,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:250,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:250,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:253,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:253,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:255,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:256,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:256,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:257,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:257,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:258,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:259,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:261,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:262,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:262,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:264,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:264,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:266,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:266,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:266,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:269,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:269,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 270
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<uint32_t>
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - static_cast<unsigned char>
    - ASSERT_GE
    - BuildHandshakeResponse41
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, BuildsExpectedLayout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:285,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:285,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:286,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 272
    functionDepth: 0
    functionLinenumber: 272
    functionLinenumberEnd: 287
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, OmitsDatabaseWhenFlagAbsent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:302,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:302,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:303,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 289
    functionDepth: 0
    functionLinenumber: 289
    functionLinenumberEnd: 304
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - std::string
    - EXPECT_NE
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, IncludesDatabaseWhenFlagSet)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:315,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:319,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:319,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:322,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 323
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - std::string
    - EXPECT_NE
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, HandlesLargeAuthResponseViaLenEncoding)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:336,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:340,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:340,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:341,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 343
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::empty
    - std::string
    - BuildHandshakeResponse41
    - EXPECT_TRUE
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, RejectsOversizeAuthResponseWithoutLenEnc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:353,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:357,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:357,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:360,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 346
    functionDepth: 0
    functionLinenumber: 346
    functionLinenumberEnd: 361
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - EXPECT_EQ
    - std::string
    - static_cast<unsigned char>
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, AcceptsMaxSizeAuthResponseWithoutLenEnc)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:374,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:374,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:376,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:377,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 378
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - EXPECT_EQ
    - std::string
    - static_cast<unsigned char>
    - BuildHandshakeResponse41
    linkageType: ''
    returnType: void
    signature: void TEST(HandshakeResponse41Test, UsesSingleByteLengthWithoutLenEncFlag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:385,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:386,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:387,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:388,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:389,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:391,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:391,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:392,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:393,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 384
    functionDepth: 1
    functionLinenumber: 384
    functionLinenumberEnd: 394
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ParseAuthSwitchRequest
    - std::string
    - std::string::append
    - std::string::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthSwitchRequestTest, HappyPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:397,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:398,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:400,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 396
    functionDepth: 1
    functionLinenumber: 396
    functionLinenumberEnd: 401
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseAuthSwitchRequest
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthSwitchRequestTest, RejectsBadTag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:404,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:405,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:407,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 408
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - ParseAuthSwitchRequest
    - std::string::append
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthSwitchRequestTest, RejectsMissingPluginNameNul)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:415,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:417,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:417,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:418,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:418,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 419
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    - ParseAuthMoreData
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, FastAuthOkMarker)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:422,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:424,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:424,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:425,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 426
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    - ParseAuthMoreData
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, RequestPubKeyMarker)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:429,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:431,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:433,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:433,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 435
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - std::string::append
    - static_cast<char>
    - ParseAuthMoreData
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, PubKeyPayload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:438,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:439,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:441,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:441,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 442
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 442
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_FALSE
    - std::string::append
    - ParseAuthMoreData
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(AuthMoreDataTest, RejectsBadTag)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    functionName: IsSpawnedServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool IsSpawnedServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:512,1
    - Dst: password::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:513,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - use_ssl
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 511
    functionDepth: 0
    functionLinenumber: 511
    functionLinenumberEnd: 519
    functionName: FindNonEmptyCase
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 2
    functionsReached:
    - password::empty
    - size
    linkageType: ''
    returnType: AuthCase
    signature: AuthCase * FindNonEmptyCase(bool use_ssl)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:526,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:527,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:529,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 530
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 2
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:534,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:536,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:537,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:537,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:539,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:540,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:540,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:541,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 532
    functionDepth: 1
    functionLinenumber: 532
    functionLinenumberEnd: 543
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:548,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:553,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:555,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:555,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:556,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:556,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:557,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:558,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 562
    functionName: ConnectTestMysql
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 8
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ConnectTestMysql()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:572,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:573,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:573,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:574,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:576,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:578,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:580,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:583,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:585,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:592,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:593,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:599,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:600,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:604,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:605,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:605,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:606,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:607,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:612,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:615,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:615,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:616,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:617,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:618,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:618,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:619,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:619,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:622,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:624,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:626,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:627,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:629,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:631,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:638,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:640,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:641,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:642,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:646,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:647,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:648,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:654,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:656,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:658,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:659,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:666,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:674,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:677,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:678,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:681,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:685,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:690,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:692,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 564
    functionDepth: 1
    functionLinenumber: 564
    functionLinenumberEnd: 694
    functionName: RunMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - fork
    - TestDataDir
    - std::string::c_str
    - printf
    - clear
    - std::string
    - CHECK
    - execvp
    - ConnectTestMysql
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - push_back
    linkageType: ''
    returnType: void
    signature: void RunMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SSL_read
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:702,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:702,1
    - Dst: read
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:703,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:705,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 3
    argNames:
    - fd
    - buf
    - n
    argTypes:
    - int
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 699
    functionDepth: 0
    functionLinenumber: 699
    functionLinenumberEnd: 713
    functionName: ReadFull
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 1
    functionsReached:
    - SSL_read
    - static_cast<size_t>
    - read
    - static_cast<int>
    linkageType: ''
    returnType: bool
    signature: bool ReadFull(int fd, char* buf, size_t n, SSL* ssl = NULL)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:719,1
    - Dst: SSL_write
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:720,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:720,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:721,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:721,1
    - Dst: write
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:722,1
    - Dst: data
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:722,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:722,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:724,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 2
    argNames:
    - fd
    - ' data'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 732
    functionName: WriteFull
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 1
    functionsReached:
    - SSL_write
    - static_cast<int>
    - static_cast<size_t>
    - write
    - data
    - size
    linkageType: ''
    returnType: bool
    signature: bool WriteFull(int fd, const std::string& data, SSL* ssl = NULL)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ReadFull
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:739,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:743,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:743,1
    - Dst: std::string*::resize
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:747,1
    - Dst: ReadFull
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:749,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - fd
    - payload
    - seq
    argTypes:
    - int
    - std::string*
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 753
      start: 736
    functionDepth: 1
    functionLinenumber: 736
    functionLinenumberEnd: 753
    functionName: ReadPacket
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 3
    functionsReached:
    - std::string*::resize
    - ReadFull
    - DecodePacketHeader
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: bool
    signature: "bool ReadPacket(int fd, std::string* payload, uint8_t* seq,\n                       SSL*
      ssl = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:760,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:760,1
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:762,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:763,1
    - Dst: WriteFull
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:764,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 756
    functionDepth: 2
    functionLinenumber: 756
    functionLinenumberEnd: 765
    functionName: WritePacket
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 2
    functionsReached:
    - static_cast<uint32_t>
    - EncodePacketHeader
    - WriteFull
    - std::string::append
    - size
    linkageType: ''
    returnType: bool
    signature: "bool WritePacket(int fd, const std::string& payload, uint8_t seq,\n
      \                       SSL* ssl = NULL)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:781,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:781,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:784,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:784,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:785,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:785,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:786,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:787,1
    - Dst: SSL_CTX_new
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:794,1
    - Dst: TLS_client_method
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:794,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:798,1
    - Dst: SSL_new
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:800,1
    - Dst: SSL_set_fd
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:804,1
    - Dst: SSL_connect
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:805,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:806,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 3
    argNames:
    - fd
    - capability_flags
    - seq
    argTypes:
    - int
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 775
    functionDepth: 3
    functionLinenumber: 775
    functionLinenumberEnd: 810
    functionName: UpgradeToSSL
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 1
    functionsReached:
    - TLS_client_method
    - SSL_new
    - SSL_connect
    - std::string::append
    - SSL_CTX_set_verify
    - std::string::push_back
    - SSL_CTX_new
    - WritePacket
    - SSL_free
    - SSL_set_fd
    - static_cast<char>
    linkageType: ''
    returnType: SSL
    signature: SSL * UpgradeToSSL(int fd, uint32_t capability_flags, uint8_t seq)
  - BBCount: 3
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 835
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 835
    functionName: path
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * path() const
  - BBCount: 26
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:864,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:869,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:875,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:884,1
    - Dst: HandshakeV10::auth_plugin_name::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:886,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:899,1
    - Dst: UpgradeToSSL
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:901,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:908,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:913,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:915,1
    - Dst: BuildHandshakeResponse41
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:919,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:923,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:933,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:937,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:941,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:947,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:947,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:948,1
    - Dst: ParseAuthSwitchRequest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:954,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:963,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:964,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:965,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:966,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:974,1
    - Dst: AuthMoreData::data::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:974,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:978,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:990,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:992,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:992,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:993,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1000,1
    - Dst: ParseAuthMoreData
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1005,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1010,1
    - Dst: CachingSha2PasswordSlowPath
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1015,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1017,1
    - Dst: CachingSha2PasswordCleartext
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1024,1
    - Dst: WritePacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1025,1
    - Dst: SSL_shutdown
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1042,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1043,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 143
    argCount: 4
    argNames:
    - fd
    - ' user'
    - ' password'
    - use_ssl
    argTypes:
    - int
    - std::string
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1046
      start: 861
    functionDepth: 4
    functionLinenumber: 861
    functionLinenumberEnd: 1046
    functionName: PerformSha2Login
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 5
    functionsReached:
    - HandshakeV10::auth_plugin_name::empty
    - BuildHandshakeResponse41
    - empty
    - static_cast<uint8_t>
    - CachingSha2PasswordSlowPath
    - NativePasswordScramble
    - std::string::substr
    - std::string::empty
    - std::string
    - UpgradeToSSL
    - AuthMoreData::data::empty
    - SSL_shutdown
    - WritePacket
    - SSL_free
    - CachingSha2PasswordCleartext
    - CachingSha2PasswordScramble
    - ReadPacket
    - ParseHandshakeV10
    - ParseAuthSwitchRequest
    - std::string::size
    - ParseAuthMoreData
    linkageType: ''
    returnType: LoginTrace
    signature: "LoginTrace PerformSha2Login(int fd, const std::string& user,\n                                   const
      std::string& password, bool use_ssl,\n                                   const
      std::string& initial_plugin =\n                                       std::string())"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1051,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1052
      start: 1050
    functionDepth: 0
    functionLinenumber: 1050
    functionLinenumberEnd: 1052
    functionName: MysqlHandshakeServerTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 1054
    functionDepth: 0
    functionLinenumber: 1054
    functionLinenumberEnd: 1054
    functionName: MysqlHandshakeServerTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1059,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1060,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1063,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1064,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1068,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1068,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1069,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1072,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1072,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1073,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1074,1
    - Dst: HandshakeV10::server_version::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1074,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1075,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1075,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1076,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1077,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1078,1
    - Dst: HandshakeV10::auth_plugin_name::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1078,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1079,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1080
      start: 1058
    functionDepth: 2
    functionLinenumber: 1058
    functionLinenumberEnd: 1080
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadPacket
    - HandshakeV10::auth_plugin_name::empty
    - HandshakeV10::auth_plugin_data::size
    - EXPECT_EQ
    - ASSERT_TRUE
    - ParseHandshakeV10
    - ASSERT_GE
    - NoServer
    - HandshakeV10::server_version::empty
    - ConnectTestMysql
    - EXPECT_TRUE
    - puts
    - close
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, ParsesRealServerGreeting)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1090,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1091,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1094,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1095,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1098,1
    - Dst: ReadPacket
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1098,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1100,1
    - Dst: ParseHandshakeV10
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1100,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1102,1
    - Dst: HandshakeV10::auth_plugin_data::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1102,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1105,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1106,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1108,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1108,1
    - Dst: NativePasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1111,1
    - Dst: CachingSha2PasswordScramble
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1113,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1114,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1115,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1115,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1116,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1116,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1118,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1119,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1122
      start: 1089
    functionDepth: 2
    functionLinenumber: 1089
    functionLinenumberEnd: 1122
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - NoServer
    - ASSERT_EQ
    - empty
    - NativePasswordScramble
    - HandshakeV10::auth_plugin_data::size
    - ASSERT_TRUE
    - std::string::empty
    - std::string
    - ConnectTestMysql
    - EXPECT_TRUE
    - EXPECT_EQ
    - SCOPED_TRACE
    - CachingSha2PasswordScramble
    - puts
    - ReadPacket
    - ParseHandshakeV10
    - ASSERT_GE
    - close
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, GeneratesScramblesFromRealSalt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1128,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1129,1
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1133,1
    - Dst: password::empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1134,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1140,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1143,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1144,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1146,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1147,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1148,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1149,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1151
      start: 1127
    functionDepth: 5
    functionLinenumber: 1127
    functionLinenumberEnd: 1151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - password::empty
    - NoServer
    - ASSERT_GE
    - ConnectTestMysql
    - EXPECT_TRUE
    - PerformSha2Login
    - puts
    - close
    - size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, AuthenticatesEmptyPasswordFastPath)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1157,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1158,1
    - Dst: FindNonEmptyCase
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1161,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1163,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1168,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1169,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1171,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1172,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1174,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1175,1
    - Dst: IsSpawnedServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1176,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1178,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1182,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1185
      start: 1156
    functionDepth: 5
    functionLinenumber: 1156
    functionLinenumberEnd: 1185
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - IsSpawnedServer
    - FindNonEmptyCase
    - ASSERT_GE
    - NoServer
    - ConnectTestMysql
    - EXPECT_TRUE
    - PerformSha2Login
    - puts
    - close
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, FullAuthenticationNotSSL)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1192,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1193,1
    - Dst: FindNonEmptyCase
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1196,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1198,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1201,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1202,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1204,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1207,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1208,1
    - Dst: IsSpawnedServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1209,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1210,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1214,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1191
    functionDepth: 5
    functionLinenumber: 1191
    functionLinenumberEnd: 1217
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - IsSpawnedServer
    - FindNonEmptyCase
    - ASSERT_GE
    - NoServer
    - ConnectTestMysql
    - EXPECT_TRUE
    - PerformSha2Login
    - puts
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, FullAuthenticationSSL)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1227,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1228,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1231,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1231,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1233,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1235,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1236,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1238,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1240,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1244,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1245,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1247,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1248,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1249,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1250,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1254
      start: 1226
    functionDepth: 5
    functionLinenumber: 1226
    functionLinenumberEnd: 1254
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - SCOPED_TRACE
    - NoServer
    - ASSERT_GE
    - ConnectTestMysql
    - EXPECT_TRUE
    - empty
    - PerformSha2Login
    - puts
    - close
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, CachesCredentialOnSecondLogin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: NoServer
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1262,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1263,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1266,1
    - Dst: empty
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1266,1
    - Dst: front
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1267,1
    - Dst: ConnectTestMysql
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1268,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1269,1
    - Dst: PerformSha2Login
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1271,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1273,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1275,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1276,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1279,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1281
      start: 1261
    functionDepth: 5
    functionLinenumber: 1261
    functionLinenumberEnd: 1281
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - front
    - EXPECT_EQ
    - NoServer
    - ASSERT_GE
    - ConnectTestMysql
    - EXPECT_TRUE
    - empty
    - PerformSha2Login
    - puts
    - close
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlHandshakeServerTest, SwitchesFromNativePasswordToServerPlugin)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1286,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1287,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_mysql_auth_handshake_unittest.cpp:1288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1285
    functionDepth: 0
    functionLinenumber: 1285
    functionLinenumberEnd: 1289
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_handshake_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_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
    - butil::c_str
    - ASSERT_STREQ
    - size
    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::UTF16ToWide
    - butil::WideToUTF16
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    - butil::SplitString
    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
    - butil::c_str
    - ASSERT_STREQ
    - size
    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::UTF16ToWide
    - butil::WideToUTF16
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    - butil::SplitString
    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:
    - butil::empty
    - std::string
    - EXPECT_TRUE
    - 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:
    - second::empty
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - first::empty
    - size
    - EXPECT_FALSE
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - first::empty
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - EXPECT_EQ
    - butil::SplitStringIntoKeyValuePairs
    - ASSERT_EQ
    - size
    - EXPECT_FALSE
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - std::string
    - butil::SplitStringUsingSubstr
    - butil::AssertElements
    - arraysize
    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:
    - std::wstring
    - EXPECT_EQ
    - std::vector::clear
    - ASSERT_EQ
    - std::vector::size
    - butil::SplitString
    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:
    - EXPECT_EQ
    - std::vector::clear
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::vector::size
    - butil::SplitString
    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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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:
    - butil::SplitStringDontTrim
    - ASSERT_EQ
    - std::vector::size
    - EXPECT_EQ
    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
    - butil::SplitStringAlongWhitespace
    - ARRAYSIZE_UNSAFE
    - 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
    - butil::c_str
    - ASSERT_STREQ
    - size
    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::UTF16ToWide
    - butil::WideToUTF16
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    - butil::SplitString
    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
    - butil::c_str
    - ASSERT_STREQ
    - size
    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::UTF16ToWide
    - butil::WideToUTF16
    - std::vector<std::wstring>*::push_back
    - std::vector::size
    - butil::SplitString
    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:
    - butil::empty
    - std::string
    - EXPECT_TRUE
    - 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:
    - second::empty
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - first::empty
    - size
    - EXPECT_FALSE
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - first::empty
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - EXPECT_EQ
    - butil::SplitStringIntoKeyValuePairs
    - ASSERT_EQ
    - size
    - EXPECT_FALSE
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - butil::SplitStringIntoKeyValuePairs
    - EXPECT_EQ
    - ASSERT_EQ
    - EXPECT_TRUE
    - size
    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:
    - std::string
    - butil::SplitStringUsingSubstr
    - butil::AssertElements
    - arraysize
    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:
    - std::wstring
    - EXPECT_EQ
    - std::vector::clear
    - ASSERT_EQ
    - std::vector::size
    - butil::SplitString
    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:
    - EXPECT_EQ
    - std::vector::clear
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::vector::size
    - butil::SplitString
    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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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::SplitStringUsingSubstr
    - butil::AssertElements
    - 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:
    - butil::SplitStringDontTrim
    - ASSERT_EQ
    - std::vector::size
    - EXPECT_EQ
    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
    - butil::SplitStringAlongWhitespace
    - ARRAYSIZE_UNSAFE
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void TEST(StringSplitTest, SplitStringAlongWhitespace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:49,1
    - Dst: resize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:50,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: HelloMessageTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - memset
    - resize
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:62,1
    - Dst: Serialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:64,1
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:67,1
    - Dst: brpc::ubring::HelloMessage::Deserialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:70,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:71,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:74,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 75
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - Serialize
    - EXPECT_EQ
    - brpc::ubring::HelloMessage::Deserialize
    - memcpy
    - memset
    - memcmp
    linkageType: ''
    returnType: void
    signature: void TEST_F(HelloMessageTest, serialize_deserialize_roundtrip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:82,1
    - Dst: Serialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:84,1
    - Dst: reinterpret_cast<HelloMessageLayout*>
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:87,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:88,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:89,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:89,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:90,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    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/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - Serialize
    - EXPECT_EQ
    - butil::HostToNet16
    - memset
    - reinterpret_cast<HelloMessageLayout*>
    - butil::HostToNet64
    linkageType: ''
    returnType: void
    signature: void TEST_F(HelloMessageTest, serialize_uses_network_byte_order)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:98,1
    - Dst: Serialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:100,1
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:103,1
    - Dst: brpc::ubring::HelloMessage::Deserialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:104,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 107
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - Serialize
    - memset
    - EXPECT_EQ
    - brpc::ubring::HelloMessage::Deserialize
    linkageType: ''
    returnType: void
    signature: void TEST_F(HelloMessageTest, large_len_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:110,1
    - Dst: Serialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:115,1
    - Dst: memset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:118,1
    - Dst: brpc::ubring::HelloMessage::Deserialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:121,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 109
    functionDepth: 1
    functionLinenumber: 109
    functionLinenumberEnd: 122
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - Serialize
    - EXPECT_EQ
    - brpc::ubring::HelloMessage::Deserialize
    - memset
    - memcmp
    linkageType: ''
    returnType: void
    signature: void TEST_F(HelloMessageTest, full_shm_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:129,1
    - Dst: toString
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:131,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:132,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:132,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:133,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:133,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:134,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:134,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:135,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 136
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - EXPECT_NE
    - std::string::find
    - toString
    linkageType: ''
    returnType: void
    signature: void TEST_F(HelloMessageTest, toString_contains_fields)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShmMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:145,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:146,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:153,1
    - Dst: UBShmEndpoint::UBShmEndpoint
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 155
    functionName: brpc::ubring::UBShmEndpointTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - ASSERT_EQ
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - UBShmEndpoint::UBShmEndpoint
    - ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:160,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:161,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:163,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:164,1
    - Dst: ShmMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 167
    functionName: brpc::ubring::UBShmEndpointTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - ShmMgrFini
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBRingManager::UbrMgrFini
    - brpc::SocketUniquePtr::SetFailed
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShmMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:145,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:146,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:153,1
    - Dst: UBShmEndpoint::UBShmEndpoint
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 155
    functionName: brpc::ubring::UBShmEndpointTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - ASSERT_EQ
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - UBShmEndpoint::UBShmEndpoint
    - ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:160,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:161,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:163,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:164,1
    - Dst: ShmMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 167
    functionName: brpc::ubring::UBShmEndpointTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - ShmMgrFini
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBRingManager::UbrMgrFini
    - brpc::SocketUniquePtr::SetFailed
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShmMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:145,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:146,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:153,1
    - Dst: UBShmEndpoint::UBShmEndpoint
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 155
    functionName: brpc::ubring::UBShmEndpointTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - ASSERT_EQ
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - UBShmEndpoint::UBShmEndpoint
    - ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:160,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:161,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:163,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:164,1
    - Dst: ShmMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 167
    functionName: brpc::ubring::UBShmEndpointTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - ShmMgrFini
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBRingManager::UbrMgrFini
    - brpc::SocketUniquePtr::SetFailed
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShmMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:145,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:146,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:152,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:153,1
    - Dst: UBShmEndpoint::UBShmEndpoint
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:154,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 155
    functionName: brpc::ubring::UBShmEndpointTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - ASSERT_EQ
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - UBShmEndpoint::UBShmEndpoint
    - ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:160,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:161,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:163,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:164,1
    - Dst: ShmMgrFini
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 167
    functionName: brpc::ubring::UBShmEndpointTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - ShmMgrFini
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBRingManager::UbrMgrFini
    - brpc::SocketUniquePtr::SetFailed
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ubring_unittest.cpp: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: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(UBShmEndpointTest, construct_initial_state)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fd
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:185,1
    - Dst: AllocateClientResources
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:186,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 188
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - fd
    - AllocateClientResources
    linkageType: ''
    returnType: void
    signature: void TEST_F(UBShmEndpointTest, allocate_client_resources_real_shm)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fd
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:192,1
    - Dst: AllocateClientResources
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:193,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_ubring_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_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - fd
    - AllocateClientResources
    linkageType: ''
    returnType: void
    signature: void TEST_F(UBShmEndpointTest, reset_cleans_up_resources)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:198,1
    - Dst: Reset
      Src: /src/brpc/test/brpc_ubring_unittest.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 200
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - Reset
    linkageType: ''
    returnType: void
    signature: void TEST_F(UBShmEndpointTest, reset_is_idempotent)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_ubring_unittest.cpp: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: TEST
    functionSourceFile: /src/brpc/test/brpc_ubring_unittest.cpp
    functionUses: 0
    functionsReached:
    - SUCCEED
    linkageType: ''
    returnType: void
    signature: void TEST(UbringDisabledTest, skip)
  - 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_EQ
    - StackVector::container
    - EXPECT_NE
    - StackVector::stack_data
    - static_cast<size_t>
    - EXPECT_TRUE
    - std::vector::front
    - EXPECT_FALSE
    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::push_back
    - EXPECT_EQ
    - Vector::erase
    - scoped_refptr::get
    - Container::iterator::get
    - Vector::begin
    - Vector::end
    - Dummy::Dummy
    - butil::find
    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:
    - memset
    - void_data
    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:
    - memset
    - void_data
    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:
    - EXPECT_ALIGNED
    - AlignedData<16>
    - ALIGNOF
    - AlignedData<256>
    - StackVector::push_back
    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_EQ
    - StackVector::container
    - EXPECT_NE
    - StackVector::stack_data
    - static_cast<size_t>
    - EXPECT_TRUE
    - std::vector::front
    - EXPECT_FALSE
    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::push_back
    - EXPECT_EQ
    - Vector::erase
    - scoped_refptr::get
    - Container::iterator::get
    - Vector::begin
    - Vector::end
    - Dummy::Dummy
    - butil::find
    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:
    - memset
    - void_data
    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:
    - memset
    - void_data
    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:
    - EXPECT_ALIGNED
    - AlignedData<16>
    - ALIGNOF
    - AlignedData<256>
    - StackVector::push_back
    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:
    - butil::Timer::stop
    - agent_type*::load
    - agent_type*::compare_exchange_weak
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - __builtin_expect
    - EXPECT_TRUE
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    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::AgentCombiner::get_or_create_tls_agent
    - ASSERT_TRUE
    - bvar::detail::AgentGroup::destroy_agent
    - bvar::detail::AgentGroup::create_new_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
    - fetch_add
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - butil::Timer::stop
    - bvar::detail::AgentGroup::destroy_agent
    - ASSERT_TRUE
    - bvar::detail::AgentGroup::create_new_agent
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - LOG
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - ARRAY_SIZE
    - pthread_create
    - bvar::detail::AgentGroup::destroy_agent
    - ASSERT_TRUE
    - store
    - pthread_join
    - bvar::detail::AgentGroup::create_new_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:
    - butil::Timer::stop
    - agent_type*::load
    - agent_type*::compare_exchange_weak
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - __builtin_expect
    - EXPECT_TRUE
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    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::AgentCombiner::get_or_create_tls_agent
    - ASSERT_TRUE
    - bvar::detail::AgentGroup::destroy_agent
    - bvar::detail::AgentGroup::create_new_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
    - fetch_add
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - butil::Timer::stop
    - bvar::detail::AgentGroup::destroy_agent
    - ASSERT_TRUE
    - bvar::detail::AgentGroup::create_new_agent
    - bvar::detail::AgentCombiner::get_or_create_tls_agent
    - LOG
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - ARRAY_SIZE
    - pthread_create
    - bvar::detail::AgentGroup::destroy_agent
    - ASSERT_TRUE
    - store
    - pthread_join
    - bvar::detail::AgentGroup::create_new_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:45,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:46,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 48
    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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: ScopedAMFMaxDepth::ScopedAMFMaxDepth
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedAMFMaxDepth(int32_t depth)
  - 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: ~ScopedAMFMaxDepth()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedAMFMaxDepth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - flag
    - value
    argTypes:
    - int32_t*
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: ScopedAMFLimit::ScopedAMFLimit
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedAMFLimit(int32_t* flag, int32_t value)
  - 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: ~ScopedAMFLimit()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedAMFLimit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:79,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:80,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:81,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:82,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - count
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 84
    functionName: AppendAMFStrictArrayHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFStrictArrayHeader(std::string* out, uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: AppendAMFObjectHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFObjectHeader(std::string* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:91,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:93,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:94,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - count
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 96
    functionName: AppendAMFEcmaArrayHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFEcmaArrayHeader(std::string* out, uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:99,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:100,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:101,1
    - Dst: std::string*::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - out
    - name
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 103
    functionName: AppendAMFShortStringBody
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::push_back
    - strlen
    linkageType: ''
    returnType: void
    signature: void AppendAMFShortStringBody(std::string* out, const char* name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:106,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:107,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:109,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - len
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: AppendAMFLongStringHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFLongStringHeader(std::string* out, uint32_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:114,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 2
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: AppendAMFObjectEnd
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - AppendAMFShortStringBody
    linkageType: ''
    returnType: void
    signature: void AppendAMFObjectEnd(std::string* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFObjectHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:120,1
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:122,1
    - Dst: AppendAMFObjectHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:123,1
    - Dst: AppendAMFObjectEnd
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 118
    functionDepth: 3
    functionLinenumber: 118
    functionLinenumberEnd: 129
    functionName: MakeNestedAMFObject
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - AppendAMFObjectEnd
    - AppendAMFShortStringBody
    - AppendAMFObjectHeader
    linkageType: ''
    returnType: std::string
    signature: std::string MakeNestedAMFObject(int depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFEcmaArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:133,1
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:135,1
    - Dst: AppendAMFEcmaArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 131
    functionDepth: 2
    functionLinenumber: 131
    functionLinenumberEnd: 139
    functionName: MakeNestedAMFEcmaArray
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - AppendAMFShortStringBody
    - AppendAMFEcmaArrayHeader
    linkageType: ''
    returnType: std::string
    signature: std::string MakeNestedAMFEcmaArray(int depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    functionName: ScopedAMFMaxDepth::ScopedAMFMaxDepth
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedAMFMaxDepth(int32_t depth)
  - 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: ~ScopedAMFMaxDepth()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedAMFMaxDepth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - flag
    - value
    argTypes:
    - int32_t*
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 68
    functionName: ScopedAMFLimit::ScopedAMFLimit
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedAMFLimit(int32_t* flag, int32_t value)
  - 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: ~ScopedAMFLimit()
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedAMFLimit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:79,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:80,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:81,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:82,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - count
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 84
    functionName: AppendAMFStrictArrayHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFStrictArrayHeader(std::string* out, uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: AppendAMFObjectHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFObjectHeader(std::string* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:91,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:93,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:94,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - count
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 96
    functionName: AppendAMFEcmaArrayHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFEcmaArrayHeader(std::string* out, uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:99,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:100,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:101,1
    - Dst: std::string*::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - out
    - name
    argTypes:
    - std::string*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 103
    functionName: AppendAMFShortStringBody
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 3
    functionsReached:
    - std::string*::append
    - std::string*::push_back
    - strlen
    linkageType: ''
    returnType: void
    signature: void AppendAMFShortStringBody(std::string* out, const char* name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:106,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:107,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:109,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - len
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: AppendAMFLongStringHeader
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendAMFLongStringHeader(std::string* out, uint32_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:114,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 113
    functionDepth: 2
    functionLinenumber: 113
    functionLinenumberEnd: 116
    functionName: AppendAMFObjectEnd
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string*::push_back
    - AppendAMFShortStringBody
    linkageType: ''
    returnType: void
    signature: void AppendAMFObjectEnd(std::string* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFObjectHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:120,1
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:122,1
    - Dst: AppendAMFObjectHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:123,1
    - Dst: AppendAMFObjectEnd
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:126,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 118
    functionDepth: 3
    functionLinenumber: 118
    functionLinenumberEnd: 129
    functionName: MakeNestedAMFObject
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - AppendAMFObjectEnd
    - AppendAMFShortStringBody
    - AppendAMFObjectHeader
    linkageType: ''
    returnType: std::string
    signature: std::string MakeNestedAMFObject(int depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFEcmaArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:133,1
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:135,1
    - Dst: AppendAMFEcmaArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:136,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 131
    functionDepth: 2
    functionLinenumber: 131
    functionLinenumberEnd: 139
    functionName: MakeNestedAMFEcmaArray
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - AppendAMFShortStringBody
    - AppendAMFEcmaArrayHeader
    linkageType: ''
    returnType: std::string
    signature: std::string MakeNestedAMFEcmaArray(int depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 150
    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:152,1
    - Dst: assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:153,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 154
    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: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: 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:159,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:160,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_rtmp_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: 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:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:166,1
    - Dst: TestRtmpClientStream::assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 168
    functionName: TestRtmpClientStream::assertions_on_failure
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRtmpClientStream::assertions_on_stop
    - ASSERT_EQ
    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: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    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: 174
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 174
    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:178,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:178,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 1
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: TestRtmpClientStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:184,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:184,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 186
    functionName: TestRtmpClientStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnAudioMessage(brpc::RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:201,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 202
    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:204,1
    - Dst: assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp: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: ~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:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 209
    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: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    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: 215
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 215
    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: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    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:222,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:222,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 224
    functionName: TestRtmpRetryingClientStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:227,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:227,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 229
    functionName: TestRtmpRetryingClientStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnAudioMessage(brpc::RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sleep_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 248
    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:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 251
    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:256,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:256,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:256,1
    - Dst: butil::Status*::set_error
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:262,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:266,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:268,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:270,1
    - Dst: butil::Status*::set_error
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:273,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:277,1
    - Dst: bthread_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:279,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:280,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:282,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: 285
      start: 252
    functionDepth: 1
    functionLinenumber: 252
    functionLinenumberEnd: 285
    functionName: PlayingDummyStream::OnPlay
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - bthread_usleep
    - remote_side
    - compare_exchange_strong
    - stream_id
    - CHECK
    - butil::Status*::set_error
    - LOG
    - bthread_stop
    - bthread_start_background
    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:288,1
    - Dst: exchange
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:289,1
    - Dst: bthread_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:290,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:291,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 293
    functionName: PlayingDummyStream::OnStop
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_stop
    - exchange
    - bthread_join
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyStream::SendData
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 301
    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:309,1
    - Dst: bthread_stopped
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:316,1
    - Dst: bthread_self
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:316,1
    - Dst: brpc::RtmpVideoMessage::data::clear
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:322,1
    - Dst: brpc::RtmpVideoMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:323,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:323,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:324,1
    - Dst: SendVideoMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:326,1
    - Dst: brpc::RtmpAudioMessage::data::clear
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:332,1
    - Dst: brpc::RtmpAudioMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:333,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:333,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:334,1
    - Dst: SendAudioMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:335,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 341
    functionName: PlayingDummyStream::SendData
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_usleep
    - bthread_stopped
    - stream_id
    - brpc::RtmpVideoMessage::data::append
    - LOG
    - SendVideoMessage
    - brpc::RtmpAudioMessage::data::clear
    - SendAudioMessage
    - butil::string_printf
    - bthread_self
    - brpc::RtmpVideoMessage::data::clear
    - brpc::RtmpAudioMessage::data::append
    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: 345
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 345
    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:351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 349
    functionDepth: 2
    functionLinenumber: 349
    functionLinenumberEnd: 352
    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:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sleep_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 365
    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:367,1
    - Dst: assertions_on_stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:368,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 369
    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:371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 372
    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:378,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:378,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:378,1
    - Dst: brpc::RtmpPublishType2Str
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:380,1
    - Dst: butil::Status*::set_error
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:383,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:387,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:389,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: 391
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 391
    functionName: PublishStream::OnPublish
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpPublishType2Str
    - bthread_usleep
    - remote_side
    - stream_id
    - butil::Status*::set_error
    - 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: 394
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 394
    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:396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 398
    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:402,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:402,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 404
    functionName: PublishStream::OnVideoMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void OnVideoMessage(brpc::RtmpVideoMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:408,1
    - Dst: remote_side
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:408,1
    - Dst: stream_id
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 410
    functionName: PublishStream::OnAudioMessage
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    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:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 423
    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: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: ~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:429,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:430,1
    - Dst: std::vector<butil::intrusive_ptr<PublishStream> >*::swap
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:431,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - out
    argTypes:
    - std::vector<butil::intrusive_ptr<PublishStream> >*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 432
    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:438,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:440,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:441,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 436
    functionDepth: 2
    functionLinenumber: 436
    functionLinenumberEnd: 444
    functionName: PublishService::NewStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - PublishStream::PublishStream
    - push_back
    - 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: 453
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 453
    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:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 467
    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:470,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - obj
    - ' name'
    argTypes:
    - brpc::RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 471
    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:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 473
    functionDepth: 1
    functionLinenumber: 473
    functionLinenumberEnd: 475
    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:478,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 477
    functionDepth: 1
    functionLinenumber: 477
    functionLinenumberEnd: 479
    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:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 481
    functionDepth: 1
    functionLinenumber: 481
    functionLinenumberEnd: 483
    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:486,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 487
    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: 507
      start: 506
    functionDepth: 0
    functionLinenumber: 506
    functionLinenumberEnd: 507
    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: 509
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 509
    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:514,1
    - Dst: RtmpSubStream::RtmpSubStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:514,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: 517
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 517
    functionName: RtmpSubStreamCreator::NewSubStream
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset
    - RtmpSubStream::RtmpSubStream
    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:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sub_stream
    - options
    argTypes:
    - brpc::RtmpStreamBase*
    - brpc::RtmpRetryingClientStreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 519
    functionDepth: 0
    functionLinenumber: 519
    functionLinenumberEnd: 524
    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:533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:536,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:539,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:544,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:547,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:555,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:563,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:571,1
    - Dst: brpc::ParseRtmpURL
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:578,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:579,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 526
    functionDepth: 1
    functionLinenumber: 526
    functionLinenumberEnd: 580
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::ParseRtmpURL
    - ASSERT_TRUE
    - butil::StringPiece::empty
    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:590,1
    - Dst: brpc::WriteAMFUint32
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:591,1
    - Dst: brpc::RtmpInfo::set_code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:592,1
    - Dst: brpc::RtmpInfo::set_level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:593,1
    - Dst: brpc::RtmpInfo::set_description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:594,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:595,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:596,1
    - Dst: brpc::AMFOutputStream::good
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:596,1
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:597,1
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:598,1
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:599,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:600,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:601,1
    - Dst: brpc::AMFOutputStream::good
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:601,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:604,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:604,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:607,1
    - Dst: brpc::ReadAMFString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:608,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:610,1
    - Dst: brpc::ReadAMFUint32
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:611,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:613,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:614,1
    - Dst: brpc::RtmpInfo::code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:614,1
    - Dst: brpc::RtmpInfo::code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:615,1
    - Dst: brpc::RtmpInfo::level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:615,1
    - Dst: brpc::RtmpInfo::level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:616,1
    - Dst: brpc::RtmpInfo::description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:616,1
    - Dst: brpc::RtmpInfo::description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:616,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:618,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:619,1
    - Dst: brpc::RtmpInfo::code
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:619,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:620,1
    - Dst: brpc::RtmpInfo::level
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:621,1
    - Dst: brpc::RtmpInfo::description
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:621,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 622
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFOutputStream::good
    - brpc::ReadAMFUint32
    - brpc::WriteAMFObject
    - ASSERT_TRUE
    - std::string::size
    - brpc::RtmpInfo::level
    - brpc::AMFObject::SetString
    - brpc::ReadAMFObject
    - brpc::ReadAMFString
    - brpc::WriteAMFString
    - brpc::RtmpInfo::set_description
    - brpc::RtmpInfo::set_code
    - ASSERT_EQ
    - std::string::data
    - brpc::WriteAMFUint32
    - brpc::RtmpInfo::description
    - brpc::RtmpInfo::code
    - brpc::RtmpInfo::set_level
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFLongStringHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:626,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:627,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:629,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:629,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:632,1
    - Dst: brpc::ReadAMFString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:632,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:633,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:633,1
    - Dst: AppendAMFLongStringHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:637,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:638,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:640,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:641,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:643,1
    - Dst: brpc::ReadAMFString
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 624
    functionDepth: 1
    functionLinenumber: 624
    functionLinenumberEnd: 644
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::empty
    - std::string::append
    - brpc::ReadAMFString
    - EXPECT_TRUE
    - AppendAMFLongStringHeader
    - std::string::data
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf_rejects_oversized_string_before_growing_output)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFEcmaArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:650,1
    - Dst: AppendAMFShortStringBody
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:651,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:652,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:654,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:654,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:657,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:657,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 658
      start: 646
    functionDepth: 2
    functionLinenumber: 646
    functionLinenumberEnd: 658
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::push_back
    - brpc::ReadAMFObject
    - EXPECT_FALSE
    - std::string::data
    - AppendAMFShortStringBody
    - std::string::size
    - AppendAMFEcmaArrayHeader
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf_rejects_oversized_ecma_array_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFStrictArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:664,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:665,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:667,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:667,1
    - Dst: brpc::AMFArray::AMFArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:669,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:670,1
    - Dst: brpc::ReadAMFArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:670,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:671,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:671,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 660
    functionDepth: 1
    functionLinenumber: 660
    functionLinenumberEnd: 672
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::AMFArray::AMFArray
    - brpc::AMFArray::size
    - std::string::push_back
    - AppendAMFStrictArrayHeader
    - std::string::data
    - brpc::ReadAMFArray
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf_rejects_oversized_strict_array_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AppendAMFStrictArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:679,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:681,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:683,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:683,1
    - Dst: brpc::AMFArray::AMFArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:685,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:686,1
    - Dst: brpc::ReadAMFArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:686,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:688,1
    - Dst: AppendAMFStrictArrayHeader
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:690,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:692,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:694,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:694,1
    - Dst: brpc::AMFArray::AMFArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:696,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:697,1
    - Dst: brpc::ReadAMFArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:697,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 674
    functionDepth: 1
    functionLinenumber: 674
    functionLinenumberEnd: 698
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFArray::AMFArray
    - std::string::push_back
    - AppendAMFStrictArrayHeader
    - EXPECT_TRUE
    - std::string::data
    - brpc::ReadAMFArray
    - std::string::clear
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf_rejects_deep_nested_arrays)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeNestedAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:703,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:704,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:704,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:707,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:707,1
    - Dst: MakeNestedAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:709,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:710,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:710,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:713,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 700
    functionDepth: 4
    functionLinenumber: 700
    functionLinenumberEnd: 714
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ReadAMFObject
    - EXPECT_TRUE
    - std::string::data
    - MakeNestedAMFObject
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf_rejects_deep_nested_objects)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeNestedAMFEcmaArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:719,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:720,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:720,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:723,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:723,1
    - Dst: MakeNestedAMFEcmaArray
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:725,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:726,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:726,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:729,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:729,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 716
    functionDepth: 3
    functionLinenumber: 716
    functionLinenumberEnd: 730
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - MakeNestedAMFEcmaArray
    - brpc::ReadAMFObject
    - EXPECT_TRUE
    - std::string::data
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, amf_rejects_deep_nested_ecma_arrays)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:738,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:740,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:742,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:744,1
    - Dst: brpc::AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:746,1
    - Dst: brpc::AVCDecoderConfigurationRecord::Create
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:748,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 749
      start: 736
    functionDepth: 1
    functionLinenumber: 736
    functionLinenumberEnd: 749
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord
    - butil::IOBuf::IOBuf
    - brpc::AVCDecoderConfigurationRecord::Create
    - butil::IOBuf::append
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, avc_seq_header_sps_without_zero_byte)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:752,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:753,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:754,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - s
    - v
    argTypes:
    - std::string*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 755
      start: 751
    functionDepth: 0
    functionLinenumber: 751
    functionLinenumberEnd: 755
    functionName: AppendBigEndian3Bytes
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    linkageType: ''
    returnType: void
    signature: void AppendBigEndian3Bytes(std::string* s, uint32_t v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:763,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:764,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:765,1
    - Dst: AppendBigEndian3Bytes
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:766,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:767,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:768,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:769,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:770,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 2
    argNames:
    - tag_type
    - data_size
    argTypes:
    - char
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 760
    functionDepth: 1
    functionLinenumber: 760
    functionLinenumberEnd: 772
    functionName: MakeFlvTagWithDataSize
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - AppendBigEndian3Bytes
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string MakeFlvTagWithDataSize(char tag_type, uint32_t data_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeFlvTagWithDataSize
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:775,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:776,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:777,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:781,1
    - Dst: brpc::FlvReader::PeekMessageType
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:781,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:782,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:783,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:788,1
    - Dst: brpc::FlvReader::Read
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:788,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:789,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:789,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 774
    functionDepth: 2
    functionLinenumber: 774
    functionLinenumberEnd: 790
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::FlvReader::Read
    - ASSERT_TRUE
    - butil::IOBuf::append
    - ASSERT_EQ
    - MakeFlvTagWithDataSize
    - butil::IOBuf::size
    - brpc::FlvReader::PeekMessageType
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, flv_reader_rejects_zero_datasize_video_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeFlvTagWithDataSize
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:793,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:794,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:795,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:799,1
    - Dst: brpc::FlvReader::PeekMessageType
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:799,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:800,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:801,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:804,1
    - Dst: brpc::FlvReader::Read
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:804,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:805,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:805,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 792
    functionDepth: 2
    functionLinenumber: 792
    functionLinenumberEnd: 806
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::FlvReader::Read
    - ASSERT_TRUE
    - butil::IOBuf::append
    - ASSERT_EQ
    - MakeFlvTagWithDataSize
    - butil::IOBuf::size
    - brpc::FlvReader::PeekMessageType
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST(RtmpTest, flv_reader_rejects_zero_datasize_audio_tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: PlayingDummyService::PlayingDummyService
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:809,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:810,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:811,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:813,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:813,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:815,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:819,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:820,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:820,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:826,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:826,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:827,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:828,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:831,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:833,1
    - Dst: assertions_on_successful_play
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:835,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:837,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 838
      start: 808
    functionDepth: 2
    functionLinenumber: 808
    functionLinenumberEnd: 838
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::RtmpClient::Init
    - sleep
    - assertions_on_successful_play
    - brpc::Server::Start
    - Init
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - PlayingDummyService::PlayingDummyService
    - brpc::RtmpClient::RtmpClient
    - TestRtmpClientStream::TestRtmpClientStream
    - reset
    - butil::string_printf
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - brpc::ServerOptions::ServerOptions
    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:841,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:842,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:845,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:845,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:847,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:852,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:852,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:858,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:858,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:859,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:862,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:864,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:866,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:868,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 869
      start: 840
    functionDepth: 2
    functionLinenumber: 840
    functionLinenumberEnd: 869
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::RtmpClient::Init
    - sleep
    - brpc::Server::Start
    - Init
    - assertions_on_failure
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - PlayingDummyService::PlayingDummyService
    - brpc::RtmpClient::RtmpClient
    - TestRtmpClientStream::TestRtmpClientStream
    - reset
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - brpc::ServerOptions::ServerOptions
    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:872,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:873,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:874,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:876,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:876,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:878,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:882,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:883,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:883,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:889,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:889,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:890,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:891,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:893,1
    - Dst: brpc::RtmpVideoMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:901,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:901,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:903,1
    - Dst: SendVideoMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:903,1
    - Dst: brpc::RtmpAudioMessage::data::append
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:912,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:912,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:914,1
    - Dst: SendAudioMessage
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:914,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:917,1
    - Dst: PublishService::move_created_streams
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:920,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:921,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:921,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:926,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:929,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:931,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 44
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 871
    functionDepth: 2
    functionLinenumber: 871
    functionLinenumberEnd: 932
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - std::vector::size
    - brpc::RtmpClient::RtmpClient
    - TestRtmpClientStream::TestRtmpClientStream
    - PublishService::PublishService
    - brpc::RtmpAudioMessage::data::append
    - brpc::RtmpClient::Init
    - brpc::RtmpVideoMessage::data::append
    - SendVideoMessage
    - SendAudioMessage
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::RtmpClientOptions::RtmpClientOptions
    - reset
    - PublishService::move_created_streams
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - bthread_usleep
    - Init
    - butil::string_printf
    - brpc::ServerOptions::ServerOptions
    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:935,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:936,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:937,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:939,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:939,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:941,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:945,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:946,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:946,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:952,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:952,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:953,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:956,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:958,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:960,1
    - Dst: PublishService::move_created_streams
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:963,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:964,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:964,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:966,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:968,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:970,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 934
    functionDepth: 2
    functionLinenumber: 934
    functionLinenumberEnd: 971
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::RtmpClient::Init
    - sleep
    - brpc::Server::Start
    - Init
    - assertions_on_failure
    - LOG
    - ASSERT_EQ
    - PublishService::PublishService
    - brpc::RtmpClientOptions::RtmpClientOptions
    - std::vector::size
    - brpc::RtmpClient::RtmpClient
    - TestRtmpClientStream::TestRtmpClientStream
    - reset
    - PublishService::move_created_streams
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - brpc::ServerOptions::ServerOptions
    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:974,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:979,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:979,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:985,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:985,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:986,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:987,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:989,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:990,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:992,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 993
      start: 973
    functionDepth: 2
    functionLinenumber: 973
    functionLinenumberEnd: 993
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpClient::Init
    - Init
    - assertions_on_failure
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClient::RtmpClient
    - butil::string_printf
    - reset
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    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:996,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1001,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1001,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1007,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1007,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1008,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1010,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1011,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1012,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1014,1
    - Dst: assertions_on_failure
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1015,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1017,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1018
      start: 995
    functionDepth: 2
    functionLinenumber: 995
    functionLinenumberEnd: 1018
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpClient::Init
    - Destroy
    - Init
    - assertions_on_failure
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - brpc::RtmpClient::RtmpClient
    - butil::string_printf
    - reset
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - TestRtmpClientStream::TestRtmpClientStream
    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:1021,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1025,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1026,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1026,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1032,1
    - Dst: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1032,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1033,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1034,1
    - Dst: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1035,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1036,1
    - Dst: RtmpSubStreamCreator::RtmpSubStreamCreator
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1037,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1038,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1039,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1041,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 1020
    functionDepth: 2
    functionLinenumber: 1020
    functionLinenumberEnd: 1042
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    - brpc::RtmpClient::Init
    - Destroy
    - brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    - Init
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - RtmpSubStreamCreator::RtmpSubStreamCreator
    - brpc::RtmpClient::RtmpClient
    - butil::string_printf
    - reset
    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:1046,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1047,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1049,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1049,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1051,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1055,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1056,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1056,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1062,1
    - Dst: TestRtmpClientStream::TestRtmpClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1062,1
    - Dst: brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1063,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1064,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1065,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1066,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1068,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1069,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1070,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1071,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1073,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1074
      start: 1044
    functionDepth: 2
    functionLinenumber: 1044
    functionLinenumberEnd: 1074
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::RtmpClient::Init
    - Destroy
    - brpc::Server::Start
    - Init
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - usleep
    - brpc::RtmpClient::RtmpClient
    - TestRtmpClientStream::TestRtmpClientStream
    - reset
    - butil::string_printf
    - brpc::RtmpClientStreamOptions::RtmpClientStreamOptions
    - brpc::ServerOptions::ServerOptions
    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:1078,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1081,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1081,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1083,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1088,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1088,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1094,1
    - Dst: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1094,1
    - Dst: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1095,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1096,1
    - Dst: RtmpSubStreamCreator::RtmpSubStreamCreator
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1097,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1099,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1101,1
    - Dst: Destroy
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1102,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1104,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1076
    functionDepth: 2
    functionLinenumber: 1076
    functionLinenumberEnd: 1107
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::RtmpClient::Init
    - TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    - brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    - Destroy
    - brpc::Server::Start
    - Init
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClientOptions::RtmpClientOptions
    - RtmpSubStreamCreator::RtmpSubStreamCreator
    - usleep
    - brpc::RtmpClient::RtmpClient
    - butil::string_printf
    - reset
    - brpc::ServerOptions::ServerOptions
    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:1110,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1111,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1112,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1114,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1114,1
    - Dst: brpc::RtmpClientOptions::RtmpClientOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1116,1
    - Dst: brpc::RtmpClient::RtmpClient
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1121,1
    - Dst: brpc::RtmpClient::Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1121,1
    - Dst: reset
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1127,1
    - Dst: TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1127,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1128,1
    - Dst: brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1129,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1130,1
    - Dst: RtmpSubStreamCreator::RtmpSubStreamCreator
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1131,1
    - Dst: Init
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1132,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1134,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1135,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1136,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1137,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1138,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1140,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1140,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1144,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_rtmp_unittest.cpp:1146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1147
      start: 1109
    functionDepth: 2
    functionLinenumber: 1109
    functionLinenumberEnd: 1147
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_rtmp_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::RtmpClient::RtmpClient
    - brpc::Server::Join
    - TestRtmpRetryingClientStream::TestRtmpRetryingClientStream
    - brpc::RtmpClient::Init
    - brpc::Controller::Controller
    - RtmpSubStreamCreator::RtmpSubStreamCreator
    - brpc::Server::Stop
    - brpc::Server::Server
    - sleep
    - brpc::Server::Start
    - brpc::RtmpClientOptions::RtmpClientOptions
    - reset
    - brpc::RtmpRetryingClientStreamOptions::RtmpRetryingClientStreamOptions
    - Init
    - PlayingDummyService::PlayingDummyService
    - butil::string_printf
    - brpc::ServerOptions::ServerOptions
    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_FALSE
    - ASSERT_TRUE
    - brpc::Str2HttpMethod
    - ASSERT_EQ
    - ASSERT_STREQ
    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_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - butil::IOBuf::size
    - 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:
    - content_type
    - GetHeader
    - minor_version
    - strlen
    - ASSERT_TRUE
    - major_version
    - method
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - ASSERT_STREQ
    - status_code
    - reason_phrase
    - brpc::HttpMessage::HttpMessage
    - brpc::HttpMessage::header
    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:
    - content_type
    - GetHeader
    - minor_version
    - strlen
    - ASSERT_TRUE
    - brpc::HttpReasonPhrase
    - major_version
    - method
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - ASSERT_STREQ
    - status_code
    - reason_phrase
    - brpc::HttpMessage::HttpMessage
    - brpc::HttpMessage::header
    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
    - strlen
    - brpc::HttpMessage::HttpMessage
    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_FALSE
    - strlen
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::HttpMessage
    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:
    - brpc::HttpMessage::header
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - butil::IOBuf::push_back
    - ASSERT_EQ
    - snprintf
    - brpc::HttpMessage::body
    - 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::ParseFromIOBuf
    - brpc::HttpMessage::stage
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::header
    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:
    - brpc::HttpMessage::header
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - ASSERT_NE
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - butil::IOBuf::size
    - 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::ParseFromIOBuf
    - brpc::HttpMessage::stage
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::header
    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:
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::size
    - 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_FALSE
    - ASSERT_TRUE
    - brpc::Server::AddService
    - brpc::Server::Start
    - test::EchoService::EchoService
    - ASSERT_EQ
    - brpc::Server::MethodProperty*::method::full_name
    - FindMethodPropertyByURI
    - brpc::Server::MethodProperty*::method::service
    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:
    - brpc::HttpHeader::GetAllSetCookieHeader
    - brpc::HttpHeader::reason_phrase
    - ASSERT_EQ
    - std::vector::size
    - brpc::HttpHeader::method
    - ASSERT_FALSE
    - brpc::HttpHeader::set_status_code
    - ASSERT_TRUE
    - brpc::HttpHeader::GetHeader
    - brpc::HttpHeader::HeaderEnd
    - ASSERT_STREQ
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::IsSetCookie
    - brpc::HttpHeader::content_type
    - brpc::HttpHeader::major_version
    - brpc::HttpReasonPhrase
    - brpc::HttpHeader::minor_version
    - brpc::HttpHeader::set_version
    - brpc::HttpHeader::status_code
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::set_content_type
    - brpc::HttpHeader::HttpHeader
    - brpc::HttpHeader::AppendHeader
    - brpc::HttpHeader::HeaderBegin
    - brpc::HttpHeader::RemoveHeader
    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
    - butil::EndPoint::EndPoint
    - ASSERT_FALSE
    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:
    - brpc::HttpHeader::HeaderCount
    - MakeRawHttpRequest
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - butil::IOBuf::IOBuf
    - brpc::HttpHeader::SetHeader
    - butil::str2endpoint
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    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::set_status_code
    - CHECK
    - MakeRawHttpResponse
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    - brpc::HttpHeader::RemoveHeader
    - butil::ToPrintable::ToPrintable
    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:
    - brpc::HttpMessage::header
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - ASSERT_GE
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - 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_FALSE
    - ASSERT_TRUE
    - brpc::Str2HttpMethod
    - ASSERT_EQ
    - ASSERT_STREQ
    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_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - butil::IOBuf::size
    - 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:
    - content_type
    - GetHeader
    - minor_version
    - strlen
    - ASSERT_TRUE
    - major_version
    - method
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - ASSERT_STREQ
    - status_code
    - reason_phrase
    - brpc::HttpMessage::HttpMessage
    - brpc::HttpMessage::header
    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:
    - content_type
    - GetHeader
    - minor_version
    - strlen
    - ASSERT_TRUE
    - brpc::HttpReasonPhrase
    - major_version
    - method
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - ASSERT_STREQ
    - status_code
    - reason_phrase
    - brpc::HttpMessage::HttpMessage
    - brpc::HttpMessage::header
    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
    - strlen
    - brpc::HttpMessage::HttpMessage
    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_FALSE
    - strlen
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromArray
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::HttpMessage
    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:
    - brpc::HttpMessage::header
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - butil::IOBuf::push_back
    - ASSERT_EQ
    - snprintf
    - brpc::HttpMessage::body
    - 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::ParseFromIOBuf
    - brpc::HttpMessage::stage
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::header
    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:
    - brpc::HttpMessage::header
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - ASSERT_NE
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - butil::IOBuf::size
    - 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::ParseFromIOBuf
    - brpc::HttpMessage::stage
    - ASSERT_NE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::Completed
    - brpc::HttpMessage::header
    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:
    - brpc::HttpMessage::ParseFromIOBuf
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::size
    - 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_FALSE
    - ASSERT_TRUE
    - brpc::Server::AddService
    - brpc::Server::Start
    - test::EchoService::EchoService
    - ASSERT_EQ
    - brpc::Server::MethodProperty*::method::full_name
    - FindMethodPropertyByURI
    - brpc::Server::MethodProperty*::method::service
    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:
    - brpc::HttpHeader::GetAllSetCookieHeader
    - brpc::HttpHeader::reason_phrase
    - ASSERT_EQ
    - std::vector::size
    - brpc::HttpHeader::method
    - ASSERT_FALSE
    - brpc::HttpHeader::set_status_code
    - ASSERT_TRUE
    - brpc::HttpHeader::GetHeader
    - brpc::HttpHeader::HeaderEnd
    - ASSERT_STREQ
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::IsSetCookie
    - brpc::HttpHeader::content_type
    - brpc::HttpHeader::major_version
    - brpc::HttpReasonPhrase
    - brpc::HttpHeader::minor_version
    - brpc::HttpHeader::set_version
    - brpc::HttpHeader::status_code
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::set_content_type
    - brpc::HttpHeader::HttpHeader
    - brpc::HttpHeader::AppendHeader
    - brpc::HttpHeader::HeaderBegin
    - brpc::HttpHeader::RemoveHeader
    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
    - butil::EndPoint::EndPoint
    - ASSERT_FALSE
    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:
    - brpc::HttpHeader::HeaderCount
    - MakeRawHttpRequest
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - butil::IOBuf::IOBuf
    - brpc::HttpHeader::SetHeader
    - butil::str2endpoint
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    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::set_status_code
    - CHECK
    - MakeRawHttpResponse
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::set_method
    - brpc::HttpHeader::HttpHeader
    - brpc::HttpHeader::RemoveHeader
    - butil::ToPrintable::ToPrintable
    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:
    - brpc::HttpMessage::header
    - ASSERT_TRUE
    - brpc::HttpMessage::ParseFromIOBuf
    - ASSERT_GE
    - butil::IOBuf::append
    - brpc::HttpMessage::Completed
    - ASSERT_EQ
    - brpc::HttpMessage::ParseFromArray
    - 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::Bind
    - EXPECT_EQ
    - butil::Unretained
    - butil::BarrierClosure
    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::Unretained
    - EXPECT_EQ
    - butil::BarrierClosure
    - butil::Bind
    - butil::Closure::Run
    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::Bind
    - EXPECT_EQ
    - butil::Unretained
    - butil::BarrierClosure
    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::Unretained
    - EXPECT_EQ
    - butil::BarrierClosure
    - butil::Bind
    - butil::Closure::Run
    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
    - bthread::butex_wait
    - clock_gettime
    - ASSERT_EQ
    - bthread::butex_create_checked<uint32_t>
    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:
    - labs
    - bthread_join
    - butil::gettimeofday_us
    - EXPECT_LE
    - EXPECT_EQ
    - LOG
    - bthread_self
    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:
    - pthread_create
    - bthread_join
    - berror
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - EXPECT_EQ
    - butil::gettimeofday_us
    - bthread::butex_wait
    - LOG
    - bthread_self
    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:
    - sleep
    - butil::seconds_from_now
    - pthread_create
    - WaiterArg::WaiterArg
    - ASSERT_TRUE
    - bthread::butex_wake
    - bthread::butex_destroy
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - EXPECT_EQ
    - static_cast<ButexWaitArg*>
    - butil::milliseconds_from_now
    - bthread::butex_wait
    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:
    - butil::Timer::stop
    - bthread_join
    - labs
    - bthread::butex_create_checked<int>
    - bthread::butex_destroy
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - labs
    - bthread::butex_create_checked<int>
    - bthread::butex_destroy
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread::butex_create_checked<int>
    - bthread::butex_destroy
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_background
    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:
    - bthread_join
    - EXPECT_EQ
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - ASSERT_TRUE
    - bthread::butex_create_checked<int>
    - bthread::TaskGroup::exists
    - bthread::butex_destroy
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - labs
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - labs
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - labs
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_background
    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:
    - usleep
    - butil::gettimeofday_us
    - LOG
    - bthread::interrupt_pthread
    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:
    - pthread_create
    - butil::Timer::stop
    - labs
    - ASSERT_TRUE
    - pthread_join
    - butil::milliseconds_from_now
    - bthread::butex_wake
    - bthread::butex_create_checked<butil::atomic<int> >
    - LOG
    - ASSERT_EQ
    - bthread::butex_destroy
    - butil::Timer::start
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    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
    - bthread::butex_wait
    - clock_gettime
    - ASSERT_EQ
    - bthread::butex_create_checked<uint32_t>
    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:
    - labs
    - bthread_join
    - butil::gettimeofday_us
    - EXPECT_LE
    - EXPECT_EQ
    - LOG
    - bthread_self
    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:
    - pthread_create
    - bthread_join
    - berror
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - EXPECT_EQ
    - butil::gettimeofday_us
    - bthread::butex_wait
    - LOG
    - bthread_self
    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:
    - sleep
    - butil::seconds_from_now
    - pthread_create
    - WaiterArg::WaiterArg
    - ASSERT_TRUE
    - bthread::butex_wake
    - bthread::butex_destroy
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - EXPECT_EQ
    - static_cast<ButexWaitArg*>
    - butil::milliseconds_from_now
    - bthread::butex_wait
    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:
    - butil::Timer::stop
    - bthread_join
    - labs
    - bthread::butex_create_checked<int>
    - bthread::butex_destroy
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - labs
    - bthread::butex_create_checked<int>
    - bthread::butex_destroy
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread::butex_create_checked<int>
    - bthread::butex_destroy
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_background
    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:
    - bthread_join
    - EXPECT_EQ
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - ASSERT_TRUE
    - bthread::butex_create_checked<int>
    - bthread::TaskGroup::exists
    - bthread::butex_destroy
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - bthread_usleep
    - labs
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - labs
    - ASSERT_EQ
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:
    - butil::Timer::stop
    - bthread_join
    - labs
    - ASSERT_EQ
    - bthread_flush
    - butil::Timer::start
    - ASSERT_LT
    - bthread_stop
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_background
    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:
    - usleep
    - butil::gettimeofday_us
    - LOG
    - bthread::interrupt_pthread
    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:
    - pthread_create
    - butil::Timer::stop
    - labs
    - ASSERT_TRUE
    - pthread_join
    - butil::milliseconds_from_now
    - bthread::butex_wake
    - bthread::butex_create_checked<butil::atomic<int> >
    - LOG
    - ASSERT_EQ
    - bthread::butex_destroy
    - butil::Timer::start
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    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:
    - begin
    - size
    - end
    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: std::set::insert
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:83,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      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: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:88,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:89,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:90,1
    - Dst: std::vector::size
      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: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:96,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:103,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:110,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:111,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:111,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:112,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:112,1
    - Dst: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:112,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:114,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:126,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:126,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:128,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:128,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:133,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:133,1
    - Dst: butil::TempFile::fname
      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: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:143,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:146,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:146,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:147,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:147,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:147,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 153
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::FileNamingService::GetServers
    - ASSERT_EQ
    - butil::TempFile::fname
    - std::vector::size
    - IsIPListEqual
    - ASSERT_TRUE
    - collect_ips
    - fopen
    - butil::TempFile::TempFile
    - std::string::c_str
    - fclose
    - std::set::insert
    - std::ostringstream::str
    - brpc::policy::ListNamingService::GetServers
    - brpc::policy::DomainNamingService::DomainNamingService
    - ARRAY_SIZE
    - fprintf
    - ASSERT_GE
    - brpc::policy::BaiduNamingService::GetServers
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:160,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:160,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:164,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:166,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 167
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::BaiduNamingService::GetServers
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::DomainNamingService::DomainNamingService
    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:174,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:174,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:189,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:189,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:191,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:191,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:197,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:201,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:204,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:204,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:205,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:205,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:205,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 206
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - butil::string_appendf
    - std::string::c_str
    - ASSERT_TRUE
    - fprintf
    - fclose
    - brpc::policy::FileNamingService::GetServers
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - brpc::policy::BaiduNamingService::GetServers
    - std::vector::size
    - butil::TempFile::TempFile
    - brpc::policy::ListNamingService::GetServers
    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: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    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: 211
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 211
    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:218,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:219,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:222,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: 223
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 223
    functionName: UserNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Controller*::response_attachment
    - 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:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 230
    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:237,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:239,1
    - Dst: brpc::Server::AddService
      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: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:240,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:241,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:247,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:247,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:249,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:249,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:253,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:253,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:254,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:254,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:255,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:255,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:266,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:267,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:267,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:267,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:268,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:268,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:268,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:270,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 272
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::policy::RemoteFileNamingService::GetServers
    - std::vector::push_back
    - brpc::Server::AddService
    - brpc::Server::Start
    - UserNamingServiceImpl::UserNamingServiceImpl
    - std::vector::end
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::ServerNode
    - butil::str2endpoint
    - std::vector::begin
    - std::vector::size
    - std::sort
    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: 277
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 277
    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: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    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:285,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:286,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:399,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: 400
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 400
    functionName: ConsulNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Controller*::response_attachment
    - 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:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 407
    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:422,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:423,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:425,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:425,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:429,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:435,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:436,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:436,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:436,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:443,1
    - Dst: ConsulNamingServiceImpl::ConsulNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:444,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:446,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:447,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:449,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:449,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: butil::EndPoint::EndPoint
      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: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:457,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:461,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:461,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:462,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:462,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:463,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:463,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:463,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:466,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:467,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:467,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:467,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:468,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:468,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:468,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 473
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::clear
    - ConsulNamingServiceImpl::ConsulNamingServiceImpl
    - std::string::append
    - brpc::policy::ConsulNamingService::GetServers
    - butil::TempFile::fname
    - ASSERT_EQ
    - std::vector::size
    - ASSERT_TRUE
    - std::vector::end
    - fopen
    - butil::TempFile::TempFile
    - brpc::Server::Server
    - std::string::c_str
    - std::vector::push_back
    - brpc::Server::Start
    - fclose
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - std::ostringstream::str
    - std::sort
    - ARRAY_SIZE
    - bthread_usleep
    - brpc::Server::AddService
    - fprintf
    - brpc::ServerNode
    - butil::str2endpoint
    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: 570
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 570
    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: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    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: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::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:587,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:588,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: 589
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 589
    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:596,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:597,1
    - Dst: brpc::QuerySplitter::key
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:599,1
    - Dst: insert
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:600,1
    - Dst: brpc::QuerySplitter::value
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:600,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:603,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: 608
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 608
    functionName: DiscoveryNamingServiceImpl::Register
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - brpc::QuerySplitter::key
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::QuerySplitter::value
    - brpc::Controller*::request_attachment
    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:615,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:616,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: 622
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 622
    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:629,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:630,1
    - Dst: clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:635,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: 637
      start: 624
    functionDepth: 1
    functionLinenumber: 624
    functionLinenumberEnd: 637
    functionName: DiscoveryNamingServiceImpl::Cancel
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::Controller*::response_attachment
    - 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: 639
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 639
    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: 640
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 640
    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:643,1
    - Dst: end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' addr'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 644
    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:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 645
      start: 645
    functionDepth: 0
    functionLinenumber: 645
    functionLinenumberEnd: 645
    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:657,1
    - Dst: DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:665,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:665,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:667,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:671,1
    - Dst: brpc::policy::DiscoveryNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:672,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:672,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:693,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:694,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:694,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:695,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:697,1
    - Dst: DiscoveryNamingServiceImpl::RenewCount
      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: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:698,1
    - Dst: ASSERT_FALSE
      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: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:707,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:707,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:708,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:708,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:709,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:709,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:710,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:710,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:711,1
    - Dst: DiscoveryNamingServiceImpl::AddrCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:711,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 654
    functionDepth: 1
    functionLinenumber: 654
    functionLinenumberEnd: 713
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
    - brpc::policy::DiscoveryClient::DiscoveryClient
    - ASSERT_FALSE
    - std::string::c_str
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::Server::Start
    - ASSERT_TRUE
    - std::string
    - DiscoveryNamingServiceImpl::AddrCount
    - DiscoveryNamingServiceImpl::CancelCount
    - brpc::policy::DiscoveryClient::Register
    - ASSERT_EQ
    - std::vector::size
    - DiscoveryNamingServiceImpl::HasAddr
    - DiscoveryNamingServiceImpl::RenewCount
    - brpc::policy::DiscoveryNamingService::GetServers
    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:721,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:724,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:725,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
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:740,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:741,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: 743
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 743
    functionName: NacosNamingServiceImpl::Login
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::SplitStringIntoKeyValuePairs
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_response
    - brpc::Controller*::request_attachment
    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:751,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:757,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:758,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:768,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:769,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:770,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:771,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:776,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:780,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:781,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: 812
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 812
    functionName: NacosNamingServiceImpl::List
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    - brpc::Controller*::http_response
    - brpc::Controller*::response_attachment
    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:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:818,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:821,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:821,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:823,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:826,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:826,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:827,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:838,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:839,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:840,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:844,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:846,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:846,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 848
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::Server::Start
    - brpc::policy::NacosNamingService::GetServers
    - ASSERT_NE
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::ServerNode
    - butil::str2endpoint
    - brpc::policy::NacosNamingService::NacosNamingService
    - 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:
    - begin
    - size
    - end
    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: std::set::insert
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:83,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      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: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:88,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:89,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:90,1
    - Dst: std::vector::size
      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: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:96,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:96,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:97,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:98,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:100,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:103,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:103,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:105,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:110,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:111,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:111,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:112,1
    - Dst: IsIPListEqual
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:112,1
    - Dst: collect_ips
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:112,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:114,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:124,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:126,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:126,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:127,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:128,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:128,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:130,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:133,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:133,1
    - Dst: butil::TempFile::fname
      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: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:134,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:138,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:143,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:146,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:146,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:147,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:147,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:147,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:151,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 153
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::FileNamingService::GetServers
    - ASSERT_EQ
    - butil::TempFile::fname
    - std::vector::size
    - IsIPListEqual
    - ASSERT_TRUE
    - collect_ips
    - fopen
    - butil::TempFile::TempFile
    - std::string::c_str
    - fclose
    - std::set::insert
    - std::ostringstream::str
    - brpc::policy::ListNamingService::GetServers
    - brpc::policy::DomainNamingService::DomainNamingService
    - ARRAY_SIZE
    - fprintf
    - ASSERT_GE
    - brpc::policy::BaiduNamingService::GetServers
    linkageType: ''
    returnType: void
    signature: void TEST(NamingServiceTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:160,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:160,1
    - Dst: brpc::policy::DomainNamingService::DomainNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:164,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:166,1
    - Dst: brpc::policy::DomainNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 155
    functionDepth: 1
    functionLinenumber: 155
    functionLinenumberEnd: 167
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::policy::BaiduNamingService::GetServers
    - brpc::policy::DomainNamingService::GetServers
    - brpc::policy::DomainNamingService::DomainNamingService
    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:174,1
    - Dst: brpc::policy::BaiduNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:174,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:187,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:189,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:189,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:191,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:191,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: brpc::policy::FileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:197,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:197,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:201,1
    - Dst: butil::string_appendf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:204,1
    - Dst: brpc::policy::ListNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:204,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:205,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:205,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:205,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 206
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - butil::string_appendf
    - std::string::c_str
    - ASSERT_TRUE
    - fprintf
    - fclose
    - brpc::policy::FileNamingService::GetServers
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - brpc::policy::BaiduNamingService::GetServers
    - std::vector::size
    - butil::TempFile::TempFile
    - brpc::policy::ListNamingService::GetServers
    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: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    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: 211
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 211
    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:218,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:219,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:222,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: 223
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 223
    functionName: UserNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Controller*::response_attachment
    - 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:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 230
    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:237,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:239,1
    - Dst: brpc::Server::AddService
      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: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:240,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:241,1
    - Dst: UserNamingServiceImpl::UserNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:244,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:247,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:247,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:249,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:249,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:251,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:252,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:253,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:253,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:254,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:254,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:255,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:255,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:260,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:261,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:266,1
    - Dst: brpc::policy::RemoteFileNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:267,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:267,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:267,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:268,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:268,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:268,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:270,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 272
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::policy::RemoteFileNamingService::GetServers
    - std::vector::push_back
    - brpc::Server::AddService
    - brpc::Server::Start
    - UserNamingServiceImpl::UserNamingServiceImpl
    - std::vector::end
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::ServerNode
    - butil::str2endpoint
    - std::vector::begin
    - std::vector::size
    - std::sort
    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: 277
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 277
    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: 278
      start: 278
    functionDepth: 0
    functionLinenumber: 278
    functionLinenumberEnd: 278
    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:285,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:286,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:399,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: 400
      start: 279
    functionDepth: 0
    functionLinenumber: 279
    functionLinenumberEnd: 400
    functionName: ConsulNamingServiceImpl::ListNames
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::Controller*::response_attachment
    - 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:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - done
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 407
    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:422,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:423,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:425,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:425,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:427,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:429,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:435,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:436,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:436,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:436,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:440,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:443,1
    - Dst: ConsulNamingServiceImpl::ConsulNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:444,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:446,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:447,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:449,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:449,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:452,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:454,1
    - Dst: butil::EndPoint::EndPoint
      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: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:457,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:459,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:461,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:461,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:462,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:462,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:463,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:463,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:463,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:466,1
    - Dst: brpc::policy::ConsulNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:467,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:467,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:467,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:468,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:468,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:468,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 473
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::clear
    - ConsulNamingServiceImpl::ConsulNamingServiceImpl
    - std::string::append
    - brpc::policy::ConsulNamingService::GetServers
    - butil::TempFile::fname
    - ASSERT_EQ
    - std::vector::size
    - ASSERT_TRUE
    - std::vector::end
    - fopen
    - butil::TempFile::TempFile
    - brpc::Server::Server
    - std::string::c_str
    - std::vector::push_back
    - brpc::Server::Start
    - fclose
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - std::ostringstream::str
    - std::sort
    - ARRAY_SIZE
    - bthread_usleep
    - brpc::Server::AddService
    - fprintf
    - brpc::ServerNode
    - butil::str2endpoint
    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: 570
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 570
    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: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    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: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::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:587,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:588,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: 589
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 589
    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:596,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:597,1
    - Dst: brpc::QuerySplitter::key
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:599,1
    - Dst: insert
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:600,1
    - Dst: brpc::QuerySplitter::value
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:600,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:603,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: 608
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 608
    functionName: DiscoveryNamingServiceImpl::Register
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - brpc::QuerySplitter::key
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::QuerySplitter::value
    - brpc::Controller*::request_attachment
    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:615,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:616,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: 622
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 622
    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:629,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:630,1
    - Dst: clear
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:635,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: 637
      start: 624
    functionDepth: 1
    functionLinenumber: 624
    functionLinenumberEnd: 637
    functionName: DiscoveryNamingServiceImpl::Cancel
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::Controller*::response_attachment
    - 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: 639
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 639
    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: 640
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 640
    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:643,1
    - Dst: end
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:643,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' addr'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 644
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 644
    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:645,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 645
      start: 645
    functionDepth: 0
    functionLinenumber: 645
    functionLinenumberEnd: 645
    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:657,1
    - Dst: DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:665,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:665,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:667,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:671,1
    - Dst: brpc::policy::DiscoveryNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:672,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:672,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:686,1
    - Dst: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:692,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:693,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:694,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:694,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:695,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:695,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:697,1
    - Dst: DiscoveryNamingServiceImpl::RenewCount
      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: DiscoveryNamingServiceImpl::CancelCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:698,1
    - Dst: ASSERT_FALSE
      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: brpc::policy::DiscoveryClient::DiscoveryClient
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:707,1
    - Dst: brpc::policy::DiscoveryClient::Register
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:707,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:708,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:708,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:709,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:709,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:710,1
    - Dst: DiscoveryNamingServiceImpl::HasAddr
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:710,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:711,1
    - Dst: DiscoveryNamingServiceImpl::AddrCount
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:711,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 713
      start: 654
    functionDepth: 1
    functionLinenumber: 654
    functionLinenumberEnd: 713
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - DiscoveryNamingServiceImpl::DiscoveryNamingServiceImpl
    - brpc::policy::DiscoveryClient::DiscoveryClient
    - ASSERT_FALSE
    - std::string::c_str
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::Server::Start
    - ASSERT_TRUE
    - std::string
    - DiscoveryNamingServiceImpl::AddrCount
    - DiscoveryNamingServiceImpl::CancelCount
    - brpc::policy::DiscoveryClient::Register
    - ASSERT_EQ
    - std::vector::size
    - DiscoveryNamingServiceImpl::HasAddr
    - DiscoveryNamingServiceImpl::RenewCount
    - brpc::policy::DiscoveryNamingService::GetServers
    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:721,1
    - Dst: butil::SplitStringIntoKeyValuePairs
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:724,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:725,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
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:740,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:741,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: 743
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 743
    functionName: NacosNamingServiceImpl::Login
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::SplitStringIntoKeyValuePairs
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - brpc::Controller*::http_response
    - brpc::Controller*::request_attachment
    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:751,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:757,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:758,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:768,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:769,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:770,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:771,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:776,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:780,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:781,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: 812
      start: 745
    functionDepth: 0
    functionLinenumber: 745
    functionLinenumberEnd: 812
    functionName: NacosNamingServiceImpl::List
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    - brpc::Controller*::http_response
    - brpc::Controller*::response_attachment
    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:816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:818,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:821,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:821,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:823,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:826,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:826,1
    - Dst: brpc::ServerNode
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:827,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:838,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:839,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:840,1
    - Dst: brpc::policy::NacosNamingService::NacosNamingService
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:844,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:846,1
    - Dst: brpc::policy::NacosNamingService::GetServers
      Src: /src/brpc/test/brpc_naming_service_unittest.cpp:846,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 848
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_naming_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::Server::Start
    - brpc::policy::NacosNamingService::GetServers
    - ASSERT_NE
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::ServerNode
    - butil::str2endpoint
    - brpc::policy::NacosNamingService::NacosNamingService
    - 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:33,1
    - Dst: bvar::detail::Percentile::reset
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:38,1
    - Dst: bvar::detail::GlobalPercentileSamples::get_number
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:41,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:42,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:44,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:45,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:47,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::get_number
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:49,1
    - Dst: bvar::detail::GlobalPercentileSamples::describe
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:52,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 54
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_GT
    - bvar::detail::Percentile::Percentile
    - bvar::detail::GlobalPercentileSamples::get_number
    - LOG
    - EXPECT_LT
    - bvar::detail::GlobalPercentileSamples::describe
    - bvar::detail::Percentile::reset
    - EXPECT_GE
    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:70,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:71,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:72,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:74,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:74,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:76,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::full
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:79,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:80,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:83,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:83,1
    - Dst: bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:85,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:94,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:94,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 97
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::PercentileInterval<SAMPLE_SIZE>::add32
    - bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::add32
    - ASSERT_TRUE
    - fabs
    - bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::full
    - bvar::detail::PercentileInterval<SAMPLE_SIZE*3>::merge
    - bvar::detail::PercentileInterval<SAMPLE_SIZE * 2>::clear
    - EXPECT_LT
    - bvar::detail::PercentileInterval<SAMPLE_SIZE>::clear
    - 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:113,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:114,1
    - Dst: bvar::detail::PercentileInterval<64>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:117,1
    - Dst: bvar::detail::PercentileInterval<64>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:117,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:119,1
    - Dst: bvar::detail::PercentileInterval<64>::full
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:122,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:123,1
    - Dst: bvar::detail::PercentileInterval<64>::clear
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:124,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:126,1
    - Dst: bvar::detail::PercentileInterval<64>::add32
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:126,1
    - Dst: bvar::detail::PercentileInterval<64>::merge
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:128,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:137,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:137,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - fabs
    - bvar::detail::PercentileInterval<64>::clear
    - bvar::detail::PercentileInterval<64>::merge
    - EXPECT_LT
    - bvar::detail::PercentileInterval<64>::full
    - bvar::detail::PercentileInterval<64>::add32
    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:160,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:162,1
    - Dst: get_value
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:162,1
    - Dst: bvar::detail::PercentileSamples<510>::combine_of
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:165,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:165,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:165,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:186,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_percentile_unittest.cpp:186,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 191
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_percentile_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - get_value
    - fabs
    - std::vector::end
    - bvar::detail::PercentileSamples<510>::combine_of
    - std::vector::begin
    - EXPECT_LT
    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
    - butil::ASCIIToUTF16
    - EXPECT_STREQ
    - string16::push_back
    - std::ostringstream::str
    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
    - butil::ASCIIToUTF16
    - EXPECT_STREQ
    - string16::push_back
    - std::ostringstream::str
    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:
    - memset
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    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:
    - NUM_BITS
    - EXPECT_EQ
    - static_cast<uint64_t>
    - butil::subtle::NoBarrier_CompareAndSwap
    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:
    - butil::subtle::NoBarrier_AtomicExchange
    - EXPECT_EQ
    - NUM_BITS
    - static_cast<uint64_t>
    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:
    - NUM_BITS
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<uint64_t>
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - static_cast<AtomicType>
    - butil::subtle::Release_Store
    - butil::subtle::Acquire_Store
    - TestFillValue
    - butil::subtle::NoBarrier_Store
    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::Acquire_Load
    - EXPECT_EQ
    - static_cast<AtomicType>
    - butil::subtle::NoBarrier_Load
    - TestFillValue
    - butil::subtle::Release_Load
    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:
    - butil::Base64UrlEncode
    - EXPECT_EQ
    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:
    - butil::Base64UrlEncode
    - EXPECT_EQ
    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_FALSE
    - butil::Base64UrlDecode
    - ASSERT_TRUE
    - EXPECT_EQ
    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:
    - butil::Base64UrlDecode
    - ASSERT_TRUE
    - EXPECT_EQ
    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:
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    - ASSERT_TRUE
    - EXPECT_EQ
    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:
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    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:
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    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:
    - butil::Base64UrlEncode
    - EXPECT_EQ
    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:
    - butil::Base64UrlEncode
    - EXPECT_EQ
    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_FALSE
    - butil::Base64UrlDecode
    - ASSERT_TRUE
    - EXPECT_EQ
    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:
    - butil::Base64UrlDecode
    - ASSERT_TRUE
    - EXPECT_EQ
    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:
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    - ASSERT_TRUE
    - EXPECT_EQ
    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:
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    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:
    - ASSERT_FALSE
    - butil::Base64UrlDecode
    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:
    - STRINGIZE_NO_EXPANSION
    - STRINGIZE
    - EXPECT_STREQ
    - PREPROCESSOR_UTIL_UNITTEST_B
    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::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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:
    - pthread_create
    - EXPECT_EQ
    - bvar::Adder<uint64_t>*::get_value
    - pthread_join
    - bvar::Adder<uint64_t>*::valid
    - EXPECT_TRUE
    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::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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:
    - pthread_create
    - EXPECT_EQ
    - pthread_join
    - EXPECT_TRUE
    - bvar::Maxer<uint64_t>*::get_value
    - 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::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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:
    - pthread_create
    - EXPECT_EQ
    - pthread_join
    - bvar::Miner<uint64_t>*::get_value
    - EXPECT_TRUE
    - bvar::Miner<uint64_t>*::valid
    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::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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:
    - pthread_create
    - EXPECT_EQ
    - bvar::IntRecorder*::average
    - pthread_join
    - EXPECT_TRUE
    - 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:
    - ASSERT_TRUE
    - bvar::Adder*::valid
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - bvar::Adder*::get_value
    - ASSERT_STREQ
    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:
    - ASSERT_TRUE
    - LOG
    - bvar::MultiDimension::get_stats
    - start_perf_test_with_madder
    - std::ostringstream::str
    - bvar::Adder*::reset
    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:
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - 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:
    - ASSERT_TRUE
    - start_perf_test_with_mmaxer
    - LOG
    - bvar::MultiDimension::get_stats
    - bvar::Maxer*::reset
    - std::ostringstream::str
    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:
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - 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:
    - ASSERT_TRUE
    - start_perf_test_with_mminer
    - LOG
    - bvar::MultiDimension::get_stats
    - bvar::Miner*::reset
    - std::ostringstream::str
    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
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - 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:
    - ASSERT_TRUE
    - LOG
    - std::ostringstream::str
    - bvar::IntRecorder*::reset
    - bvar::MultiDimension::get_stats
    - 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_FALSE
    - bvar::MultiDimension::clear_stats
    - std::vector::push_back
    - ASSERT_TRUE
    - bvar::MultiDimension::count_stats
    - std::vector::end
    - bvar::MultiDimension::delete_stats
    - sort
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - std::vector::begin
    - bvar::MultiDimension::list_stats
    - std::vector::pop_back
    - bvar::MultiDimension::has_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:
    - ASSERT_FALSE
    - IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string::c_str
    - ASSERT_TRUE
    - Size
    - bvar::MultiDimension::get_description
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - GetInt
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - ASSERT_STREQ
    - IsArray
    - GetString
    - IsString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
    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:
    - sleep
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    - ASSERT_TRUE
    - bvar::LatencyRecorder*::max_latency
    - bvar::LatencyRecorder*::count
    - ASSERT_LE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - bvar::MultiDimension::get_stats
    - ASSERT_EQ
    - bvar::LatencyRecorder*::latency
    - bvar::LatencyRecorder*::qps
    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:
    - ASSERT_TRUE
    - bvar::Status*::set_value
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - bvar::Status*::get_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:
    - butil::Timer::stop
    - EXPECT_NE
    - fn
    - butil::Timer::n_elapsed
    - std::ostringstream::str
    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::hash<std::string>
    - std::string::append
    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
    - perf_hash
    - LOG
    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: 503
      start: 503
    functionDepth: 0
    functionLinenumber: 503
    functionLinenumberEnd: 503
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyStringView()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:506,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - str
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 506
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 506
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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_multi_dimension_unittest.cpp:509,1
    - Dst: MyStringView::size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:509,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string_view
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 508
    functionDepth: 1
    functionLinenumber: 508
    functionLinenumberEnd: 509
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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_multi_dimension_unittest.cpp:512,1
    - Dst: MyStringView::size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 512
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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: 514
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 514
    functionName: MyStringView::MyStringView
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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: 516
      start: 516
    functionDepth: 0
    functionLinenumber: 516
    functionLinenumberEnd: 516
    functionName: MyStringView::data
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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: 517
      start: 517
    functionDepth: 0
    functionLinenumber: 517
    functionLinenumberEnd: 517
    functionName: MyStringView::size
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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_multi_dimension_unittest.cpp:524,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 525
    functionName: operator std::string() const
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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_multi_dimension_unittest.cpp:532,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 528
    functionDepth: 0
    functionLinenumber: 528
    functionLinenumberEnd: 533
    functionName: operator butil::StringPiece() const
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_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_multi_dimension_unittest.cpp:541,1
    - Dst: size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:541,1
    - Dst: butil::BasicStringPiece::wordmemcmp
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:545,1
    - Dst: data
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:545,1
    - Dst: data
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:545,1
    - Dst: size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:545,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - MyStringView
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 546
    functionName: operator==(const MyStringView& x, const std::string& y)
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - data
    - butil::BasicStringPiece::wordmemcmp
    linkageType: ''
    returnType: bool
    signature: bool operator==(const MyStringView& x, const std::string& y)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:549,1
    - Dst: size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:549,1
    - Dst: butil::BasicStringPiece::wordmemcmp
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:553,1
    - Dst: data
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:553,1
    - Dst: data
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:553,1
    - Dst: size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:553,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' x'
    - ' y'
    argTypes:
    - std::string
    - MyStringView
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 548
    functionDepth: 1
    functionLinenumber: 548
    functionLinenumberEnd: 554
    functionName: operator==(const std::string& x, const MyStringView& y)
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - size
    - data
    - butil::BasicStringPiece::wordmemcmp
    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_multi_dimension_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:563,1
    - Dst: KeyType::size
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:563,1
    - Dst: bvar::MultiDimension::count_labels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:563,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:564,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:564,1
    - Dst: bvar::MultiDimension::name
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:565,1
    - Dst: bvar::MultiDimension::labels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:565,1
    - Dst: ItemType
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:568,1
    - Dst: ItemType
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:568,1
    - Dst: ItemType
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:568,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:569,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:570,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:571,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:572,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:572,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:579,1
    - Dst: bvar::Adder*::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:579,1
    - Dst: bvar::MultiDimension::delete_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:580,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:581,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:582,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:582,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 583
    functionName: TestLabels
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - KeyType::size
    - ASSERT_FALSE
    - std::string::c_str
    - ASSERT_TRUE
    - bvar::MultiDimension::count_labels
    - bvar::MultiDimension::count_stats
    - ASSERT_NE
    - bvar::MultiDimension::name
    - bvar::MultiDimension::labels
    - bvar::MultiDimension::delete_stats
    - ItemType
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - ASSERT_STREQ
    - bvar::Adder*::get_value
    - butil::string_printf
    - bvar::MultiDimension::has_stats
    linkageType: ''
    returnType: void
    signature: void TestLabels()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:586,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:587,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:588,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:590,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:591,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:592,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:595,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:596,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:597,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:600,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:601,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:602,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:604,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:605,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:606,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:608,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:609,1
    - Dst: TestLabels
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 585
    functionDepth: 2
    functionLinenumber: 585
    functionLinenumberEnd: 611
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestLabels
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:620,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:621,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 625
    functionName: get_shared_adder_thread
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - auto::get_stats
    linkageType: ''
    returnType: void
    signature: void * get_shared_adder_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: auto::delete_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:631,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 634
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 634
    functionName: delete_shared_adder_thread
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::delete_stats
    linkageType: ''
    returnType: void
    signature: void * delete_shared_adder_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:639,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:640,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:641,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:642,1
    - Dst: bvar::MultiDimension::count_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:645,1
    - Dst: std::shared_ptr::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:645,1
    - Dst: bvar::MultiDimension::delete_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:648,1
    - Dst: std::shared_ptr::get_value
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:648,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:649,1
    - Dst: bvar::MultiDimension::has_stats
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:654,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:654,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:657,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:657,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:658,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:661,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:663,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_multi_dimension_unittest.cpp:663,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 664
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_multi_dimension_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - pthread_create
    - ASSERT_TRUE
    - bvar::MultiDimension::count_stats
    - ASSERT_NE
    - pthread_join
    - bvar::MultiDimension::delete_stats
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - usleep
    - bvar::MultiDimension::has_stats
    - std::shared_ptr::get_value
    linkageType: ''
    returnType: void
    signature: void TEST_F(MultiDimensionTest, shared)
  - 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:
    - scoped_ptr::reset
    - EXPECT_EQ
    - ConDecLogger::ConDecLogger
    - SomeMeth
    - COMPILE_ASSERT
    - EXPECT_TRUE
    - scoped_ptr::release
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - scoped_ptr::SomeMeth
    - scoped_ptr::swap
    - EXPECT_FALSE
    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:
    - scoped_ptr::reset
    - EXPECT_EQ
    - ConDecLogger::ConDecLogger
    - SomeMeth
    - CountingDeleter
    - EXPECT_TRUE
    - scoped_ptr::get
    - scoped_ptr::Pass
    - CountingDeleterChild
    - scoped_ptr::scoped_ptr
    - scoped_ptr::SomeMeth
    - EXPECT_FALSE
    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:
    - scoped_ptr::reset
    - EXPECT_EQ
    - SetPtr
    - ConDecLogger::ConDecLogger
    - SomeMeth
    - EXPECT_TRUE
    - scoped_ptr::release
    - scoped_ptr::get
    - scoped_ptr::Pass
    - scoped_ptr::scoped_ptr
    - scoped_ptr::swap
    - EXPECT_FALSE
    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_EQ
    - ConDecLogger::ConDecLogger
    - EXPECT_TRUE
    - GrabAndDrop
    - scoped_ptr::Pass
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - ConDecLogger::ConDecLogger
    - TestReturnOfType
    - scoped_ptr::Pass
    - scoped_ptr::get
    - PassThru
    - EXPECT_FALSE
    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_EQ
    - ConDecLogger::ConDecLogger
    - UpcastUsingPassAs
    - EXPECT_TRUE
    - scoped_ptr::get
    - scoped_ptr::Pass
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    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:
    - scoped_ptr::reset
    - EXPECT_EQ
    - CountingDeleter
    - EXPECT_TRUE
    - scoped_ptr::release
    - scoped_ptr::get
    - scoped_ptr::Pass
    - scoped_ptr::get_deleter
    - scoped_ptr::swap
    - EXPECT_FALSE
    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:
    - OverloadedNewAndDelete::OverloadedNewAndDelete
    - EXPECT_EQ
    - OverloadedNewAndDelete::new_count
    - OverloadedNewAndDelete::delete_count
    - EXPECT_TRUE
    - scoped_ptr::get
    - scoped_ptr::Pass
    - OverloadedNewAndDelete::ResetCounters
    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::AddObserver
    - ObserverList::RemoveObserver
    - FOR_EACH_OBSERVER
    - Observe
    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_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    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:
    - AddInClearObserve::added
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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:
    - AddInClearObserve::added
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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
    - Observe
    - FOR_EACH_OBSERVER
    - ObserverList<Foo>::ObserverList<Foo>
    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::AddObserver
    - ObserverList::RemoveObserver
    - FOR_EACH_OBSERVER
    - Observe
    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_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    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:
    - AddInClearObserve::added
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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:
    - AddInClearObserve::added
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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
    - Observe
    - FOR_EACH_OBSERVER
    - ObserverList<Foo>::ObserverList<Foo>
    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::AddObserver
    - ObserverList::RemoveObserver
    - FOR_EACH_OBSERVER
    - Observe
    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_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    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:
    - AddInClearObserve::added
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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:
    - AddInClearObserve::added
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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
    - Observe
    - FOR_EACH_OBSERVER
    - ObserverList<Foo>::ObserverList<Foo>
    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::AddObserver
    - ObserverList::RemoveObserver
    - FOR_EACH_OBSERVER
    - Observe
    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_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    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:
    - AddInClearObserve::added
    - ObserverList::ObserverList
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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:
    - AddInClearObserve::added
    - EXPECT_EQ
    - ObserverList::AddObserver
    - FOR_EACH_OBSERVER
    - EXPECT_TRUE
    - Observe
    - AddInClearObserve::adder
    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
    - Observe
    - FOR_EACH_OBSERVER
    - ObserverList<Foo>::ObserverList<Foo>
    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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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:
    - bthread_usleep
    - brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    - butil::cpuwide_time_us
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    - ASSERT_EQ
    - brpc::policy::TimeoutConcurrencyLimiter::ResetSampleWindow
    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:
    - brpc::policy::TimeoutConcurrencyLimiter::TimeoutConcurrencyLimiter
    - bthread_usleep
    - brpc::policy::TimeoutConcurrencyLimiter::OnResponded
    - ASSERT_EQ
    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:
    - static_cast<brpc::TimeoutConcurrencyConf>
    - brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    - brpc::AdaptiveMaxConcurrency::value
    - ASSERT_EQ
    - brpc::AdaptiveMaxConcurrency::type
    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_usleep
    - bthread_sem_wait
    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:
    - bthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - bthread_sem_wait
    - ASSERT_EQ
    - bthread_sem_post
    - bthread_start_urgent
    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:
    - pthread_create
    - pthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - ASSERT_EQ
    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:
    - bthread_sem_timedwait
    - EXPECT_EQ
    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:
    - bthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - bthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - ASSERT_EQ
    - bthread_sem_trywait
    - bthread_sem_post
    - bthread_start_urgent
    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_usleep
    - bthread_sem_wait
    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:
    - std::vector::reserve
    - pthread_create
    - bthread_join
    - std::vector::push_back
    - bthread_sem_init
    - pthread_join
    - bthread_sem_destroy
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    - std::vector::back
    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_usleep
    - bthread_sem_wait
    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:
    - bthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - bthread_sem_wait
    - ASSERT_EQ
    - bthread_sem_post
    - bthread_start_urgent
    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:
    - pthread_create
    - pthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - ASSERT_EQ
    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:
    - bthread_sem_timedwait
    - EXPECT_EQ
    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:
    - bthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - bthread_join
    - bthread_sem_init
    - bthread_sem_destroy
    - ASSERT_EQ
    - bthread_sem_trywait
    - bthread_sem_post
    - bthread_start_urgent
    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_usleep
    - bthread_sem_wait
    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:
    - std::vector::reserve
    - pthread_create
    - bthread_join
    - std::vector::push_back
    - bthread_sem_init
    - pthread_join
    - bthread_sem_destroy
    - ASSERT_EQ
    - bthread_setconcurrency
    - bthread_start_urgent
    - std::vector::back
    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:
    - bthread_join
    - std::vector::push_back
    - Arg::num_sig::load
    - ASSERT_EQ
    - std::vector::size
    - Arg::event::wait
    - Arg::event::reset
    - bthread_start_urgent
    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:
    - butil::milliseconds_from_now
    - ASSERT_EQ
    - bthread::CountdownEvent::timed_wait
    - bthread::CountdownEvent::signal
    - bthread::CountdownEvent::CountdownEvent
    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:
    - bthread_join
    - std::vector::push_back
    - Arg::num_sig::load
    - ASSERT_EQ
    - std::vector::size
    - Arg::event::wait
    - Arg::event::reset
    - bthread_start_urgent
    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:
    - butil::milliseconds_from_now
    - ASSERT_EQ
    - bthread::CountdownEvent::timed_wait
    - bthread::CountdownEvent::signal
    - bthread::CountdownEvent::CountdownEvent
    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:
    - butil::Timer::stop
    - http_parser_init
    - 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:
    - std::string
    - LOG
    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:
    - std::string
    - LOG
    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:
    - std::string
    - LOG
    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:
    - std::string
    - LOG
    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:
    - strlen
    - http_parser_execute
    - LOG
    - http_parser_init
    - memset
    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:
    - bvar::Miner::Miner
    - bvar::Adder::Adder
    - sleep
    - bvar::PerSecond::get_value
    - bvar::WindowEx::WindowEx
    - bvar::Stat::get_average_int
    - ASSERT_DOUBLE_EQ
    - bvar::PerSecondEx::get_value
    - bvar::WindowEx::get_value
    - bvar::IntRecorder::IntRecorder
    - bvar::Maxer::Maxer
    - ASSERT_EQ
    - bvar::Stat::get_average_double
    - bvar::Window::get_value
    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_FALSE
    - ASSERT_TRUE
    - butil::MakeScopeGuard
    - auto::dismiss
    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_FALSE
    - ASSERT_TRUE
    - butil::BoundedQueue::push
    - butil::BoundedQueue::pop_bottom
    - butil::BoundedQueue::full
    - butil::BoundedQueue::top
    - butil::BoundedQueue::bottom
    - butil::BoundedQueue::pop
    - butil::BoundedQueue::empty
    - ASSERT_EQ
    - butil::BoundedQueue::size
    - butil::BoundedQueue::push_top
    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_FALSE
    - ASSERT_TRUE
    - butil::BoundedQueue::push
    - butil::BoundedQueue::pop_bottom
    - butil::BoundedQueue::full
    - butil::BoundedQueue::top
    - butil::BoundedQueue::bottom
    - butil::BoundedQueue::pop
    - butil::BoundedQueue::empty
    - ASSERT_EQ
    - butil::BoundedQueue::size
    - butil::BoundedQueue::push_top
    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:
    - srand
    - time
    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:
    - srand
    - time
    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:
    - FeedbackControl*::_circuit_breaker::OnCallEnd
    - static_cast<FeedbackControl*>
    - rand
    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:
    - pthread_create
    - std::vector<std::unique_ptr<FeedbackControl>>*::emplace_back
    - std::vector<std::unique_ptr<FeedbackControl>>*::clear
    - FeedbackControl::FeedbackControl
    - std::vector<pthread_t>*::clear
    - std::vector<pthread_t>*::push_back
    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:
    - EXPECT_EQ
    - pthread_join
    - static_cast<FeedbackControl*>
    - ASSERT_EQ
    - EXPECT_TRUE
    - StartFeedbackThread
    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:
    - EXPECT_GT
    - pthread_join
    - static_cast<FeedbackControl*>
    - ASSERT_EQ
    - StartFeedbackThread
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - EXPECT_LE
    - EXPECT_GT
    - pthread_join
    - static_cast<FeedbackControl*>
    - ASSERT_EQ
    - StartFeedbackThread
    - Reset
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - EXPECT_LE
    - pthread_join
    - static_cast<FeedbackControl*>
    - EXPECT_GT
    - ASSERT_EQ
    - Reset
    - StartFeedbackThread
    - bthread::TaskGroup::usleep
    - isolation_duration_ms
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - EXPECT_LE
    - pthread_join
    - static_cast<FeedbackControl*>
    - EXPECT_GT
    - ASSERT_EQ
    - ASSERT_LT
    - isolation_duration_ms
    - StartFeedbackThread
    - Reset
    - EXPECT_FALSE
    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
    - posix_fadvise
    - butil::value
    - fdatasync
    - open
    - ScopedFD::is_valid
    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
    - posix_fadvise
    - butil::value
    - fdatasync
    - open
    - ScopedFD::is_valid
    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
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric<Dst>
    - brpc::GetJsService::jquery_min
    - 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
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric<Dst>
    - brpc::GetJsService::jquery_min
    - 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
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric<Dst>
    - brpc::GetJsService::jquery_min
    - static_cast<Dst>
    - 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:
    - EXPECT_EQ
    - TEST_EXPECTED_VALUE
    - TestSpecializedArithmetic
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric<Dst>
    - brpc::GetJsService::jquery_min
    - static_cast<Dst>
    - 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: 22
    functionsReached:
    - COMPILE_ASSERT
    - butil::BaseIteratorRangeToNumberTraits::max
    - SrcLimits::infinity
    - SrcLimits::quiet_NaN
    - brpc::GetJsService::jquery_min
    - static_cast<Src>
    - TEST_EXPECTED_RANGE
    - TEST_EXPECTED_VALIDITY
    - ResetFloatingPointUnit
    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: 22
    functionsReached:
    - TEST_EXPECTED_VALUE
    - COMPILE_ASSERT
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric::CheckedNumeric
    - SrcLimits::infinity
    - SrcLimits::quiet_NaN
    - brpc::GetJsService::jquery_min
    - static_cast<Src>
    - TEST_EXPECTED_RANGE
    - TEST_EXPECTED_VALIDITY
    - ResetFloatingPointUnit
    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: 22
    functionsReached:
    - TEST_EXPECTED_VALUE
    - COMPILE_ASSERT
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric::CheckedNumeric
    - brpc::GetJsService::jquery_min
    - static_cast<Src>
    - TEST_EXPECTED_RANGE
    - 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: 22
    functionsReached:
    - TEST_EXPECTED_VALUE
    - COMPILE_ASSERT
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric::CheckedNumeric
    - SrcLimits::infinity
    - SrcLimits::quiet_NaN
    - brpc::GetJsService::jquery_min
    - static_cast<Src>
    - TEST_EXPECTED_RANGE
    - TEST_EXPECTED_VALIDITY
    - ResetFloatingPointUnit
    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: 22
    functionsReached:
    - TEST_EXPECTED_VALUE
    - COMPILE_ASSERT
    - butil::BaseIteratorRangeToNumberTraits::max
    - CheckedNumeric::CheckedNumeric
    - brpc::GetJsService::jquery_min
    - static_cast<Src>
    - TEST_EXPECTED_RANGE
    - 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:
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - static_cast<int>
    - static_cast<unsigned>
    - saturated_cast<int>
    - static_cast<size_t>
    - numeric_limits<float>::infinity
    - saturated_cast<float>
    - saturated_cast<unsigned>
    - checked_cast<int>
    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:
    - RUN_ALL_TESTS
    - 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: 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:
    - std::unordered_set::insert
    - strlen
    - strcmp
    - LOG
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - bvar::MultiDimension::get_stats
    - brpc::ChannelOptions::ChannelOptions
    - std::string::find
    - sscanf
    - brpc::Server::AddService
    - std::unordered_set::count
    - strncmp
    - std::string::data
    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:
    - srand
    - time
    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: 0
    functionLinenumber: 37
    functionLinenumberEnd: 50
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - std::map::end
    - std::map::begin
    - butil::find_cstr
    - ASSERT_EQ
    - std::map::empty
    - std::map::size
    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:
    - std::string::append
    - LOG
    - ASSERT_EQ
    - std::vector::size
    - butil::Timer::start
    - std::vector::reserve
    - ASSERT_FALSE
    - butil::Timer::stop
    - std::vector::end
    - butil::find_cstr
    - snprintf
    - std::map::find
    - butil::Timer::Timer
    - std::vector::push_back
    - std::random_shuffle
    - std::vector::begin
    - butil::Timer::n_elapsed
    - std::string::reserve
    - std::string::data
    - std::map::empty
    - std::map::size
    - std::string::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:
    - srand
    - time
    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: 0
    functionLinenumber: 37
    functionLinenumberEnd: 50
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/find_cstr_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - std::map::end
    - std::map::begin
    - butil::find_cstr
    - ASSERT_EQ
    - std::map::empty
    - std::map::size
    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:
    - std::string::append
    - LOG
    - ASSERT_EQ
    - std::vector::size
    - butil::Timer::start
    - std::vector::reserve
    - ASSERT_FALSE
    - butil::Timer::stop
    - std::vector::end
    - butil::find_cstr
    - snprintf
    - std::map::find
    - butil::Timer::Timer
    - std::vector::push_back
    - std::random_shuffle
    - std::vector::begin
    - butil::Timer::n_elapsed
    - std::string::reserve
    - std::string::data
    - std::map::empty
    - std::map::size
    - std::string::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:
    - brpc::Channel::Init
    - ARRAY_SIZE
    - butil::hostname2endpoint
    - brpc::SocketUniquePtr::remote_side
    - std::string::c_str
    - ASSERT_TRUE
    - fprintf
    - std::string
    - fclose
    - butil::TempFile::fname
    - ASSERT_EQ
    - fopen
    - brpc::Channel::Channel
    - butil::EndPoint::EndPoint
    - brpc::Channel::_lb::SelectServer
    - butil::TempFile::TempFile
    - brpc::ChannelOptions::ChannelOptions
    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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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: 0
    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:
    - DeleteThreadCheckerClassOnThread::Start
    - ThreadCheckerClass::ThreadCheckerClass
    - 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:
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DetachFromThread
    - scoped_ptr::get
    - CallDoStuffOnThread::Join
    - 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
    - scoped_ptr::get
    - CallDoStuffOnThread::Start
    - CallDoStuffOnThread::Join
    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:
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DetachFromThread
    - scoped_ptr::get
    - CallDoStuffOnThread::Join
    - scoped_ptr::DoStuff
    - 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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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:
    - DCHECK
    - CalledOnValidThread
    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: 1
    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: 0
    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:
    - DeleteThreadCheckerClassOnThread::Start
    - ThreadCheckerClass::ThreadCheckerClass
    - 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:
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DetachFromThread
    - scoped_ptr::get
    - CallDoStuffOnThread::Join
    - 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
    - scoped_ptr::get
    - CallDoStuffOnThread::Start
    - CallDoStuffOnThread::Join
    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:
    - ThreadCheckerClass::ThreadCheckerClass
    - scoped_ptr::DetachFromThread
    - scoped_ptr::get
    - CallDoStuffOnThread::Join
    - scoped_ptr::DoStuff
    - 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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - berror
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - butil::read_command_output_through_popen
    - std::ostringstream::str
    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_TRUE
    - berror
    - butil::read_command_output_through_clone
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::string::resize
    - std::ostringstream::str
    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:
    - malloc
    - pthread_create
    - pthread_join
    - clone
    - free
    - waitpid
    - ASSERT_EQ
    - usleep
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - berror
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - butil::read_command_output_through_popen
    - std::ostringstream::str
    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_TRUE
    - berror
    - butil::read_command_output_through_clone
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - std::string::resize
    - std::ostringstream::str
    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:
    - malloc
    - pthread_create
    - pthread_join
    - clone
    - free
    - waitpid
    - ASSERT_EQ
    - usleep
    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:
    - SelfAssign::SelfAssign
    - EXPECT_EQ
    - scoped_refptr::get
    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:
    - ScopedRefPtrToSelf*::SelfDestruct
    - EXPECT_TRUE
    - ScopedRefPtrToSelf::was_destroyed
    - ScopedRefPtrToSelf::ScopedRefPtrToSelf
    - EXPECT_FALSE
    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_EQ
    - EXPECT_NE
    - SelfAssign::SelfAssign
    - EXPECT_TRUE
    - scoped_refptr::scoped_refptr
    - EXPECT_FALSE
    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:43,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bthread_key_unittest.cpp:44,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bthread_key_unittest.cpp:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 46
    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:51,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 55
    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: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    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:74,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:76,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: ~CountersWrapper()
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ndestroy::fetch_add
    - bthread_key_delete
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void ~CountersWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CountersWrapper*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    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:91,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:93,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:95,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:95,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:97,1
    - Dst: CountersWrapper::CountersWrapper
      Src: /src/brpc/test/bthread_key_unittest.cpp:98,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:102,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:102,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:104,1
    - Dst: Counters*::ncreate::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:106,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:106,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_key_unittest.cpp:107,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:111,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:114,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:114,1
    - Dst: Counters*::nleavethread::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:116,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs
    argTypes:
    - Counters*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 117
    functionName: worker1_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - Counters*::nenterthread::fetch_add
    - bthread_usleep
    - bthread_key_create
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - Counters*::nleavethread::fetch_add
    - bthread_self
    - CountersWrapper::CountersWrapper
    - Counters*::ncreate::fetch_add
    - arraysize
    linkageType: ''
    returnType: void
    signature: void worker1_impl(Counters* cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: worker1_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:120,1
    - Dst: static_cast<Counters*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 2
    functionLinenumber: 119
    functionLinenumberEnd: 122
    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:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:129,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:129,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:132,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:132,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:135,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:135,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:138,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: Counters::nenterthread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: Counters::nleavethread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: Counters::ncreate::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    - Dst: Counters::ndestroy::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:147,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - pthread_join
    - Counters::nenterthread::load
    - Counters::nleavethread::load
    - ASSERT_EQ
    - Counters::ncreate::load
    - Counters::ndestroy::load
    - bthread_start_background
    - arraysize
    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:155,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 157
    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:161,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:162,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:162,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - k
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 163
    functionName: worker2_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fetch_add
    - bthread_getspecific
    - bthread_setspecific
    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:166,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: worker2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread_key_t*>
    - worker2_impl
    linkageType: ''
    returnType: void
    signature: void * worker2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: berror
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:173,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:177,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:177,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:181,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:181,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:184,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:184,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:187,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: std::sort
      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: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:194,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 195
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - pthread_create
    - bthread_join
    - std::unique
    - bthread_key_create
    - bthread_key_delete
    - berror
    - end
    - clear
    - pthread_join
    - ASSERT_EQ
    - std::sort
    - bthread_start_urgent
    - size
    - arraysize
    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:205,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:207,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:207,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:212,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:212,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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:216,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - keys
    argTypes:
    - Keys*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 217
    functionName: use_invalid_keys_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:220,1
    - Dst: static_cast<const Keys*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 219
    functionDepth: 2
    functionLinenumber: 219
    functionLinenumberEnd: 222
    functionName: use_invalid_keys
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - use_invalid_keys_impl
    - static_cast<const Keys*>
    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:226,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:235,1
    - Dst: pthread_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_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:237,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 238
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - bthread_key_delete
    - bthread_key_create
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:242,1
    - Dst: bthread_key_create
      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_getspecific
      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_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:245,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:247,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:250,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 251
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_create
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - bthread_key_delete
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, reuse_key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:263,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:265,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 267
    functionName: sid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:270,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - SidData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: sid_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_setspecific
    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:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 276
    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:280,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:289,1
    - Dst: pthread_create
      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:291,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:294,1
    - Dst: pthread_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:296,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:298,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:298,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
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 303
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - bthread_key_delete
    - bthread_key_create
    - EXPECT_EQ
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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: 318
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 318
    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:324,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:324,1
    - Dst: SBATLS::SBATLS
      Src: /src/brpc/test/bthread_key_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:328,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:331,1
    - Dst: bthread_start_urgent
      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_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:333,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:337,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - data
    argTypes:
    - SBAData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 323
    functionDepth: 1
    functionLinenumber: 323
    functionLinenumberEnd: 338
    functionName: set_before_anybth_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - bthread_usleep
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - SBATLS::SBATLS
    - bthread_start_urgent
    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:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 340
    functionDepth: 2
    functionLinenumber: 340
    functionLinenumberEnd: 343
    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:347,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:355,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:357,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 358
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_key_create
    - pthread_join
    - ASSERT_EQ
    - bthread_key_delete
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:371,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 369
    functionDepth: 1
    functionLinenumber: 369
    functionLinenumberEnd: 375
    functionName: pool_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 380
    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:385,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:387,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:387,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 389
    functionName: pool_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:393,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:397,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:400,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:409,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:415,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:418,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:418,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:421,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:423,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:427,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:427,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 391
    functionDepth: 2
    functionLinenumber: 391
    functionLinenumberEnd: 428
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_delete
    - bthread_join
    - EXPECT_EQ
    - bthread_key_create
    - bthread_keytable_pool_destroy
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_keytable_pool_size
    - bthread_attr_init
    - bthread_start_urgent
    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:437,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 438
    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:441,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:443,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:443,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:445,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:446,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:447,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 440
    functionDepth: 1
    functionLinenumber: 440
    functionLinenumberEnd: 448
    functionName: usleep_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_thread_local_keytable_list_length
    - bthread_usleep
    - bthread_setspecific
    - ASSERT_LE
    - ASSERT_EQ
    - PoolData2::PoolData2
    - bthread_getspecific
    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:452,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/bthread_key_unittest.cpp:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 450
    functionDepth: 2
    functionLinenumber: 450
    functionLinenumberEnd: 454
    functionName: usleep_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - 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:458,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:463,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:463,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:464,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:467,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_key_unittest.cpp:468,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:469,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 471
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - bthread_join
    - std::vector::push_back
    - ASSERT_EQ
    - PoolData2::PoolData2
    - usleep
    - std::vector::size
    - bthread_start_background
    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:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 477
    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:481,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:483,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:486,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:490,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:491,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:491,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:495,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:496,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 479
    functionDepth: 2
    functionLinenumber: 479
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_delete
    - bthread_join
    - bthread_key_create
    - bthread_keytable_pool_destroy
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_keytable_pool_size
    - bthread_attr_init
    - bthread_start_urgent
    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:505,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:506,1
    - Dst: erase
      Src: /src/brpc/test/bthread_key_unittest.cpp:508,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:508,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:509,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:512,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:513,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 515
    functionName: return_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - get_thread_local_keytable_list_length
    - BAIDU_SCOPED_LOCK
    - return_keytable
    - ASSERT_LE
    - erase
    - 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:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 2
    functionLinenumber: 517
    functionLinenumberEnd: 520
    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:524,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:525,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:526,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 528
    functionName: borrow_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - borrow_keytable
    - push_back
    - 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:531,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 530
    functionDepth: 2
    functionLinenumber: 530
    functionLinenumberEnd: 533
    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:536,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:537,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:540,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:540,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:546,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:546,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:550,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:550,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:555,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:555,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:558,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:558,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:561,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:562,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:566,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:566,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 535
    functionDepth: 2
    functionLinenumber: 535
    functionLinenumberEnd: 567
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - clear
    - return_keytable
    - bthread_keytable_pool_destroy
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_keytable_pool_size
    - bthread_attr_init
    - bthread_start_background
    - size
    - arraysize
    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:575,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:576,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_key_unittest.cpp:577,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 578
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 578
    functionName: lid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - bthread_mutex_unlock
    - bthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void lid_dtor(void* tls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:581,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:582,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:582,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:582,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 580
    functionDepth: 1
    functionLinenumber: 580
    functionLinenumberEnd: 583
    functionName: lid_worker_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - fetch_add
    - bthread_getspecific
    - bthread_setspecific
    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:586,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 585
    functionDepth: 2
    functionLinenumber: 585
    functionLinenumberEnd: 588
    functionName: lid_worker
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread_key_t*>
    - lid_worker_impl
    linkageType: ''
    returnType: void
    signature: void * lid_worker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:593,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:594,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:594,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:596,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:600,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:600,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:604,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:604,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:607,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:607,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:615,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:615,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:615,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:618,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:619,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:619,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 620
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - pthread_create
    - bthread_join
    - std::unique
    - bthread_key_create
    - bthread_key_delete
    - end
    - clear
    - bthread_mutex_destroy
    - pthread_join
    - ASSERT_EQ
    - std::sort
    - bthread_mutex_init
    - bthread_start_urgent
    - size
    - arraysize
    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: 71
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 71
    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:74,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:76,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: ~CountersWrapper()
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ndestroy::fetch_add
    - bthread_key_delete
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void ~CountersWrapper()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<CountersWrapper*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 85
    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:91,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:93,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:95,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:95,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:97,1
    - Dst: CountersWrapper::CountersWrapper
      Src: /src/brpc/test/bthread_key_unittest.cpp:98,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:101,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:102,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:102,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:104,1
    - Dst: Counters*::ncreate::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:106,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:106,1
    - Dst: bthread_self
      Src: /src/brpc/test/bthread_key_unittest.cpp:107,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:111,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:114,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:114,1
    - Dst: Counters*::nleavethread::fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:116,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - cs
    argTypes:
    - Counters*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 117
    functionName: worker1_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - Counters*::nenterthread::fetch_add
    - bthread_usleep
    - bthread_key_create
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - Counters*::nleavethread::fetch_add
    - bthread_self
    - CountersWrapper::CountersWrapper
    - Counters*::ncreate::fetch_add
    - arraysize
    linkageType: ''
    returnType: void
    signature: void worker1_impl(Counters* cs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: worker1_impl
      Src: /src/brpc/test/bthread_key_unittest.cpp:120,1
    - Dst: static_cast<Counters*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 119
    functionDepth: 2
    functionLinenumber: 119
    functionLinenumberEnd: 122
    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:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:129,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:129,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:132,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:132,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:134,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:135,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:135,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:138,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:140,1
    - Dst: Counters::nenterthread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:142,1
    - Dst: Counters::nleavethread::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:144,1
    - Dst: Counters::ncreate::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:146,1
    - Dst: Counters::ndestroy::load
      Src: /src/brpc/test/bthread_key_unittest.cpp:147,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 148
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - pthread_join
    - Counters::nenterthread::load
    - Counters::nleavethread::load
    - ASSERT_EQ
    - Counters::ncreate::load
    - Counters::ndestroy::load
    - bthread_start_background
    - arraysize
    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:155,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:156,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 157
    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:161,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:161,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:162,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:162,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:162,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - k
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 163
    functionName: worker2_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - fetch_add
    - bthread_getspecific
    - bthread_setspecific
    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:166,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 168
    functionName: worker2
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread_key_t*>
    - worker2_impl
    linkageType: ''
    returnType: void
    signature: void * worker2(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: berror
      Src: /src/brpc/test/bthread_key_unittest.cpp:172,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:173,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:177,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:177,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:180,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:181,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:181,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:184,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:184,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:187,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:189,1
    - Dst: std::sort
      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: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:194,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:194,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 195
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - pthread_create
    - bthread_join
    - std::unique
    - bthread_key_create
    - bthread_key_delete
    - berror
    - end
    - clear
    - pthread_join
    - ASSERT_EQ
    - std::sort
    - bthread_start_urgent
    - size
    - arraysize
    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:205,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:207,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:207,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:212,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:212,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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:216,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - keys
    argTypes:
    - Keys*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 204
    functionDepth: 1
    functionLinenumber: 204
    functionLinenumberEnd: 217
    functionName: use_invalid_keys_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:220,1
    - Dst: static_cast<const Keys*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 219
    functionDepth: 2
    functionLinenumber: 219
    functionLinenumberEnd: 222
    functionName: use_invalid_keys
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - use_invalid_keys_impl
    - static_cast<const Keys*>
    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:226,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:234,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:235,1
    - Dst: pthread_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_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:237,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 238
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - bthread_key_delete
    - bthread_key_create
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:242,1
    - Dst: bthread_key_create
      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_getspecific
      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_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:245,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:247,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:250,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 251
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_create
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - bthread_key_delete
    linkageType: ''
    returnType: void
    signature: void TEST(KeyTest, reuse_key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:263,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:263,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:265,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 260
    functionDepth: 1
    functionLinenumber: 260
    functionLinenumberEnd: 267
    functionName: sid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:270,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - SidData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 271
    functionName: sid_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - bthread_setspecific
    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:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 276
    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:280,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:289,1
    - Dst: pthread_create
      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:291,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:294,1
    - Dst: pthread_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:296,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:298,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:298,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
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 303
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - bthread_key_delete
    - bthread_key_create
    - EXPECT_EQ
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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: 318
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 318
    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:324,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:324,1
    - Dst: SBATLS::SBATLS
      Src: /src/brpc/test/bthread_key_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:328,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:331,1
    - Dst: bthread_start_urgent
      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_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:333,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:337,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - data
    argTypes:
    - SBAData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 323
    functionDepth: 1
    functionLinenumber: 323
    functionLinenumberEnd: 338
    functionName: set_before_anybth_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_join
    - bthread_usleep
    - bthread_setspecific
    - ASSERT_EQ
    - bthread_getspecific
    - SBATLS::SBATLS
    - bthread_start_urgent
    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:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 340
    functionDepth: 2
    functionLinenumber: 340
    functionLinenumberEnd: 343
    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:347,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:355,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:357,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 358
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_key_create
    - pthread_join
    - ASSERT_EQ
    - bthread_key_delete
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:371,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:371,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 369
    functionDepth: 1
    functionLinenumber: 369
    functionLinenumberEnd: 375
    functionName: pool_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:378,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 380
    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:385,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:387,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:387,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 389
    functionName: pool_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_getspecific
    - 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:393,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:397,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:400,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:409,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:415,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:418,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:418,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:421,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:423,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:427,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:427,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 391
    functionDepth: 2
    functionLinenumber: 391
    functionLinenumberEnd: 428
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_delete
    - bthread_join
    - EXPECT_EQ
    - bthread_key_create
    - bthread_keytable_pool_destroy
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_keytable_pool_size
    - bthread_attr_init
    - bthread_start_urgent
    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:437,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 438
    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:441,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:443,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:443,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:445,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:446,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:447,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 440
    functionDepth: 1
    functionLinenumber: 440
    functionLinenumberEnd: 448
    functionName: usleep_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - get_thread_local_keytable_list_length
    - bthread_usleep
    - bthread_setspecific
    - ASSERT_LE
    - ASSERT_EQ
    - PoolData2::PoolData2
    - bthread_getspecific
    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:452,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/bthread_key_unittest.cpp:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 450
    functionDepth: 2
    functionLinenumber: 450
    functionLinenumberEnd: 454
    functionName: usleep_thread
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - 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:458,1
    - Dst: PoolData2::PoolData2
      Src: /src/brpc/test/bthread_key_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:463,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:463,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:464,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_key_unittest.cpp:467,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_key_unittest.cpp:468,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:469,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - PoolData2*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 471
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::vector::reserve
    - bthread_join
    - std::vector::push_back
    - ASSERT_EQ
    - PoolData2::PoolData2
    - usleep
    - std::vector::size
    - bthread_start_background
    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:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 477
    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:481,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:483,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:486,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:490,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:491,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:491,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:495,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:496,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 479
    functionDepth: 2
    functionLinenumber: 479
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_key_delete
    - bthread_join
    - bthread_key_create
    - bthread_keytable_pool_destroy
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_keytable_pool_size
    - bthread_attr_init
    - bthread_start_urgent
    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:505,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:506,1
    - Dst: erase
      Src: /src/brpc/test/bthread_key_unittest.cpp:508,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:508,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:509,1
    - Dst: get_thread_local_keytable_list_length
      Src: /src/brpc/test/bthread_key_unittest.cpp:512,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_key_unittest.cpp:513,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 515
    functionName: return_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - begin
    - get_thread_local_keytable_list_length
    - BAIDU_SCOPED_LOCK
    - return_keytable
    - ASSERT_LE
    - erase
    - 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:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 2
    functionLinenumber: 517
    functionLinenumberEnd: 520
    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:524,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_key_unittest.cpp:525,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:526,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 528
    functionName: borrow_thread_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - borrow_keytable
    - push_back
    - 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:531,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 530
    functionDepth: 2
    functionLinenumber: 530
    functionLinenumberEnd: 533
    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:536,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:537,1
    - Dst: bthread_keytable_pool_size
      Src: /src/brpc/test/bthread_key_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:540,1
    - Dst: bthread_attr_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:540,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:546,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:546,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:550,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_key_unittest.cpp:550,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:555,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:555,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:557,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:558,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:558,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:561,1
    - Dst: return_keytable
      Src: /src/brpc/test/bthread_key_unittest.cpp:562,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:566,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:566,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 535
    functionDepth: 2
    functionLinenumber: 535
    functionLinenumberEnd: 567
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - clear
    - return_keytable
    - bthread_keytable_pool_destroy
    - ASSERT_EQ
    - bthread_keytable_pool_init
    - bthread_keytable_pool_size
    - bthread_attr_init
    - bthread_start_background
    - size
    - arraysize
    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:575,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_key_unittest.cpp:576,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_key_unittest.cpp:577,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - tls
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 578
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 578
    functionName: lid_dtor
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - push_back
    - bthread_mutex_unlock
    - bthread_mutex_lock
    linkageType: ''
    returnType: void
    signature: void lid_dtor(void* tls)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:581,1
    - Dst: bthread_getspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:582,1
    - Dst: bthread_setspecific
      Src: /src/brpc/test/bthread_key_unittest.cpp:582,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_key_unittest.cpp:582,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 580
    functionDepth: 1
    functionLinenumber: 580
    functionLinenumberEnd: 583
    functionName: lid_worker_impl
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_EQ
    - fetch_add
    - bthread_getspecific
    - bthread_setspecific
    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:586,1
    - Dst: static_cast<bthread_key_t*>
      Src: /src/brpc/test/bthread_key_unittest.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 585
    functionDepth: 2
    functionLinenumber: 585
    functionLinenumberEnd: 588
    functionName: lid_worker
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread_key_t*>
    - lid_worker_impl
    linkageType: ''
    returnType: void
    signature: void * lid_worker(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:593,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_key_unittest.cpp:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:594,1
    - Dst: bthread_key_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:594,1
    - Dst: clear
      Src: /src/brpc/test/bthread_key_unittest.cpp:596,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:600,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_key_unittest.cpp:600,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:604,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_key_unittest.cpp:604,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:607,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:607,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_key_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: size
      Src: /src/brpc/test/bthread_key_unittest.cpp:612,1
    - Dst: std::sort
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: std::unique
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:615,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:615,1
    - Dst: arraysize
      Src: /src/brpc/test/bthread_key_unittest.cpp:615,1
    - Dst: end
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: begin
      Src: /src/brpc/test/bthread_key_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:618,1
    - Dst: bthread_key_delete
      Src: /src/brpc/test/bthread_key_unittest.cpp:618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_key_unittest.cpp:619,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/test/bthread_key_unittest.cpp:619,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 620
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - pthread_create
    - bthread_join
    - std::unique
    - bthread_key_create
    - bthread_key_delete
    - end
    - clear
    - bthread_mutex_destroy
    - pthread_join
    - ASSERT_EQ
    - std::sort
    - bthread_mutex_init
    - bthread_start_urgent
    - size
    - arraysize
    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:
    - printf
    - sched_yield
    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:
    - sleep
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - sysconf
    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:
    - printf
    - sched_yield
    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:
    - sleep
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - sysconf
    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:
    - butil::CreateNewTempDirectory
    - ScopedTempDir::IsValid
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - ScopedTempDir::Take
    - FilePath::value
    - ScopedTempDir::Set
    - butil::DirectoryExists
    - EXPECT_FALSE
    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:
    - butil::GetTempDir
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_TRUE
    - FilePath::value
    - butil::DirectoryExists
    - ScopedTempDir::path
    - EXPECT_FALSE
    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:
    - butil::CreateNewTempDirectory
    - ASSERT_TRUE
    - ScopedTempDir::CreateUniqueTempDirUnderPath
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::value
    - FilePath::IsParent
    - butil::DirectoryExists
    - ScopedTempDir::path
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - ScopedTempDir::Delete
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_TRUE
    - ScopedTempDir::Take
    - ScopedTempDir::Set
    - EXPECT_FALSE
    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:
    - ScopedTempDir::Delete
    - EXPECT_EQ
    - butil::File::Close
    - FILE_PATH_LITERAL
    - butil::File::IsValid
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_FALSE
    - EXPECT_TRUE
    - ScopedTempDir::path
    - butil::File::error_details
    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:
    - butil::CreateNewTempDirectory
    - ScopedTempDir::IsValid
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - ScopedTempDir::Take
    - FilePath::value
    - ScopedTempDir::Set
    - butil::DirectoryExists
    - EXPECT_FALSE
    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:
    - butil::GetTempDir
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_TRUE
    - FilePath::value
    - butil::DirectoryExists
    - ScopedTempDir::path
    - EXPECT_FALSE
    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:
    - butil::CreateNewTempDirectory
    - ASSERT_TRUE
    - ScopedTempDir::CreateUniqueTempDirUnderPath
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::value
    - FilePath::IsParent
    - butil::DirectoryExists
    - ScopedTempDir::path
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - ScopedTempDir::Delete
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_TRUE
    - ScopedTempDir::Take
    - ScopedTempDir::Set
    - EXPECT_FALSE
    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:
    - ScopedTempDir::Delete
    - EXPECT_EQ
    - butil::File::Close
    - FILE_PATH_LITERAL
    - butil::File::IsValid
    - ScopedTempDir::CreateUniqueTempDir
    - EXPECT_FALSE
    - EXPECT_TRUE
    - ScopedTempDir::path
    - butil::File::error_details
    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:
    - EXPECT_TRUE
    - butil::Base64Decode
    - butil::Base64Encode
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - butil::Base64Decode
    - butil::Base64Encode
    - EXPECT_EQ
    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:
    - butil::SysInfo::MaxSharedMemorySize
    - EXPECT_GT
    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:
    - butil::SysInfo::NumberOfProcessors
    - EXPECT_GE
    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:
    - EXPECT_GT
    - butil::SysInfo::AmountOfVirtualMemory
    - butil::SysInfo::AmountOfPhysicalMemory
    - EXPECT_GE
    - butil::SysInfo::AmountOfPhysicalMemoryMB
    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
    - EXPECT_GT
    - FilePath::value
    - butil::SysInfo::AmountOfFreeDiskSpace
    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:
    - butil::SysInfo::OperatingSystemVersionNumbers
    - EXPECT_GT
    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:
    - butil::Time
    - EXPECT_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - 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:
    - butil::Time
    - EXPECT_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - 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:
    - butil::Time
    - EXPECT_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - 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:
    - EXPECT_DOUBLE_EQ
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - butil::SysInfo::GetLsbReleaseTime
    - butil::Time::FromDoubleT
    - butil::Time::ToDoubleT
    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::Time
    - butil::SysInfo::SetChromeOSVersionInfoForTest
    - EXPECT_TRUE
    - butil::SysInfo::IsRunningOnChromeOS
    - 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:
    - ASSERT_EQ
    - memset
    - butil::crc32c::Value
    - reinterpret_cast<char*>
    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
    - butil::crc32c::Value
    - ASSERT_NE
    - ASSERT_EQ
    - butil::crc32c::Mask
    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:
    - ASSERT_EQ
    - memset
    - butil::crc32c::Value
    - reinterpret_cast<char*>
    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
    - butil::crc32c::Value
    - ASSERT_NE
    - ASSERT_EQ
    - butil::crc32c::Mask
    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:
    - ASSERT_EQ
    - memset
    - butil::crc32c::Value
    - reinterpret_cast<char*>
    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
    - butil::crc32c::Value
    - ASSERT_NE
    - ASSERT_EQ
    - butil::crc32c::Mask
    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:
    - ASSERT_EQ
    - memset
    - butil::crc32c::Value
    - reinterpret_cast<char*>
    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
    - butil::crc32c::Value
    - ASSERT_NE
    - ASSERT_EQ
    - butil::crc32c::Mask
    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:
    - DCHECK
    - Set
    - IsSignaled
    - Signal
    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:
    - DCHECK
    - Get
    - IsSignaled
    - Signal
    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:
    - DCHECK
    - Set
    - IsSignaled
    - Signal
    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:
    - DCHECK
    - Get
    - IsSignaled
    - Signal
    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::AddWork
    - EXPECT_EQ
    - GetThreadLocal::set_ptr
    - butil::DelegateSimpleThreadPool::Start
    - reinterpret_cast<ThreadLocalTesterBase*>
    - SetThreadLocal::set_value
    - butil::DelegateSimpleThreadPool::JoinAll
    - static_cast<ThreadLocalTesterBase*>
    - butil::WaitableEvent::Reset
    - butil::ThreadLocalPointer::ThreadLocalPointer
    - butil::WaitableEvent::Wait
    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::Set
    - EXPECT_TRUE
    - butil::ThreadLocalBoolean::ThreadLocalBoolean
    - butil::ThreadLocalBoolean::Get
    - EXPECT_FALSE
    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:
    - DCHECK
    - Set
    - IsSignaled
    - Signal
    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:
    - DCHECK
    - Get
    - IsSignaled
    - Signal
    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:
    - DCHECK
    - Set
    - IsSignaled
    - Signal
    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:
    - DCHECK
    - Get
    - IsSignaled
    - Signal
    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::AddWork
    - EXPECT_EQ
    - GetThreadLocal::set_ptr
    - butil::DelegateSimpleThreadPool::Start
    - reinterpret_cast<ThreadLocalTesterBase*>
    - SetThreadLocal::set_value
    - butil::DelegateSimpleThreadPool::JoinAll
    - static_cast<ThreadLocalTesterBase*>
    - butil::WaitableEvent::Reset
    - butil::ThreadLocalPointer::ThreadLocalPointer
    - butil::WaitableEvent::Wait
    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::Set
    - EXPECT_TRUE
    - butil::ThreadLocalBoolean::ThreadLocalBoolean
    - butil::ThreadLocalBoolean::Get
    - EXPECT_FALSE
    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:
    - bvar::Adder::Adder
    - ASSERT_TRUE
    - bvar::Adder::get_value
    - ASSERT_EQ
    - bvar::Adder::valid
    - boost::any_cast<unsigned int>
    - ASSERT_DOUBLE_EQ
    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::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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::atomic*::fetch_add
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - butil::atomic::load
    - pthread_create
    - pthread_join
    - EXPECT_EQ
    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:
    - bvar::Adder::Adder
    - pthread_create
    - EXPECT_EQ
    - bvar::Adder::get_value
    - pthread_join
    - EXPECT_TRUE
    - bvar::Adder::valid
    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:
    - std::ostringstream::str
    - start_perf_test_with_adder
    - start_perf_test_with_atomic
    - LOG
    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:
    - bvar::Miner::Miner
    - bvar::Miner::get_value
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - ASSERT_EQ
    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_TRUE
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - bvar::Maxer::Maxer
    - ASSERT_EQ
    - bvar::Maxer::get_value
    - 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:
    - valid
    - ASSERT_TRUE
    - get_value
    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: 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: 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::cpuwide_time_us
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:221,1
    - Dst: butil::cpuwide_time_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:
    - bvar::Miner::Miner
    - bvar::Adder::Adder
    - logging::StringSink::find
    - bvar::Adder::get_value
    - SetLogSink
    - ASSERT_NE
    - butil::cpuwide_time_us
    - LOG
    - bvar::Maxer::Maxer
    - ASSERT_EQ
    - usleep
    - bvar::Maxer::get_value
    linkageType: ''
    returnType: void
    signature: void ReducerTest_window()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReducerTest_window
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:251,1
    - Dst: 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: 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:
    - sleep
    - logging::StringSink::find
    - SetLogSink
    - ReducerTest_window
    - ASSERT_NE
    - ASSERT_EQ
    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:
    - StringAppenderResult::StringAppenderResult
    - pthread_self
    - LOG
    - butil::string_printf
    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:
    - bvar::Adder::Adder
    - pthread_create
    - strtoll
    - std::string::c_str
    - butil::StringSplitter::length
    - bvar::Adder::get_value
    - butil::StringSplitter::field
    - butil::hash_map::size
    - pthread_join
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - usleep
    - memcmp
    - arraysize
    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:
    - sleep
    - bvar::Adder::Adder
    - 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:
    - bvar::Adder::Adder
    - ASSERT_TRUE
    - bvar::Adder::get_value
    - ASSERT_EQ
    - bvar::Adder::valid
    - boost::any_cast<unsigned int>
    - ASSERT_DOUBLE_EQ
    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::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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::atomic*::fetch_add
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:
    - butil::atomic::load
    - pthread_create
    - pthread_join
    - EXPECT_EQ
    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:
    - bvar::Adder::Adder
    - pthread_create
    - EXPECT_EQ
    - bvar::Adder::get_value
    - pthread_join
    - EXPECT_TRUE
    - bvar::Adder::valid
    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:
    - std::ostringstream::str
    - start_perf_test_with_adder
    - start_perf_test_with_atomic
    - LOG
    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:
    - bvar::Miner::Miner
    - bvar::Miner::get_value
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - ASSERT_EQ
    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_TRUE
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - bvar::Maxer::Maxer
    - ASSERT_EQ
    - bvar::Maxer::get_value
    - 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:
    - valid
    - ASSERT_TRUE
    - get_value
    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: 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: 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::cpuwide_time_us
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:221,1
    - Dst: butil::cpuwide_time_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:
    - bvar::Miner::Miner
    - bvar::Adder::Adder
    - logging::StringSink::find
    - bvar::Adder::get_value
    - SetLogSink
    - ASSERT_NE
    - butil::cpuwide_time_us
    - LOG
    - bvar::Maxer::Maxer
    - ASSERT_EQ
    - usleep
    - bvar::Maxer::get_value
    linkageType: ''
    returnType: void
    signature: void ReducerTest_window()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ReducerTest_window
      Src: /src/brpc/test/bvar_reducer_unittest.cpp:251,1
    - Dst: 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: 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:
    - sleep
    - logging::StringSink::find
    - SetLogSink
    - ReducerTest_window
    - ASSERT_NE
    - ASSERT_EQ
    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:
    - StringAppenderResult::StringAppenderResult
    - pthread_self
    - LOG
    - butil::string_printf
    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:
    - bvar::Adder::Adder
    - pthread_create
    - strtoll
    - std::string::c_str
    - butil::StringSplitter::length
    - bvar::Adder::get_value
    - butil::StringSplitter::field
    - butil::hash_map::size
    - pthread_join
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - usleep
    - memcmp
    - arraysize
    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:
    - sleep
    - bvar::Adder::Adder
    - 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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::ToString
    - 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:
    - StackTrace::OutputToStream
    - StackTrace::Addresses
    - EXPECT_EQ
    - std::string::find
    - StackTrace::ToString
    - ASSERT_GE
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::ostringstream::str
    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:
    - malloc
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - StackTrace::CopyAddressTo
    - VLOG
    - StackTrace::FrameCount
    - free
    - ASSERT_EQ
    - std::ostringstream::str
    - memcmp
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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_EQ
    - butil::debug::internal::itoa_r
    - butil::BaseIteratorRangeToNumberTraits::max
    - ADD_FAILURE
    - brpc::GetJsService::jquery_min
    - butil::debug::itoa_r_wrapper
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::ToString
    - 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:
    - StackTrace::OutputToStream
    - StackTrace::Addresses
    - EXPECT_EQ
    - std::string::find
    - StackTrace::ToString
    - ASSERT_GE
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::ostringstream::str
    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:
    - malloc
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - StackTrace::CopyAddressTo
    - VLOG
    - StackTrace::FrameCount
    - free
    - ASSERT_EQ
    - std::ostringstream::str
    - memcmp
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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_EQ
    - butil::debug::internal::itoa_r
    - butil::BaseIteratorRangeToNumberTraits::max
    - ADD_FAILURE
    - brpc::GetJsService::jquery_min
    - butil::debug::itoa_r_wrapper
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::ToString
    - 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:
    - StackTrace::OutputToStream
    - StackTrace::Addresses
    - EXPECT_EQ
    - std::string::find
    - StackTrace::ToString
    - ASSERT_GE
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::ostringstream::str
    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:
    - malloc
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - StackTrace::CopyAddressTo
    - VLOG
    - StackTrace::FrameCount
    - free
    - ASSERT_EQ
    - std::ostringstream::str
    - memcmp
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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_EQ
    - butil::debug::internal::itoa_r
    - butil::BaseIteratorRangeToNumberTraits::max
    - ADD_FAILURE
    - brpc::GetJsService::jquery_min
    - butil::debug::itoa_r_wrapper
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::ToString
    - 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:
    - StackTrace::OutputToStream
    - StackTrace::Addresses
    - EXPECT_EQ
    - std::string::find
    - StackTrace::ToString
    - ASSERT_GE
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::ostringstream::str
    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:
    - malloc
    - StackTrace::Addresses
    - StackTrace::OutputToStream
    - StackTrace::CopyAddressTo
    - VLOG
    - StackTrace::FrameCount
    - free
    - ASSERT_EQ
    - std::ostringstream::str
    - memcmp
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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:
    - CHECK_LE
    - EXPECT_TRUE
    - std::string
    - butil::debug::internal::itoa_r
    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_EQ
    - butil::debug::internal::itoa_r
    - butil::BaseIteratorRangeToNumberTraits::max
    - ADD_FAILURE
    - brpc::GetJsService::jquery_min
    - butil::debug::itoa_r_wrapper
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::debug::StackTrace::StackTrace
    - butil::debug::StackTrace::ToString
    - 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:
    - std::string::c_str
    - scoped_ptr::UnSetVar
    - EXPECT_STREQ
    - EXPECT_TRUE
    - scoped_ptr::SetVar
    - scoped_ptr::GetVar
    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_EQ
    - EXPECT_TRUE
    - scoped_ptr::SetVar
    - scoped_ptr::HasVar
    - scoped_ptr::GetVar
    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:
    - scoped_ptr::UnSetVar
    - EXPECT_TRUE
    - scoped_ptr::SetVar
    - scoped_ptr::HasVar
    - EXPECT_FALSE
    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:
    - string16
    - EXPECT_EQ
    - butil::AlterEnvironment
    - EnvironmentMap::clear
    - EXPECT_TRUE
    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_EQ
    - butil::AlterEnvironment
    - std::string
    - EnvironmentMap::clear
    - EXPECT_TRUE
    - scoped_ptr::scoped_ptr
    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:
    - std::string::c_str
    - scoped_ptr::UnSetVar
    - EXPECT_STREQ
    - EXPECT_TRUE
    - scoped_ptr::SetVar
    - scoped_ptr::GetVar
    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_EQ
    - EXPECT_TRUE
    - scoped_ptr::SetVar
    - scoped_ptr::HasVar
    - scoped_ptr::GetVar
    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:
    - scoped_ptr::UnSetVar
    - EXPECT_TRUE
    - scoped_ptr::SetVar
    - scoped_ptr::HasVar
    - EXPECT_FALSE
    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:
    - string16
    - EXPECT_EQ
    - butil::AlterEnvironment
    - EnvironmentMap::clear
    - EXPECT_TRUE
    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_EQ
    - butil::AlterEnvironment
    - std::string
    - EnvironmentMap::clear
    - EXPECT_TRUE
    - scoped_ptr::scoped_ptr
    linkageType: ''
    returnType: void
    signature: void TEST_F(EnvironmentTest, AlterEnvironment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: uname
      Src: /src/brpc/test/bthread_fd_unittest.cpp:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 63
    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: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    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:92,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:94,1
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:100,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:106,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:107,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:111,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:113,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 117
    functionName: process_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - kevent
    - LOG
    - write
    - read
    - epoll_ctl
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:120,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:133,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:133,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:138,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:142,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:142,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:151,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:151,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:164,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:166,1
    - Dst: bthread_startv
      Src: /src/brpc/test/bthread_fd_unittest.cpp:182,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:186,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:188,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 194
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - bthread_usleep
    - bthread_fd_wait
    - PLOG
    - kevent
    - bthread_startv
    - process_thread
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:200,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:207,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:211,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:211,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:212,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:215,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:218,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 223
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_fd_wait
    - PLOG
    - berror
    - LOG
    - write
    - read
    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: 232
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 232
    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:262,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:264,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:270,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_fd_unittest.cpp:270,1
    - Dst: reset
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:273,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_fd_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:276,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:276,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:276,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:283,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:296,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:298,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:298,1
    - Dst: reset
      Src: /src/brpc/test/bthread_fd_unittest.cpp:300,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:300,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:306,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:306,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_fd_unittest.cpp:312,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:313,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:314,1
    - Dst: reset
      Src: /src/brpc/test/bthread_fd_unittest.cpp:317,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:317,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:321,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:323,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:323,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:329,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:333,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:335,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:342,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:342,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:346,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:346,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:349,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:351,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:355,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 236
    functionDepth: 2
    functionLinenumber: 236
    functionLinenumberEnd: 360
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketMeta::SocketMeta
    - bthread_join
    - butil::Timer::u_elapsed
    - pthread_join
    - LOG
    - ASSERT_EQ
    - kqueue
    - butil::Timer::start
    - epoll_ctl
    - pthread_create
    - butil::Timer::stop
    - epoll_create
    - kevent
    - fcntl
    - get
    - butil::Timer::Timer
    - ProfilerStart
    - bthread_start_urgent
    - EpollMeta::EpollMeta
    - ProfilerStop
    - ASSERT_GT
    - reset
    - socketpair
    - bthread_usleep
    - butil::make_non_blocking
    - fmix32
    - ClientMeta::ClientMeta
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:376,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:380,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:380,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: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:384,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:387,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:388,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:395,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:396,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:398,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 400
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - epoll_create
    - berror
    - ASSERT_EQ
    - close
    - epoll_ctl
    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:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:406,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:408,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:410,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 412
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - epoll_ctl
    - close
    - 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:417,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:422,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_fd_unittest.cpp:426,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 428
    functionName: epoll_waiter
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - kevent
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * epoll_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:432,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:437,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:438,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:438,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:439,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:441,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:442,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:444,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:445,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 447
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_usleep
    - epoll_create
    - pthread_join
    - bthread::interrupt_pthread
    - ASSERT_EQ
    - kqueue
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:450,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:451,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 453
    functionName: close_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_close
    - bthread_usleep
    - EXPECT_EQ
    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:458,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:465,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:472,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:474,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:478,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:478,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:479,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:486,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:487,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:488,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:489,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:489,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 490
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_join
    - pipe
    - bthread_fd_wait
    - ASSERT_EQ
    - bthread_fd_timedwait
    - butil::Timer::start
    - bthread_close
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:493,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:495,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 500
    functionName: wait_for_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_fd_timedwait
    - butil::milliseconds_from_now
    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:504,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:508,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:508,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:509,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:512,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:512,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:513,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:514,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:515,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 517
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - pipe
    - butil::Timer::stop
    - pthread_join
    - ASSERT_EQ
    - butil::Timer::start
    - bthread_close
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:523,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:523,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:524,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:526,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:527,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:527,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:528,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:529,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:533,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:535,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 519
    functionDepth: 1
    functionLinenumber: 519
    functionLinenumberEnd: 540
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_join
    - pipe
    - ASSERT_EQ
    - bthread_fd_timedwait
    - butil::Timer::start
    - bthread_close
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:544,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:546,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 542
    functionDepth: 1
    functionLinenumber: 542
    functionLinenumberEnd: 548
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_close
    - 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:552,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:553,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 555
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_close
    - 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:559,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:562,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:564,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:565,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 567
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_close
    - pipe
    - 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:572,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:574,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:581,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:582,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:583,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:585,1
    - Dst: bthread_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:586,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:593,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:593,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:594,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:595,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:596,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:598,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:604,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:604,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 571
    functionDepth: 1
    functionLinenumber: 571
    functionLinenumberEnd: 606
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::is_blocking
    - butil::hostname2endpoint
    - bthread_timed_connect
    - butil::milliseconds_from_now
    - endpoint2sockaddr
    - ASSERT_LE
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - socket
    - bthread_connect
    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:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:610,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:613,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:613,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:614,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:615,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:619,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:620,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:621,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:622,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:624,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:625,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:634,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/bthread_fd_unittest.cpp:634,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 636
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 636
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::hostname2endpoint
    - bthread_timed_connect
    - ASSERT_GE
    - butil::milliseconds_from_now
    - LOG
    - endpoint2sockaddr
    - butil::cpuwide_time_ms
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - socket
    - butil::tcp_connect
    - butil::is_connected
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 638
    functionDepth: 0
    functionLinenumber: 638
    functionLinenumberEnd: 642
    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:646,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_fd_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:647,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:648,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:648,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 649
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_stop
    - ASSERT_EQ
    - bthread_join
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:652,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 654
    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:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 63
    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: 81
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 81
    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:92,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:94,1
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:100,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:106,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:107,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:111,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:113,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 117
    functionName: process_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 1
    functionsReached:
    - kevent
    - LOG
    - write
    - read
    - epoll_ctl
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void * process_thread(void* arg)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:120,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:133,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:133,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:138,1
    - Dst: epoll_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:142,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:142,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:151,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:151,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:164,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:166,1
    - Dst: bthread_startv
      Src: /src/brpc/test/bthread_fd_unittest.cpp:182,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:186,1
    - Dst: process_thread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:188,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 42
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 194
    functionName: epoll_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - bthread_usleep
    - bthread_fd_wait
    - PLOG
    - kevent
    - bthread_startv
    - process_thread
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * epoll_thread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: write
      Src: /src/brpc/test/bthread_fd_unittest.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:200,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:207,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:209,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:211,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:211,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:212,1
    - Dst: read
      Src: /src/brpc/test/bthread_fd_unittest.cpp:215,1
    - Dst: PLOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:218,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 196
    functionDepth: 1
    functionLinenumber: 196
    functionLinenumberEnd: 223
    functionName: client_thread
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_fd_wait
    - PLOG
    - berror
    - LOG
    - write
    - read
    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: 232
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 232
    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:262,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:264,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:270,1
    - Dst: socketpair
      Src: /src/brpc/test/bthread_fd_unittest.cpp:270,1
    - Dst: reset
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: SocketMeta::SocketMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:272,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:273,1
    - Dst: fmix32
      Src: /src/brpc/test/bthread_fd_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:276,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:276,1
    - Dst: fcntl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:276,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:283,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:296,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:298,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:298,1
    - Dst: reset
      Src: /src/brpc/test/bthread_fd_unittest.cpp:300,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:300,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:306,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:306,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:308,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bthread_fd_unittest.cpp:312,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:313,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:314,1
    - Dst: reset
      Src: /src/brpc/test/bthread_fd_unittest.cpp:317,1
    - Dst: EpollMeta::EpollMeta
      Src: /src/brpc/test/bthread_fd_unittest.cpp:317,1
    - Dst: get
      Src: /src/brpc/test/bthread_fd_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:321,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:323,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:323,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:329,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:331,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:333,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:335,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:342,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:342,1
    - Dst: EV_SET
      Src: /src/brpc/test/bthread_fd_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:346,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:346,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:349,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:351,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:355,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 236
    functionDepth: 2
    functionLinenumber: 236
    functionLinenumberEnd: 360
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - SocketMeta::SocketMeta
    - bthread_join
    - butil::Timer::u_elapsed
    - pthread_join
    - LOG
    - ASSERT_EQ
    - kqueue
    - butil::Timer::start
    - epoll_ctl
    - pthread_create
    - butil::Timer::stop
    - epoll_create
    - kevent
    - fcntl
    - get
    - butil::Timer::Timer
    - ProfilerStart
    - bthread_start_urgent
    - EpollMeta::EpollMeta
    - ProfilerStop
    - ASSERT_GT
    - reset
    - socketpair
    - bthread_usleep
    - butil::make_non_blocking
    - fmix32
    - ClientMeta::ClientMeta
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, ping_pong)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:376,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:380,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:380,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: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:384,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:387,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:388,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:395,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:396,1
    - Dst: berror
      Src: /src/brpc/test/bthread_fd_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:398,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 400
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pipe
    - epoll_create
    - berror
    - ASSERT_EQ
    - close
    - epoll_ctl
    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:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:406,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:408,1
    - Dst: epoll_ctl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:410,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 402
    functionDepth: 0
    functionLinenumber: 402
    functionLinenumberEnd: 412
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - epoll_ctl
    - close
    - 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:417,1
    - Dst: kevent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:422,1
    - Dst: pthread_self
      Src: /src/brpc/test/bthread_fd_unittest.cpp:426,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 428
    functionName: epoll_waiter
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_self
    - kevent
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * epoll_waiter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:432,1
    - Dst: kqueue
      Src: /src/brpc/test/bthread_fd_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:437,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:438,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:438,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:439,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:441,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:442,1
    - Dst: bthread::interrupt_pthread
      Src: /src/brpc/test/bthread_fd_unittest.cpp:444,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:445,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:446,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 430
    functionDepth: 1
    functionLinenumber: 430
    functionLinenumberEnd: 447
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_usleep
    - epoll_create
    - pthread_join
    - bthread::interrupt_pthread
    - ASSERT_EQ
    - kqueue
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt_pthread)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_fd_unittest.cpp:450,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:451,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 453
    functionName: close_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_close
    - bthread_usleep
    - EXPECT_EQ
    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:458,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:465,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:472,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:474,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:478,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:478,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:479,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:484,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:486,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:487,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:488,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:489,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:489,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 490
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_join
    - pipe
    - bthread_fd_wait
    - ASSERT_EQ
    - bthread_fd_timedwait
    - butil::Timer::start
    - bthread_close
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:493,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:495,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 500
    functionName: wait_for_the_fd
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_fd_timedwait
    - butil::milliseconds_from_now
    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:504,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_fd_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:508,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:508,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:509,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:512,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:512,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:513,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:514,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:515,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:516,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 502
    functionDepth: 1
    functionLinenumber: 502
    functionLinenumberEnd: 517
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - pipe
    - butil::Timer::stop
    - pthread_join
    - ASSERT_EQ
    - butil::Timer::start
    - bthread_close
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:523,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_fd_unittest.cpp:523,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_fd_unittest.cpp:524,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_fd_unittest.cpp:525,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:526,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:527,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:527,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:528,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/bthread_fd_unittest.cpp:529,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_fd_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:533,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:533,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:535,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/test/bthread_fd_unittest.cpp:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:539,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 519
    functionDepth: 1
    functionLinenumber: 519
    functionLinenumberEnd: 540
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - bthread_join
    - pipe
    - ASSERT_EQ
    - bthread_fd_timedwait
    - butil::Timer::start
    - bthread_close
    - ASSERT_LT
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_urgent
    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:544,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:546,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 542
    functionDepth: 1
    functionLinenumber: 542
    functionLinenumberEnd: 548
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_close
    - 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:552,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:553,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 555
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_close
    - 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:559,1
    - Dst: pipe
      Src: /src/brpc/test/bthread_fd_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:562,1
    - Dst: close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:562,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:564,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:565,1
    - Dst: bthread_close
      Src: /src/brpc/test/bthread_fd_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 567
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_close
    - pipe
    - 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:572,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:574,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:580,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:581,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:582,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:583,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:585,1
    - Dst: bthread_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:586,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:593,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:593,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:594,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:595,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:596,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:598,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:599,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:602,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:604,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/bthread_fd_unittest.cpp:604,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 571
    functionDepth: 1
    functionLinenumber: 571
    functionLinenumberEnd: 606
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::is_blocking
    - butil::hostname2endpoint
    - bthread_timed_connect
    - butil::milliseconds_from_now
    - endpoint2sockaddr
    - ASSERT_LE
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - socket
    - bthread_connect
    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:609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:610,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/bthread_fd_unittest.cpp:610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:613,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/bthread_fd_unittest.cpp:613,1
    - Dst: socket
      Src: /src/brpc/test/bthread_fd_unittest.cpp:614,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/bthread_fd_unittest.cpp:615,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:619,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:620,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/bthread_fd_unittest.cpp:621,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_fd_unittest.cpp:622,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_fd_unittest.cpp:624,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:625,1
    - Dst: bthread_timed_connect
      Src: /src/brpc/test/bthread_fd_unittest.cpp:629,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:634,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/bthread_fd_unittest.cpp:634,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 636
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 636
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::hostname2endpoint
    - bthread_timed_connect
    - ASSERT_GE
    - butil::milliseconds_from_now
    - LOG
    - endpoint2sockaddr
    - butil::cpuwide_time_ms
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - socket
    - butil::tcp_connect
    - butil::is_connected
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/bthread_fd_unittest.cpp:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 638
    functionDepth: 0
    functionLinenumber: 638
    functionLinenumberEnd: 642
    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:646,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_fd_unittest.cpp:646,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:647,1
    - Dst: bthread_stop
      Src: /src/brpc/test/bthread_fd_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_fd_unittest.cpp:648,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_fd_unittest.cpp:648,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 649
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_stop
    - ASSERT_EQ
    - bthread_join
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:652,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/bthread_fd_unittest.cpp:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 654
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_fd_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestConnectInterrupt
    linkageType: ''
    returnType: void
    signature: void TEST(FDTest, interrupt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:98,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:99,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 102
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 4
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:106,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:108,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:109,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:109,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:110,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:111,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:111,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:112,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 114
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:118,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:123,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:125,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:125,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:126,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:126,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:127,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 132
    functionName: ProbeMysql
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeMysql()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:140,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:141,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:141,1
    - Dst: ProbeMysql
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:142,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:144,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:147,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:148,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:153,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:154,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:160,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:161,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:163,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:164,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:164,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:165,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:166,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:169,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:172,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:172,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:173,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:174,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:175,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:175,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:176,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:176,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:179,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:181,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:183,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:184,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:186,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:188,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:195,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:197,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:198,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:199,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:203,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:204,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:205,1
    - Dst: ProbeMysql
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:213,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:215,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:218,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:220,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 222
    functionName: RunMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - printf
    - clear
    - ProbeMysql
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void RunMysqlServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:230,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:231,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:234,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:235,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' channel'
    - ' sql'
    - resp
    argTypes:
    - brpc::Channel
    - std::string
    - brpc::MysqlResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 237
    functionName: RunPlain
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::MysqlRequest::MysqlRequest
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunPlain(brpc::Channel& channel, const std::string& sql,\n                     brpc::MysqlResponse*
      resp)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:244,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:247,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:249,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' channel'
    - tx
    - ' sql'
    - resp
    argTypes:
    - brpc::Channel
    - brpc::MysqlTransaction*
    - std::string
    - brpc::MysqlResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 250
    functionName: RunInTx
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Failed
    - CallMethod
    - brpc::Controller::Controller
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunInTx(brpc::Channel& channel, const brpc::MysqlTransaction*
      tx,\n                    const std::string& sql, brpc::MysqlResponse* resp)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:254,1
    - Dst: ::testing::AssertionFailure
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:255,1
    - Dst: reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:257,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:258,1
    - Dst: ::testing::AssertionFailure
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:259,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:260,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:261,1
    - Dst: is_ok
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:263,1
    - Dst: ::testing::AssertionFailure
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:264,1
    - Dst: type
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:264,1
    - Dst: ::testing::AssertionSuccess
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:266,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' resp'
    argTypes:
    - brpc::MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 267
    functionName: ExpectOk
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - ::testing::AssertionSuccess
    - reply_size
    - is_ok
    - ::testing::AssertionFailure
    - error
    - is_error
    - type
    - reply
    linkageType: ''
    returnType: ::testing::AssertionResult
    signature: ::testing::AssertionResult ExpectOk(const brpc::MysqlResponse& resp)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:272,1
    - Dst: reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:275,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:276,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:279,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:279,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' resp'
    argTypes:
    - brpc::MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 280
    functionName: ResultRowCount
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_resultset
    - reply_size
    - row_count
    - static_cast<int64_t>
    - reply
    linkageType: ''
    returnType: int64_t
    signature: int64_t ResultRowCount(const brpc::MysqlResponse& resp)
  - 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: MysqlTxnIntegrationTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:289,1
    - Dst: MysqlTxnIntegrationTest::NoServer
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:290,1
    - Dst: GTEST_SKIP
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:291,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:295,1
    - Dst: MysqlTxnIntegrationTest::InitChannel
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:295,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:297,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:300,1
    - Dst: MysqlTxnIntegrationTest::InitChannel
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:301,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:301,1
    - Dst: MysqlTxnIntegrationTest::Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:302,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:303,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:303,1
    - Dst: MysqlTxnIntegrationTest::Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:304,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:308,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:308,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 309
    functionName: MysqlTxnIntegrationTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - MysqlTxnIntegrationTest::NoServer
    - MysqlTxnIntegrationTest::InitChannel
    - GTEST_SKIP
    - ASSERT_TRUE
    - RunPlain
    - ExpectOk
    - brpc::MysqlResponse::MysqlResponse
    - MysqlTxnIntegrationTest::Table
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MysqlTxnIntegrationTest::NoServer
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:312,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:315,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:316,1
    - Dst: MysqlTxnIntegrationTest::Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 317
    functionName: MysqlTxnIntegrationTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlResponse::MysqlResponse
    - MysqlTxnIntegrationTest::NoServer
    - MysqlTxnIntegrationTest::Table
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:322,1
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:322,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:324,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:327,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:331,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:331,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - channel
    - ' schema'
    argTypes:
    - brpc::Channel*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 333
    functionName: MysqlTxnIntegrationTest::InitChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - c_str
    - brpc::Channel*::Init
    - snprintf
    - reset
    - get
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: bool
    signature: bool InitChannel(brpc::Channel* channel, const std::string& schema)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 335
    functionName: MysqlTxnIntegrationTest::Table
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string Table() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:350,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:355,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:356,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:357,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:357,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:357,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:358,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:360,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:361,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:362,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:362,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:364,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:364,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:364,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:365,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:365,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:368,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:369,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:369,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:371,1
    - Dst: field_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:371,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:372,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:373,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:373,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:379,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:380,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:381,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:381,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:381,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:382,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:384,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:384,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:385,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:387,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:387,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:388,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:388,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:393,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:395,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:395,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:395,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:396,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:397,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:397,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:398,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:399,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:401,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:401,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:401,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:402,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:402,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:404,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:405,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:406,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:406,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:407,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 409
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewMysqlTransaction
    - field
    - ASSERT_EQ
    - ASSERT_TRUE
    - field_count
    - next
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - ExpectOk
    - Table
    - EXPECT_EQ
    - brpc::MysqlResponse::reply
    - is_resultset
    - RunInTx
    - brpc::MysqlTransactionUniquePtr::commit
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::rollback
    - RunPlain
    - brpc::MysqlTransactionOptions
    - ResultRowCount
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, CommitPublishesRollbackRestores)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:416,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:416,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:417,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:419,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:420,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:420,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:420,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:421,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:423,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:423,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:426,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:426,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:426,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:427,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:428,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:428,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:430,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:431,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:432,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:432,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:433,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:433,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:437,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:437,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:437,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:438,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:438,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:441,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:444,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:444,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:444,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:445,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 446
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - EXPECT_EQ
    - ASSERT_TRUE
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::reply
    - is_resultset
    - RunPlain
    - next
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - ASSERT_EQ
    - brpc::MysqlTransactionUniquePtr::rollback
    - ExpectOk
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, OwnWriteVisibleOthersIsolated)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:453,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:456,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:456,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:457,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:459,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:460,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:460,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:460,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:461,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:461,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:467,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:467,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:469,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:469,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:470,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:470,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:471,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:471,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:471,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:472,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:474,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:474,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:475,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:475,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:477,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:477,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:477,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:478,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:480,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 481
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - EXPECT_EQ
    - ASSERT_TRUE
    - ResultRowCount
    - brpc::NewMysqlTransaction
    - RunInTx
    - brpc::MysqlResponse::reply
    - ExpectOk
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - brpc::MysqlTransactionUniquePtr::rollback
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, AutocommitOnDurableOffRollbackable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:488,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:493,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:493,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:494,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:495,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:495,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:495,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:496,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:498,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:498,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:499,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:499,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:499,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:500,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:502,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:505,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:505,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:506,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:506,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:508,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:508,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:510,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:510,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:510,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:511,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:511,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:514,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:514,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:514,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:515,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:515,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:520,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:521,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:522,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:522,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:522,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:523,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:525,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:526,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:526,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:526,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:527,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:527,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:528,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:528,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:528,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:531,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:531,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:532,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:532,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:534,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:534,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:539,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:539,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:541,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:541,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:543,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:543,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:544,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:544,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:546,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:547,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:548,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:548,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:549,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 487
    functionDepth: 1
    functionLinenumber: 487
    functionLinenumberEnd: 551
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - EXPECT_EQ
    - ASSERT_TRUE
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::reply
    - RunPlain
    - is_resultset
    - next
    - brpc::MysqlTransactionUniquePtr::commit
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - ASSERT_EQ
    - ExpectOk
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, GroupedInsertsThenSavepointPartialUndo)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:557,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:560,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:560,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:561,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:563,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:563,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:567,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:568,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:570,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:570,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:570,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:571,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:573,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:573,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:574,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:575,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:575,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:577,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:577,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:579,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:579,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:587,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:588,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:589,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:589,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:589,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:590,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:592,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:592,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:593,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:594,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:594,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:596,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:598,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:598,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:601,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:601,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 603
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - brpc::MysqlResponse::reply
    - ASSERT_TRUE
    - EXPECT_EQ
    - brpc::NewMysqlTransaction
    - RunInTx
    - RunPlain
    - ASSERT_GE
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - error
    - is_error
    - brpc::MysqlResponse::reply_size
    - brpc::MysqlTransactionUniquePtr::rollback
    - ExpectOk
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, DuplicateKeyAndReadOnlyWriteReportErr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:98,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:99,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 102
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 6
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:106,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:108,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:109,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:109,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:110,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:111,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:111,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:112,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:112,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 114
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:118,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:123,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:125,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:125,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:126,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:126,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:127,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:128,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 132
    functionName: ProbeMysql
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 1
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeMysql()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:140,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:141,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:141,1
    - Dst: ProbeMysql
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:142,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:144,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:147,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:148,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:153,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:154,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:160,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:161,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:163,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:164,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:164,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:165,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:166,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:169,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:172,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:172,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:173,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:174,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:175,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:175,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:176,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:176,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:179,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:181,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:183,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:184,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:186,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:188,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:195,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:197,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:198,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:199,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:203,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:204,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:205,1
    - Dst: ProbeMysql
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:213,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:215,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:218,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:220,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 222
    functionName: RunMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - printf
    - clear
    - ProbeMysql
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void RunMysqlServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:230,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:231,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:234,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:235,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - ' channel'
    - ' sql'
    - resp
    argTypes:
    - brpc::Channel
    - std::string
    - brpc::MysqlResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 237
    functionName: RunPlain
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 7
    functionsReached:
    - CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::MysqlRequest::MysqlRequest
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunPlain(brpc::Channel& channel, const std::string& sql,\n                     brpc::MysqlResponse*
      resp)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:244,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:247,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:249,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 4
    argNames:
    - ' channel'
    - tx
    - ' sql'
    - resp
    argTypes:
    - brpc::Channel
    - brpc::MysqlTransaction*
    - std::string
    - brpc::MysqlResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 250
    functionName: RunInTx
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 5
    functionsReached:
    - brpc::Controller::Failed
    - CallMethod
    - brpc::Controller::Controller
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunInTx(brpc::Channel& channel, const brpc::MysqlTransaction*
      tx,\n                    const std::string& sql, brpc::MysqlResponse* resp)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:254,1
    - Dst: ::testing::AssertionFailure
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:255,1
    - Dst: reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:257,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:258,1
    - Dst: ::testing::AssertionFailure
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:259,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:260,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:261,1
    - Dst: is_ok
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:263,1
    - Dst: ::testing::AssertionFailure
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:264,1
    - Dst: type
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:264,1
    - Dst: ::testing::AssertionSuccess
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:266,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' resp'
    argTypes:
    - brpc::MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 267
    functionName: ExpectOk
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 6
    functionsReached:
    - ::testing::AssertionSuccess
    - reply_size
    - is_ok
    - ::testing::AssertionFailure
    - error
    - is_error
    - type
    - reply
    linkageType: ''
    returnType: ::testing::AssertionResult
    signature: ::testing::AssertionResult ExpectOk(const brpc::MysqlResponse& resp)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:272,1
    - Dst: reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:275,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:276,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:279,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:279,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' resp'
    argTypes:
    - brpc::MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 280
    functionName: ResultRowCount
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 4
    functionsReached:
    - is_resultset
    - reply_size
    - row_count
    - static_cast<int64_t>
    - reply
    linkageType: ''
    returnType: int64_t
    signature: int64_t ResultRowCount(const brpc::MysqlResponse& resp)
  - 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: MysqlTxnIntegrationTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:289,1
    - Dst: MysqlTxnIntegrationTest::NoServer
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:290,1
    - Dst: GTEST_SKIP
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:291,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:295,1
    - Dst: MysqlTxnIntegrationTest::InitChannel
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:295,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:296,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:297,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:300,1
    - Dst: MysqlTxnIntegrationTest::InitChannel
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:301,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:301,1
    - Dst: MysqlTxnIntegrationTest::Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:302,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:303,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:303,1
    - Dst: MysqlTxnIntegrationTest::Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:304,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:308,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:308,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 309
    functionName: MysqlTxnIntegrationTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - MysqlTxnIntegrationTest::NoServer
    - MysqlTxnIntegrationTest::InitChannel
    - GTEST_SKIP
    - ASSERT_TRUE
    - RunPlain
    - ExpectOk
    - brpc::MysqlResponse::MysqlResponse
    - MysqlTxnIntegrationTest::Table
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MysqlTxnIntegrationTest::NoServer
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:312,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:315,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:316,1
    - Dst: MysqlTxnIntegrationTest::Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 317
    functionName: MysqlTxnIntegrationTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlResponse::MysqlResponse
    - MysqlTxnIntegrationTest::NoServer
    - MysqlTxnIntegrationTest::Table
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:322,1
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:322,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:324,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:327,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:331,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:331,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - channel
    - ' schema'
    argTypes:
    - brpc::Channel*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 333
    functionName: MysqlTxnIntegrationTest::InitChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - c_str
    - brpc::Channel*::Init
    - snprintf
    - reset
    - get
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: bool
    signature: bool InitChannel(brpc::Channel* channel, const std::string& schema)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 335
    functionName: MysqlTxnIntegrationTest::Table
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string Table() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:350,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:355,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:356,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:357,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:357,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:357,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:358,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:360,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:360,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:361,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:362,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:362,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:364,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:364,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:364,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:365,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:365,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:368,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:369,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:369,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:371,1
    - Dst: field_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:371,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:372,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:372,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:373,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:373,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:379,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:380,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:381,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:381,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:381,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:382,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:384,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:384,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:385,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:385,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:387,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:387,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:387,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:388,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:388,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:393,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:395,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:395,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:395,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:396,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:397,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:397,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:398,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:399,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:401,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:401,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:401,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:402,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:402,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:404,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:405,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:406,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:406,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:407,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 409
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewMysqlTransaction
    - field
    - ASSERT_EQ
    - ASSERT_TRUE
    - field_count
    - next
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - ExpectOk
    - Table
    - EXPECT_EQ
    - brpc::MysqlResponse::reply
    - is_resultset
    - RunInTx
    - brpc::MysqlTransactionUniquePtr::commit
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::rollback
    - RunPlain
    - brpc::MysqlTransactionOptions
    - ResultRowCount
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, CommitPublishesRollbackRestores)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:416,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:416,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:417,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:419,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:420,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:420,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:420,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:421,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:423,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:423,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:426,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:426,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:426,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:427,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:428,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:428,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:430,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:431,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:432,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:432,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:433,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:433,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:437,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:437,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:437,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:438,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:438,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:441,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:444,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:444,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:444,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:445,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 446
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - EXPECT_EQ
    - ASSERT_TRUE
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::reply
    - is_resultset
    - RunPlain
    - next
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - ASSERT_EQ
    - brpc::MysqlTransactionUniquePtr::rollback
    - ExpectOk
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, OwnWriteVisibleOthersIsolated)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:453,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:456,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:456,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:457,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:459,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:459,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:460,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:460,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:460,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:461,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:461,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:467,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:467,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:469,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:469,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:469,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:470,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:470,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:471,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:471,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:471,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:472,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:474,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:474,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:475,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:475,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:477,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:477,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:477,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:478,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:478,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:480,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:480,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 481
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - EXPECT_EQ
    - ASSERT_TRUE
    - ResultRowCount
    - brpc::NewMysqlTransaction
    - RunInTx
    - brpc::MysqlResponse::reply
    - ExpectOk
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - brpc::MysqlTransactionUniquePtr::rollback
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, AutocommitOnDurableOffRollbackable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:488,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:493,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:493,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:494,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:495,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:495,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:495,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:496,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:498,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:498,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:499,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:499,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:499,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:500,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:502,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:505,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:505,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:506,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:506,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:508,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:508,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:510,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:510,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:510,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:511,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:511,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:514,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:514,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:514,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:515,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:515,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:520,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:521,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:522,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:522,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:522,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:523,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:525,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:526,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:526,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:526,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:527,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:527,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:528,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:528,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:528,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:529,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:531,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:531,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:532,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:532,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:532,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:534,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:534,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:539,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:539,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:541,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:541,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:543,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:543,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:544,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:544,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:546,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:547,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:548,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:548,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:549,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 487
    functionDepth: 1
    functionLinenumber: 487
    functionLinenumberEnd: 551
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - EXPECT_EQ
    - ASSERT_TRUE
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::reply
    - RunPlain
    - is_resultset
    - next
    - brpc::MysqlTransactionUniquePtr::commit
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - ASSERT_EQ
    - ExpectOk
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, GroupedInsertsThenSavepointPartialUndo)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:557,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:560,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:560,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:561,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:563,1
    - Dst: ExpectOk
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:563,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:567,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:568,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:570,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:570,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:570,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:571,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:573,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:573,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:574,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:575,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:575,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:576,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:577,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:577,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:579,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:579,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:587,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:588,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:589,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:589,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:589,1
    - Dst: Table
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:590,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:592,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:592,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:593,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:594,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:594,1
    - Dst: is_error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:596,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:598,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:598,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:601,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp:601,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 603
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_txn_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - Table
    - brpc::MysqlResponse::reply
    - ASSERT_TRUE
    - EXPECT_EQ
    - brpc::NewMysqlTransaction
    - RunInTx
    - RunPlain
    - ASSERT_GE
    - brpc::MysqlResponse::MysqlResponse
    - EXPECT_TRUE
    - brpc::MysqlTransactionUniquePtr::get
    - error
    - is_error
    - brpc::MysqlResponse::reply_size
    - brpc::MysqlTransactionUniquePtr::rollback
    - ExpectOk
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlTxnIntegrationTest, DuplicateKeyAndReadOnlyWriteReportErr)
  - 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::SetName
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    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::SetName
    - EXPECT_EQ
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    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::SetName
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    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::SetName
    - EXPECT_EQ
    - butil::ThreadIdNameManager::GetInstance
    - EXPECT_NE
    - butil::PlatformThread::CurrentId
    - butil::ThreadIdNameManager*::GetName
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - WeakPtr::WeakPtr
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - butil::get
    - WeakPtr::get
    - WeakPtr::WeakPtr
    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_EQ
    - WeakPtrFactory::GetWeakPtr
    - EXPECT_TRUE
    - WeakPtr::get
    - WeakPtr::WeakPtr
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - Target::AsWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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
    - AsWeakPtr
    - EXPECT_EQ
    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_EQ
    - WeakPtrFactory::HasWeakPtrs
    - WeakPtrFactory::GetWeakPtr
    - WeakPtrFactory::InvalidateWeakPtrs
    - EXPECT_TRUE
    - WeakPtr::get
    - EXPECT_FALSE
    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:
    - WeakPtrFactory::GetWeakPtr
    - EXPECT_TRUE
    - 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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - WeakPtr::WeakPtr
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - WeakPtrFactory::GetWeakPtr
    - butil::get
    - WeakPtr::get
    - WeakPtr::WeakPtr
    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_EQ
    - WeakPtrFactory::GetWeakPtr
    - EXPECT_TRUE
    - WeakPtr::get
    - WeakPtr::WeakPtr
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - WeakPtrFactory::GetWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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:
    - Target::AsWeakPtr
    - WeakPtr::get
    - EXPECT_EQ
    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
    - AsWeakPtr
    - EXPECT_EQ
    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_EQ
    - WeakPtrFactory::HasWeakPtrs
    - WeakPtrFactory::GetWeakPtr
    - WeakPtrFactory::InvalidateWeakPtrs
    - EXPECT_TRUE
    - WeakPtr::get
    - EXPECT_FALSE
    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:
    - WeakPtrFactory::GetWeakPtr
    - EXPECT_TRUE
    - 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:
    - pipe
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    - Socket::Create
    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::policy::PackEspRequest
    - brpc::EspMessage::body::append
    - call_id
    - brpc::EspMessage::EspMessage
    - brpc::policy::SerializeEspRequest
    - butil::IOBuf::size
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    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:
    - butil::IOPortal::IOPortal
    - brpc::EspMessage::EspMessage
    - brpc::EspMessage::body::size
    - brpc::policy::ParseEspMessage
    - ASSERT_EQ
    - brpc::ParseResult::message
    - butil::IOBuf::size
    - brpc::policy::ProcessEspResponse
    - ASSERT_FALSE
    - brpc::policy::PackEspRequest
    - brpc::Controller::Controller
    - brpc::Authenticator*::GenerateCredential
    - id
    - brpc::Controller::call_id
    - WriteResponse
    - brpc::EspMessage::body::append
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - ReAddress
    - brpc::ParseResult::error
    - brpc::policy::SerializeEspRequest
    - brpc::EspMessage::body::to_string
    - brpc::policy::global_esp_authenticator
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOPortal::append_from_file_descriptor
    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:
    - butil::IOPortal::IOPortal
    - brpc::Controller::Controller
    - WriteResponse
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - brpc::EspMessage::EspMessage
    - brpc::Controller::Failed
    - brpc::policy::ParseEspMessage
    - ReAddress
    - ASSERT_EQ
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - id
    - brpc::policy::ProcessEspResponse
    - 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:
    - pipe
    - brpc::SetTrackMeAddress
    - EXPECT_EQ
    - Socket::Create
    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::policy::PackEspRequest
    - brpc::EspMessage::body::append
    - call_id
    - brpc::EspMessage::EspMessage
    - brpc::policy::SerializeEspRequest
    - butil::IOBuf::size
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    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:
    - butil::IOPortal::IOPortal
    - brpc::EspMessage::EspMessage
    - brpc::EspMessage::body::size
    - brpc::policy::ParseEspMessage
    - ASSERT_EQ
    - brpc::ParseResult::message
    - butil::IOBuf::size
    - brpc::policy::ProcessEspResponse
    - ASSERT_FALSE
    - brpc::policy::PackEspRequest
    - brpc::Controller::Controller
    - brpc::Authenticator*::GenerateCredential
    - id
    - brpc::Controller::call_id
    - WriteResponse
    - brpc::EspMessage::body::append
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - ReAddress
    - brpc::ParseResult::error
    - brpc::policy::SerializeEspRequest
    - brpc::EspMessage::body::to_string
    - brpc::policy::global_esp_authenticator
    - butil::IOBuf::IOBuf
    - std::string::size
    - butil::IOPortal::append_from_file_descriptor
    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:
    - butil::IOPortal::IOPortal
    - brpc::Controller::Controller
    - WriteResponse
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - brpc::EspMessage::EspMessage
    - brpc::Controller::Failed
    - brpc::policy::ParseEspMessage
    - ReAddress
    - ASSERT_EQ
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - id
    - brpc::policy::ProcessEspResponse
    - 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:
    - mktime
    - butil::Time::FromTimeT
    - 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_EQ
    - Time::LocalExplode
    - Time
    - localtime_s
    - Time::ToTimeT
    - localtime_r
    - EXPECT_TRUE
    - butil::FromLocalExploded
    - 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::UnixEpoch
    - EXPECT_EQ
    - Time::ToJsTime
    - Time::ToDoubleT
    - butil::Time::FromDoubleT
    - butil::Time::FromJsTime
    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:
    - butil::Time::Now
    - EXPECT_EQ
    - Time::ToTimeVal
    - 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:
    - butil::Time::NowFromSystemTime
    - butil::FromUTCExploded
    - EXPECT_EQ
    - Time::UTCExplode
    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
    - Time::ToTimeT
    - EXPECT_EQ
    - Time::ToDoubleT
    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:
    - butil::TimeDelta::FromSeconds
    - Time::LocalExplode
    - butil::Time::Now
    - EXPECT_TRUE
    - butil::FromLocalExploded
    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:
    - butil::TimeDelta::FromSeconds
    - Time::UTCExplode
    - butil::Time::Now
    - butil::FromUTCExploded
    - EXPECT_TRUE
    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:
    - butil::Time::Now
    - EXPECT_EQ
    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:
    - asctime_s
    - time
    - brpc::ParsePbFromString
    - EXPECT_EQ
    - localtime_s
    - Time::ToTimeT
    - localtime_r
    - memset
    - EXPECT_TRUE
    - asctime_r
    - arraysize
    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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - Time::UTCExplode
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - Time::UTCExplode
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - Time::UTCExplode
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - brpc::ParsePbFromString
    - 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:
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - EXPECT_EQ
    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:
    - EXPECT_NE
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    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:
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - EXPECT_EQ
    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:
    - EXPECT_TRUE
    - Time::ToTimeT
    - brpc::ParsePbFromString
    - EXPECT_EQ
    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:
    - butil::Time::UnixEpoch
    - EXPECT_EQ
    - Time::UTCExplode
    - butil::TimeDelta::FromMicroseconds
    - Time::Exploded::HasValidValues
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    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_EQ
    - EXPECT_GT
    - butil::TimeDelta::FromDays
    - EXPECT_TRUE
    - TimeDelta
    - butil::TimeDelta::Max
    - TimeDelta::is_max
    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::FromMilliseconds
    - TimeDelta::InMillisecondsF
    - TimeDelta::InMilliseconds
    - EXPECT_TRUE
    - TimeDelta::InDays
    - TimeDelta::InMinutes
    - butil::TimeDelta::FromSecondsD
    - butil::TimeDelta::FromMillisecondsD
    - butil::TimeDelta::Max
    - std::numeric_limits<double>::infinity
    - TimeDelta::is_max
    - TimeDelta::ToInternalValue
    - butil::TimeDelta::FromSeconds
    - EXPECT_EQ
    - TimeDelta::InHours
    - butil::TimeDelta::FromMinutes
    - butil::BaseIteratorRangeToNumberTraits::max
    - TimeDelta::InMillisecondsRoundedUp
    - TimeDelta::InSeconds
    - butil::TimeDelta::FromHours
    - butil::TimeDelta::FromMicroseconds
    - butil::TimeDelta::FromDays
    - TimeDelta::InSecondsF
    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_EQ
    - Time
    - butil::Time::Max
    - butil::Time::Now
    - EXPECT_GT
    - Time::is_max
    - EXPECT_TRUE
    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:
    - butil::Time::FromTimeT
    - butil::Time::Max
    - static_cast<suseconds_t>
    - Time::ToTimeVal
    - Time::ToCFAbsoluteTime
    - butil::Time::FromCFAbsoluteTime
    - Time::ToTimeT
    - Time::ToJsTime
    - EXPECT_TRUE
    - std::numeric_limits<double>::infinity
    - EXPECT_EQ
    - butil::Time::FromTimeVal
    - butil::BaseIteratorRangeToNumberTraits::max
    - Time::ToDoubleT
    - Time::FromFileTime
    - Time::ToFileTime
    - butil::Time::FromDoubleT
    - Time::ToInternalValue
    - std::numeric_limits<CFAbsoluteTime>::infinity
    - Time::is_max
    - butil::Time::FromJsTime
    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:
    - EXPECT_EQ
    - butil::FromInternalValue
    - Time::ToTimeT
    - butil::BaseIteratorRangeToNumberTraits::max
    - Time::is_max
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - Time::ToTimeT
    - putenv
    - butil::FromLocalExploded
    - tzset
    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:
    - EXPECT_EQ
    - TimeDelta::InSeconds
    - TimeDelta::InMilliseconds
    - TimeDelta::InMicroseconds
    - butil::TimeTicks::Now
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_GE
    - butil::PlatformThread::Sleep
    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:
    - TimeTicks::IsHighResClockWorking
    - TimeDelta::InMilliseconds
    - TimeDelta::InMicroseconds
    - GetTicks
    - EXPECT_TRUE
    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:
    - TimeTicks
    - butil::TimeTicks::ThreadNow
    - butil::IsThreadNowSupported
    - EXPECT_GT
    - TimeDelta::InMicroseconds
    - butil::TimeTicks::Now
    - butil::TimeDelta::FromMilliseconds
    - EXPECT_GE
    - butil::PlatformThread::Sleep
    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:
    - butil::TimeDelta::FromSeconds
    - EXPECT_EQ
    - butil::TimeDelta::FromHours
    - butil::TimeDelta::FromMinutes
    - butil::TimeDelta::FromMicroseconds
    - butil::TimeDelta::FromDays
    - EXPECT_TRUE
    - butil::TimeDelta::FromMilliseconds
    - butil::TimeDelta::FromSecondsD
    - 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:
    - butil::TimeDelta::FromSeconds
    - EXPECT_EQ
    - 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:
    - GG_INT64_C
    - butil::FromUTCExploded
    - Time::ToInternalValue
    - EXPECT_EQ
    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: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_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: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    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: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    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: 105
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 105
    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: 111
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 111
    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: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    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: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:136,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:136,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:137,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:138,1
    - Dst: LOG
      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: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:140,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:143,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:143,1
    - Dst: brpc::Controller*::has_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: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:146,1
    - Dst: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:149,1
    - Dst: brpc::Controller*::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:150,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: 152
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 152
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - ASSERT_TRUE
    - test::EchoRequest*::sleep_us
    - test::EchoRequest*::message
    - fetch_add
    - brpc::Controller*::request_user_fields
    - LOG
    - ASSERT_EQ
    - brpc::Controller*::response_user_fields
    - brpc::Controller*::request_protocol
    - test::EchoResponse*::set_message
    - brpc::Controller*::has_request_user_fields
    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:159,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:160,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:160,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: 162
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 162
    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:169,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:169,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:170,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:170,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: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: EchoServiceImpl::BytesEcho1
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - test::BytesRequest*::databytes
    - EXPECT_EQ
    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:178,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:178,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:179,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:179,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: 180
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 180
    functionName: EchoServiceImpl::BytesEcho2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - test::BytesRequest*::databytes
    - EXPECT_EQ
    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: 189
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 189
    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: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    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: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    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: 202
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 202
    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:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    - Dst: brpc::NsheadServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:212,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - conflict_sd
    argTypes:
    - google::protobuf::ServiceDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 213
    functionName: ServerTest::TestAddBuiltinService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::AddBuiltinServices
    - EXPECT_EQ
    - brpc::Server::AddServiceInternal
    - brpc::NsheadServiceOptions
    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: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: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:220,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:221,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:221,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:226,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:226,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:232,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:232,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:237,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:238,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:238,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:241,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:244,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:247,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:247,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: brpc::ServerOptions::ServerOptions
      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::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:252,1
    - Dst: brpc::PortRange
      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::IsRunning
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:254,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:256,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:257,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:257,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:260,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:261,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:263,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:263,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: brpc::Server::options
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:269,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:270,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:270,1
    - Dst: brpc::Server::ListServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:274,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/brpc_server_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:275,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:275,1
    - Dst: brpc::Server::_service_map::begin
      Src: /src/brpc/test/brpc_server_unittest.cpp:277,1
    - Dst: brpc::Server::_service_map::end
      Src: /src/brpc/test/brpc_server_unittest.cpp:278,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:282,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:283,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:283,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 284
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Server::Join
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Server::options
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Server::ListServices
    - butil::EndPoint::EndPoint
    - std::vector::empty
    - brpc::Server::_service_map::begin
    - ASSERT_NE
    - brpc::Server::_service_map::end
    - MyAuthenticator::MyAuthenticator
    - brpc::Server::service_count
    - brpc::PortRange
    - brpc::Server::IsRunning
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::first_service
    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:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:288,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:288,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:289,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:292,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 293
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::Start
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    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: 302
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 302
    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: 303
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 303
    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:308,1
    - Dst: v1::EchoRequest*::has_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:310,1
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:313,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:313,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:314,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:314,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:316,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: 317
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 317
    functionName: EchoServiceV1::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_protocol
    - brpc::Controller*::response_attachment
    - fetch_add
    - static_cast<brpc::Controller*>
    - v1::EchoResponse*::set_message
    - v1::EchoRequest*::message
    - CHECK_EQ
    - v1::EchoRequest*::has_message
    - brpc::Controller*::request_attachment
    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:323,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:323,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:324,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: 325
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 325
    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:331,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:331,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:332,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: 333
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 333
    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:339,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:339,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:340,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: 341
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 341
    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:347,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:347,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:348,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: 349
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 349
    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: 360
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 360
    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: 361
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 361
    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:367,1
    - Dst: v2::EchoRequest*::value
      Src: /src/brpc/test/brpc_server_unittest.cpp:367,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:368,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: 369
      start: 362
    functionDepth: 0
    functionLinenumber: 362
    functionLinenumberEnd: 369
    functionName: EchoServiceV2::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v2::EchoRequest*::value
    - fetch_add
    - v2::EchoResponse*::set_value
    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:380,1
    - Dst: v3::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:380,1
    - Dst: v3::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:381,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: 382
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 382
    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:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:387,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:387,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:388,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:390,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:390,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:394,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:394,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:396,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:399,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:399,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:400,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:403,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:405,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:408,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:409,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 410
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:414,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:414,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:415,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:417,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:417,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:421,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:421,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:423,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:424,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:429,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:429,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:431,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:437,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:437,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:440,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:441,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:443,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:444,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:444,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:447,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:448,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:448,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 412
    functionDepth: 1
    functionLinenumber: 412
    functionLinenumberEnd: 449
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:453,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:455,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:456,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:456,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:457,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:460,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:460,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:461,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:462,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:463,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:465,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:467,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:467,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:468,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:469,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:470,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:472,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:474,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:474,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:476,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:477,1
    - Dst: EchoServiceV2::EchoServiceV2
      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:485,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:486,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:486,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:488,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:489,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:490,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:492,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:494,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:494,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:495,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:496,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:497,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:499,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:501,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:501,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:502,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 505
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - EchoServiceV2::ncalled::load
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled::load
    - EchoServiceV2::EchoServiceV2
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    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:509,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:511,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:512,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:512,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:513,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:516,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:516,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:517,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:518,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:519,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:521,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:523,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:523,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:525,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:526,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:527,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:529,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:531,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:531,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:533,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:534,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:535,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:536,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:537,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:540,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:541,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:541,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:544,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:545,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:546,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:548,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:549,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:549,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:550,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:550,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:553,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 555
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - EchoServiceV1::ncalled::load
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    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:559,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:561,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:562,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:562,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:563,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:566,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:566,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:567,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:568,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:569,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:570,1
    - Dst: brpc::Controller::Failed
      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::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:571,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:573,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:574,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:574,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:576,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:577,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:578,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:579,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:582,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:583,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:583,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:585,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:586,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:587,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:588,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:592,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:593,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:593,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 594
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - EchoServiceV1::ncalled::load
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    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:598,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:599,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:603,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:604,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:604,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:605,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:608,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:608,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:609,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:610,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:611,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:612,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:613,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:614,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:616,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:616,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:618,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:619,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:620,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:622,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:624,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:625,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 596
    functionDepth: 1
    functionLinenumber: 596
    functionLinenumberEnd: 626
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled::load
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::ErrorCode
    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:630,1
    - Dst: EchoServiceV2::EchoServiceV2
      Src: /src/brpc/test/brpc_server_unittest.cpp:631,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:634,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:635,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:662,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:662,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:666,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:671,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:671,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:675,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:680,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:680,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:684,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:684,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:688,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:689,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:693,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:693,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:697,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:701,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:701,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:705,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:709,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:709,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:713,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:717,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:717,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:721,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:725,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:726,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:726,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:730,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:730,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:734,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:734,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:738,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:738,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:742,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:747,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:747,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:748,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:751,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:751,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:752,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:753,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:755,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:755,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:758,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:759,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:760,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:761,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:762,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:763,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:764,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:764,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:767,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:768,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:769,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:771,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:773,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:774,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:774,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:777,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:778,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:779,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:781,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:783,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:784,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:784,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:787,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:788,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:789,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:791,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:793,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:793,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:794,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:794,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:797,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:798,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:799,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:800,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:801,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:804,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:804,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:805,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:805,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:808,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:809,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:810,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:812,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:814,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:814,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:815,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:815,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:818,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:819,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:820,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:822,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:824,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:825,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:825,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:827,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:828,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:829,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:831,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:833,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:833,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:834,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:834,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:836,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:837,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:838,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:840,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:842,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:843,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:843,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:845,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:846,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:847,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:849,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:851,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:852,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:852,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:854,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:855,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:856,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:858,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:860,1
    - Dst: EchoServiceV1::ncalled_echo2::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:860,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:861,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:861,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:863,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:864,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:865,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:867,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:869,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:869,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:870,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:870,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:872,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:873,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:874,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:876,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:878,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:878,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:879,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:879,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:882,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:883,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:884,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:885,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:886,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:887,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:888,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:888,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:890,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:891,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:892,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:894,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:896,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:896,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:897,1
    - Dst: EchoServiceV1::ncalled_echo4::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:897,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:899,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:900,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:901,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:903,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:905,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:905,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:906,1
    - Dst: EchoServiceV1::ncalled_echo5::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:906,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:909,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:910,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:911,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:913,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:915,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:915,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:916,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:916,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:918,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:919,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:920,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:922,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:924,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:924,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:925,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:925,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:927,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:928,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:929,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:931,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:933,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:933,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:934,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:934,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:937,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:938,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:939,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:940,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:941,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:942,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:942,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:945,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:946,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:948,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:948,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:951,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:952,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:953,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:955,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:957,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:957,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:958,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:958,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:961,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:962,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:963,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:965,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:967,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:968,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:968,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:970,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:971,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:974,1
    - Dst: brpc::Server::RemoveService
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:975,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:976,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:977,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:977,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 213
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 978
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::ncalled_echo2::load
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled_echo4::load
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Server::RemoveService
    - ASSERT_TRUE
    - brpc::Server::_global_restful_map::size
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled_echo5::load
    - EchoServiceV1::ncalled::load
    - EchoServiceV2::EchoServiceV2
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - EchoServiceV1::ncalled_echo3::load
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - brpc::Server::service_count
    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:986,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:987,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:988,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:989,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:989,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:991,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:994,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:994,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:995,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:996,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:997,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:998,1
    - Dst: brpc::Controller::Failed
      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::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:999,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1001,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1001,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1002,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1002,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1007,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1008,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1012,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1012,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1013,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1013,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1014,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1017,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1017,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1018,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1019,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1020,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1021,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1021,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1022,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1023,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1024,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1025,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1025,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1030,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1031,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1032,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1033,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1033,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1059,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1062,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1062,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1063,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1066,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1066,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1067,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1068,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1069,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1070,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1071,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1074,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1075,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1075,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1080,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      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::AddService
      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: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1088,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1088,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1089,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1090,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1092,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1092,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1095,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1095,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1098,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1099,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1100,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1101,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1102,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1102,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1104,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1107,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1108,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1109,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1109,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1111,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1112,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1114,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1115,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1116,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1117,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1120,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1125,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1125,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1125,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1126,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1126,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 980
    functionDepth: 1
    functionLinenumber: 980
    functionLinenumberEnd: 1130
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::CallMethod
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::MaxConcurrencyOf
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::ncalled::load
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::call_id
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::DoNothing
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - brpc::Join
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::ErrorCode
    - test::EchoService_Stub::Echo
    - brpc::Server::service_count
    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:1134,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1137,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1138,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1142,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1142,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1145,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1146
      start: 1132
    functionDepth: 1
    functionLinenumber: 1132
    functionLinenumberEnd: 1146
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_TRUE
    - brpc::Server::AddService
    - brpc::Server::Start
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Server::service_count
    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:1150,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1153,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1154,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1162,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1162,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1164,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1167,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1167,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1170,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1172,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1174,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1174,1
    - Dst: EchoServiceV1::GetDescriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1175,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1176,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1179,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1180,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1181,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1182,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1184,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1185,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1185,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1188,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1189,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1190,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1192,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1194,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1195,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1195,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1198,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1202,1
    - Dst: brpc::Server::RemoveService
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1205,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1207
      start: 1148
    functionDepth: 1
    functionLinenumber: 1148
    functionLinenumberEnd: 1207
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::GetDescriptor
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Server::RemoveService
    - ASSERT_TRUE
    - brpc::Server::_global_restful_map::size
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled::load
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Server::service_count
    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:1210,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1212,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1217,1
    - Dst: brpc::Server::FindServiceByName
      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: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1221,1
    - Dst: brpc::Server::FindServiceByFullName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1221,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1222,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1225,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1229,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:1229,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1230,1
    - Dst: brpc::Server::FindServiceByName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1230,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      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::AddService
      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::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1237,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1240,1
    - Dst: brpc::Server::RemoveService
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1241,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1245,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1246,1
    - Dst: brpc::Server::ClearServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:1248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1249,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1250
      start: 1209
    functionDepth: 1
    functionLinenumber: 1209
    functionLinenumberEnd: 1250
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::RemoveService
    - pbrpcframework::get_prototype_by_method_descriptor
    - ASSERT_TRUE
    - brpc::Server::AddService
    - brpc::Server::FindServiceByName
    - brpc::Server::Start
    - brpc::Server::FindServiceByFullName
    - brpc::Server::ClearServices
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Server::service_count
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::first_service
    - brpc::Server::Stop
    - brpc::Server::Join
    - str2endpoint
    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:1253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1254,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1254,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1256,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1259,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1261,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1266,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1266,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1266,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1267,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1269,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ep
    - sleep_ms
    - succ
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1252
    functionDepth: 1
    functionLinenumber: 1252
    functionLinenumberEnd: 1271
    functionName: SendSleepRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::latency_us
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:1274,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1275,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1278,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1279,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1279,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_server_unittest.cpp:1281,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_server_unittest.cpp:1282,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1283,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1286,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1288,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1291
      start: 1273
    functionDepth: 1
    functionLinenumber: 1273
    functionLinenumberEnd: 1291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - tcp_connect
    - brpc::Server::Start
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - usleep
    - ASSERT_GT
    - brpc::Server::GetStat
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    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:1294,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1295,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1296,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1300,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1304,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1304,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1306,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1309,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1309,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1310,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1311,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1314,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1316,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1324,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1324,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1326,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1328,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1329,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1329,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1330,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1331,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1335,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1336,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1336,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1337,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1347,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1347,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1349,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1351,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1352,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1352,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1353,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1354,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1358,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1359,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1359,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1360,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1370,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1370,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1372,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1375,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1375,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1376,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1377,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1380,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1382,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1384,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1386
      start: 1293
    functionDepth: 1
    functionLinenumber: 1293
    functionLinenumberEnd: 1386
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - ASSERT_EQ
    - butil::Timer::start
    - EchoServiceImpl::count::load
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - EXPECT_TRUE
    - butil::Timer::Timer
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - labs
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::EndPoint::EndPoint
    - brpc::NewCallback
    - bthread_usleep
    - brpc::Server::AddService
    - bthread_start_background
    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:1389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1390,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1390,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1393,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1396,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1400,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1400,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1400,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ep
    - count
    argTypes:
    - butil::EndPoint
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1402
      start: 1388
    functionDepth: 1
    functionLinenumber: 1388
    functionLinenumberEnd: 1402
    functionName: SendMultipleRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - 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:1405,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1407,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1407,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1410,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1411,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1411,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1418,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1419,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_server_unittest.cpp:1419,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1425,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1426,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1426,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1427
      start: 1404
    functionDepth: 1
    functionLinenumber: 1404
    functionLinenumberEnd: 1427
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - brpc::Server::AddService
    - brpc::Server::Start
    - pthread_join
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - EchoServiceImpl::count::load
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Stop
    - str2endpoint
    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:1431,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/test/brpc_server_unittest.cpp:1433,1
    - Dst: getpid
      Src: /src/brpc/test/brpc_server_unittest.cpp:1434,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1436,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1439,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1442,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1443
      start: 1429
    functionDepth: 1
    functionLinenumber: 1429
    functionLinenumberEnd: 1443
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::PutPidFileIfNeeded
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ASSERT_EQ
    - 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:1449,1
    - Dst: reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1452,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/brpc_server_unittest.cpp:1452,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1456,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1456,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1456,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1459,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1459,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1460,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:1460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1445
    functionDepth: 1
    functionLinenumber: 1445
    functionLinenumberEnd: 1461
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Server::listen_address
    - butil::EndPoint::EndPoint
    - reset
    - brpc::PortRange
    - 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: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:1469,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1469,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:1472,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1472,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: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:1479,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1479,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
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1482,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1482,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1484
      start: 1463
    functionDepth: 1
    functionLinenumber: 1463
    functionLinenumberEnd: 1484
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - TestAddBuiltinService
    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:1493,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1494,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      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::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1499,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1499,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1501,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1504,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1504,1
    - Dst: brpc::Controller::Controller
      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: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1507,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1508,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1509,1
    - Dst: brpc::Controller::set_pb_bytes_to_base64
      Src: /src/brpc/test/brpc_server_unittest.cpp:1510,1
    - Dst: test::BytesRequest::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1513,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1514,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1515,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1516,1
    - Dst: test::BytesResponse::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1516,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1517,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1518,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1520
      start: 1486
    functionDepth: 1
    functionLinenumber: 1486
    functionLinenumberEnd: 1520
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::set_pb_bytes_to_base64
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - test::BytesRequest::set_databytes
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - test::BytesResponse::databytes
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - EXPECT_FALSE
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    - butil::string_printf
    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:1524,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1525,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1529,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1530,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1530,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1533,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1536,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1536,1
    - Dst: brpc::Controller::Controller
      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::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1539,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1540,1
    - Dst: brpc::Controller::set_pb_single_repeated_to_array
      Src: /src/brpc/test/brpc_server_unittest.cpp:1541,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1543,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1544,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1547,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1549,1
    - Dst: brpc::Controller::Failed
      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::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1551,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1552,1
    - Dst: test::ComboRequest::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1552,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:1552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1555,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1555,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1559,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1560,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1562
      start: 1522
    functionDepth: 1
    functionLinenumber: 1522
    functionLinenumberEnd: 1562
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::ComboResponse::responses_size
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::set_pb_single_repeated_to_array
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Join
    - test::ComboResponse::responses
    - brpc::Channel::Init
    - test::ComboRequest::requests
    - brpc::Controller::Controller
    - test::ComboRequest::requests_size
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - EXPECT_FALSE
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - test::ComboRequest::add_requests
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    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:1565,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1569,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1569,1
    - Dst: SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1573,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1577,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1577,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1578,1
    - Dst: test::EchoRequest::mutable_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1581,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1583,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1584,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1587,1
    - Dst: SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1587,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1592,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/brpc_server_unittest.cpp:1592,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1592,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1595,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1596,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1597
      start: 1564
    functionDepth: 1
    functionLinenumber: 1564
    functionLinenumberEnd: 1597
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - logging::StringSink::find
    - test::EchoRequest::mutable_message
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - SetLogSink
    - ASSERT_NE
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - std::ostringstream::str
    - ASSERT_EQ
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Stop
    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:1601,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      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::AddService
      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: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1609,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1609,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1610,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1613,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1613,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1616,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1616,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1619,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1620,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1621,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1622,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1623,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1623,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1625,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1628,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1629,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1630,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1630,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1632,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1633,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1635,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1636,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1637,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1638,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1641,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1642,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1642,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1644,1
    - Dst: test::EchoRequest::clear_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1645,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1646,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1647,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1652,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1652,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1652,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1655,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1656,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1657,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1659,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1663,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1664,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1664,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1664,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1599
    functionDepth: 1
    functionLinenumber: 1599
    functionLinenumberEnd: 1665
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::MaxConcurrencyOf
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::call_id
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::DoNothing
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - brpc::Join
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - test::EchoService_Stub::Echo
    - test::EchoRequest::clear_sleep_us
    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:1669,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1671,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1672,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1672,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1675,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1675,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1678,1
    - Dst: brpc::Controller::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1679,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1682,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1686,1
    - Dst: brpc::Controller::has_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: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1687,1
    - Dst: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1688,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1690,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1667
    functionDepth: 1
    functionLinenumber: 1667
    functionLinenumberEnd: 1691
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - ASSERT_TRUE
    - brpc::Controller::response_user_fields
    - brpc::Controller::request_user_fields
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::has_response_user_fields
    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:1702,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1702,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: has_service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: has_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: brpc::Controller*::request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1708,1
    - Dst: brpc::Controller*::request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1709,1
    - Dst: brpc::Controller*::request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1714,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1714,1
    - Dst: brpc::SerializedRequest*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1717,1
    - Dst: test::EchoRequest::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1717,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1718,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1718,1
    - Dst: brpc::Controller*::set_response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1735,1
    - Dst: brpc::Controller*::set_response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1736,1
    - Dst: brpc::Controller*::set_response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1737,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1738,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1739,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1740,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1740,1
    - Dst: brpc::SerializedResponse*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1742,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: 1743
      start: 1695
    functionDepth: 1
    functionLinenumber: 1695
    functionLinenumberEnd: 1743
    functionName: BaiduMasterServiceImpl::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_compress_type
    - test::EchoResponse::set_message
    - ASSERT_EQ
    - service_name
    - ASSERT_TRUE
    - method_name
    - brpc::DeserializeRpcMessage
    - brpc::Controller*::set_response_checksum_type
    - test::EchoRequest::message
    - has_service_name
    - brpc::Controller*::request_content_type
    - brpc::Controller*::set_response_compress_type
    - brpc::Controller*::request_checksum_type
    - brpc::Controller*::sampled_request
    - has_method_name
    - brpc::SerializedRequest*::serialized_data
    - brpc::Controller*::request_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller*::response_attachment
    - ASSERT_NE
    - brpc::policy::SerializeRpcMessage
    - brpc::SerializedResponse*::serialized_data
    - brpc::Controller*::set_response_content_type
    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:1750,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1753,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1754,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1755,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1757,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1759,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1760,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1760,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - ' channel'
    - compress_type
    argTypes:
    - brpc::Channel
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1761
      start: 1749
    functionDepth: 1
    functionLinenumber: 1749
    functionLinenumberEnd: 1761
    functionName: TestBaiduMasterService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - test::EchoService_Stub::Echo
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    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:1764,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1765,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1765,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1766,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1767,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1768,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1768,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1769,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1771,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1771,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1773,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1776,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1776,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: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1781,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1785,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1786,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1786,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1763
    functionDepth: 2
    functionLinenumber: 1763
    functionLinenumberEnd: 1787
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - brpc::Server::AddService
    - brpc::Server::Start
    - TestBaiduMasterService
    - brpc::Server::Stop
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    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:1792,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1797,1
    - Dst: brpc::SerializedResponse::SerializedResponse
      Src: /src/brpc/test/brpc_server_unittest.cpp:1799,1
    - Dst: brpc::SerializedRequest::SerializedRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1800,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1802,1
    - Dst: brpc::Controller::set_request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1803,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1804,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1805,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1806,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1809,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1809,1
    - Dst: brpc::SerializedRequest::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1811,1
    - Dst: brpc::SampledRequest::SampledRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1812,1
    - Dst: auto::meta::set_service_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: auto::meta::set_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1815,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1816,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1817,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1819,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::SerializedResponse::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1823,1
    - Dst: brpc::Controller::response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: brpc::Controller::response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: brpc::Controller::response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1826,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1826,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1827,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1827,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: 1828
      start: 1789
    functionDepth: 1
    functionLinenumber: 1789
    functionLinenumberEnd: 1828
    functionName: TestGenericCall
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_request_checksum_type
    - auto::meta::set_service_name
    - brpc::Controller::set_request_compress_type
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SerializedRequest::SerializedRequest
    - brpc::SerializedResponse::SerializedResponse
    - ASSERT_FALSE
    - brpc::Controller::response_content_type
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::SerializedResponse::serialized_data
    - brpc::Controller::response_attachment
    - brpc::DeserializeRpcMessage
    - brpc::Controller::reset_sampled_request
    - test::EchoRequest::set_message
    - brpc::SerializedRequest::serialized_data
    - CallMethod
    - auto::meta::set_method_name
    - brpc::SampledRequest::SampledRequest
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - brpc::policy::SerializeRpcMessage
    - brpc::Controller::response_compress_type
    - brpc::Controller::set_request_content_type
    - brpc::Controller::response_checksum_type
    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:1831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1832,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1832,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1833,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1834,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1835,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1835,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1836,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1838,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1838,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1840,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1843,1
    - Dst: brpc::Channel::Init
      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:1851,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:1860,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:1869,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: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1878,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1881,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1882,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1882,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1883
      start: 1830
    functionDepth: 2
    functionLinenumber: 1830
    functionLinenumberEnd: 1883
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - brpc::Server::AddService
    - brpc::Server::Start
    - brpc::Server::Stop
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - TestGenericCall
    - brpc::Channel::Channel
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    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: 1886
      start: 1886
    functionDepth: 0
    functionLinenumber: 1886
    functionLinenumberEnd: 1886
    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: 1887
      start: 1887
    functionDepth: 0
    functionLinenumber: 1887
    functionLinenumberEnd: 1887
    functionName: Request
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 25
    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: 1888
      start: 1888
    functionDepth: 0
    functionLinenumber: 1888
    functionLinenumberEnd: 1888
    functionName: Response
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 21
    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:1898,1
    - Dst: butil::get_object<v1::EchoRequest>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1899,1
    - Dst: butil::get_object<v1::EchoResponse>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1900,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1901,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1902,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - google::protobuf::Service
    - google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1906
      start: 1896
    functionDepth: 0
    functionLinenumber: 1896
    functionLinenumberEnd: 1906
    functionName: TestRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 4
    functionsReached:
    - butil::get_object<DefaultRpcPBMessages>
    - butil::get_object<v1::EchoRequest>
    - butil::get_object<v1::EchoResponse>
    - auto::clear_message
    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:1909,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1910,1
    - Dst: static_cast<v1::EchoRequest*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1910,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1911,1
    - Dst: static_cast<v1::EchoResponse*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1911,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1914,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - messages
    argTypes:
    - brpc::RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1915
      start: 1908
    functionDepth: 0
    functionLinenumber: 1908
    functionLinenumberEnd: 1915
    functionName: TestRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<v1::EchoRequest*>
    - static_cast<v1::EchoResponse*>
    - butil::return_object
    - static_cast<DefaultRpcPBMessages*>
    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:1919,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1920,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1920,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1921,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1922,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1923,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1923,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1924,1
    - Dst: TestRpcPBMessageFactory::TestRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1926,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1926,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1928,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1929,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1931,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1931,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1933,1
    - Dst: v1::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1936,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1938,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1939,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1939,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1939,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1940,1
    - Dst: v1::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1940,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1943,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1944,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1946,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1946,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1948,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1949,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1950,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1950,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1954,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1954,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1954,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1955,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1958,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1959,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1959,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1960
      start: 1918
    functionDepth: 1
    functionLinenumber: 1918
    functionLinenumberEnd: 1960
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Channel::Channel
    - c_str
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - v1::EchoRequest::set_message
    - brpc::Server::AddService
    - v1::EchoResponse::message
    - TestRpcPBMessageFactory::TestRpcPBMessageFactory
    - butil::string_printf
    - v1::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:1963,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1964,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1964,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1967,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1967,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1968,1
    - Dst: brpc::GetArenaRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1970,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1970,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1972,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1973,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1975,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1975,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1977,1
    - Dst: v3::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1980,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1983,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1983,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1983,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1984,1
    - Dst: v3::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1984,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1987,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1990,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1990,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1992,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1993,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1994,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1994,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1998,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1998,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1998,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1999,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2002,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2002,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2003,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2003,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2004
      start: 1962
    functionDepth: 1
    functionLinenumber: 1962
    functionLinenumberEnd: 2004
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - v3::EchoResponse::message
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - v3::EchoService_Stub::Echo
    - brpc::Channel::Channel
    - c_str
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::GetArenaRpcPBMessageFactory
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - v3::EchoRequest::set_message
    - butil::string_printf
    - brpc::ServerOptions::ServerOptions
    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:2009,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2013,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2013,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:2017,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:2019,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2020,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2020,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2021,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:2021,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: 2022
      start: 2006
    functionDepth: 1
    functionLinenumber: 2006
    functionLinenumberEnd: 2022
    functionName: TestBaiduStdAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - Failed
    - test::EchoService_Stub::Echo
    - ASSERT_EQ
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ErrorText
    - ErrorCode
    - brpc::ChannelOptions::ChannelOptions
    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:2027,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2028,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2031,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2031,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2033,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2034,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2035,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:2037,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2038,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2038,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2038,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2039,1
    - Dst: http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:2039,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: 2040
      start: 2024
    functionDepth: 1
    functionLinenumber: 2024
    functionLinenumberEnd: 2040
    functionName: TestHttpAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - http_response
    - http_request
    - Failed
    - request_attachment
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Channel::CallMethod
    - ErrorText
    - brpc::ChannelOptions::ChannelOptions
    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:2043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2044,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2044,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:2045,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:2046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2047,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:2047,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:2048,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2049,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2051,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:2051,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:2053,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2054,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2057,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2058,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2059,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2059,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2061,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2062,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2063,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2063,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2067,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2068,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2071,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2072,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2072,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2073
      start: 2042
    functionDepth: 2
    functionLinenumber: 2042
    functionLinenumberEnd: 2073
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - TestBaiduStdAuth
    - brpc::Controller::http_request
    - butil::EndPoint::EndPoint
    - TestHttpAuth
    - brpc::Server::AddService
    - ASSERT_NE
    - MyAuthenticator::MyAuthenticator
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, auth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:2079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2081,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2081,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:2085,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:2087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2088,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2088,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2089,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:2089,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 5
    argNames:
    - ' ep'
    - ' cntl'
    - error_code
    - failed
    - ' copt'
    argTypes:
    - butil::EndPoint
    - brpc::Controller
    - int
    - bool
    - brpc::ChannelOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2090
      start: 2075
    functionDepth: 1
    functionLinenumber: 2075
    functionLinenumberEnd: 2090
    functionName: TestClientHost
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - Failed
    - test::EchoService_Stub::Echo
    - ASSERT_EQ
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ErrorText
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: "void TestClientHost(const butil::EndPoint& ep,\n                  brpc::Controller&
      cntl,\n                  int error_code, bool failed,\n                  brpc::ChannelOptions&
      copt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2094,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2094,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:2095,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:2096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2097,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:2097,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2099,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:2099,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:2101,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2102,1
    - Dst: TestClientHost
      Src: /src/brpc/test/brpc_server_unittest.cpp:2112,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2116,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2117,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2118
      start: 2092
    functionDepth: 2
    functionLinenumber: 2092
    functionLinenumberEnd: 2118
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - TestClientHost
    - brpc::Server::Stop
    - brpc::Server::Join
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, bind_client_host_and_network_device)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_server_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_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: 101
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 101
    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: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    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: 105
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 105
    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: 111
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 111
    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: 115
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 115
    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: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 15
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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:135,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:136,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:136,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:137,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:138,1
    - Dst: LOG
      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: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:140,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:143,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:143,1
    - Dst: brpc::Controller*::has_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: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:146,1
    - Dst: brpc::Controller*::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:147,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:149,1
    - Dst: brpc::Controller*::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:150,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: 152
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 152
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - ASSERT_TRUE
    - test::EchoRequest*::sleep_us
    - test::EchoRequest*::message
    - fetch_add
    - brpc::Controller*::request_user_fields
    - LOG
    - ASSERT_EQ
    - brpc::Controller*::response_user_fields
    - brpc::Controller*::request_protocol
    - test::EchoResponse*::set_message
    - brpc::Controller*::has_request_user_fields
    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:159,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:160,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:160,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: 162
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 162
    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:169,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:169,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:170,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:170,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: 171
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: EchoServiceImpl::BytesEcho1
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - test::BytesRequest*::databytes
    - EXPECT_EQ
    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:178,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:178,1
    - Dst: test::BytesResponse*::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:179,1
    - Dst: test::BytesRequest*::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:179,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: 180
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 180
    functionName: EchoServiceImpl::BytesEcho2
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::BytesResponse*::set_databytes
    - test::BytesRequest*::databytes
    - EXPECT_EQ
    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: 189
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 189
    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: 193
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 193
    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: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    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: 202
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 202
    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:208,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/test/brpc_server_unittest.cpp:210,1
    - Dst: brpc::NsheadServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:212,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:212,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - conflict_sd
    argTypes:
    - google::protobuf::ServiceDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 213
    functionName: ServerTest::TestAddBuiltinService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::AddBuiltinServices
    - EXPECT_EQ
    - brpc::Server::AddServiceInternal
    - brpc::NsheadServiceOptions
    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: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: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:220,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:221,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:221,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:226,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:226,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:230,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:232,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:232,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:237,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:238,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:238,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:241,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:244,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:244,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:245,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:247,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:247,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:250,1
    - Dst: brpc::ServerOptions::ServerOptions
      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::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:252,1
    - Dst: brpc::PortRange
      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::IsRunning
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:254,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:255,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:256,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:257,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:257,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:260,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:261,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:263,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:263,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:266,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: brpc::Server::IsRunning
      Src: /src/brpc/test/brpc_server_unittest.cpp:267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: brpc::Server::options
      Src: /src/brpc/test/brpc_server_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:269,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:270,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:270,1
    - Dst: brpc::Server::ListServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:274,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/brpc_server_unittest.cpp:274,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:275,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:275,1
    - Dst: brpc::Server::_service_map::begin
      Src: /src/brpc/test/brpc_server_unittest.cpp:277,1
    - Dst: brpc::Server::_service_map::end
      Src: /src/brpc/test/brpc_server_unittest.cpp:278,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:282,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:283,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:283,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 216
    functionDepth: 1
    functionLinenumber: 216
    functionLinenumberEnd: 284
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Server::Join
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Server::options
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Server::ListServices
    - butil::EndPoint::EndPoint
    - std::vector::empty
    - brpc::Server::_service_map::begin
    - ASSERT_NE
    - brpc::Server::_service_map::end
    - MyAuthenticator::MyAuthenticator
    - brpc::Server::service_count
    - brpc::PortRange
    - brpc::Server::IsRunning
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::first_service
    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:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:288,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:288,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:289,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:292,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 293
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::Start
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    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: 302
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 302
    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: 303
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 303
    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:308,1
    - Dst: v1::EchoRequest*::has_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:310,1
    - Dst: v1::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:311,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:313,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_server_unittest.cpp:313,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:314,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:314,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:316,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: 317
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 317
    functionName: EchoServiceV1::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_protocol
    - brpc::Controller*::response_attachment
    - fetch_add
    - static_cast<brpc::Controller*>
    - v1::EchoResponse*::set_message
    - v1::EchoRequest*::message
    - CHECK_EQ
    - v1::EchoRequest*::has_message
    - brpc::Controller*::request_attachment
    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:323,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:323,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:324,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: 325
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 325
    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:331,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:331,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:332,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: 333
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 333
    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:339,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:339,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:340,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: 341
      start: 334
    functionDepth: 0
    functionLinenumber: 334
    functionLinenumberEnd: 341
    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:347,1
    - Dst: v1::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:347,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:348,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: 349
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 349
    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: 360
      start: 360
    functionDepth: 0
    functionLinenumber: 360
    functionLinenumberEnd: 360
    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: 361
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 361
    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:367,1
    - Dst: v2::EchoRequest*::value
      Src: /src/brpc/test/brpc_server_unittest.cpp:367,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_server_unittest.cpp:368,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: 369
      start: 362
    functionDepth: 0
    functionLinenumber: 362
    functionLinenumberEnd: 369
    functionName: EchoServiceV2::Echo
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - v2::EchoRequest*::value
    - fetch_add
    - v2::EchoResponse*::set_value
    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:380,1
    - Dst: v3::EchoRequest*::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:380,1
    - Dst: v3::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:381,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: 382
      start: 375
    functionDepth: 0
    functionLinenumber: 375
    functionLinenumberEnd: 382
    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:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:387,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:387,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:388,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:390,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:390,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:394,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:394,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:396,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:399,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:399,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:400,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:403,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:405,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:408,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:409,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 410
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:414,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:414,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:415,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:417,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:417,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:421,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:421,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:423,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:424,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:429,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:429,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:430,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:431,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:432,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:437,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:437,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:440,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:441,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:443,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:444,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:444,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:447,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:448,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:448,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 412
    functionDepth: 1
    functionLinenumber: 412
    functionLinenumberEnd: 449
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:453,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:455,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:456,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:456,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:457,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:460,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:460,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:461,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:462,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:463,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:464,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:465,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:467,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:467,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:468,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:469,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:470,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:471,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:472,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:474,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:474,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:476,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:477,1
    - Dst: EchoServiceV2::EchoServiceV2
      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:485,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:485,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:486,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:486,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:488,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:489,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:490,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:491,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:492,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:494,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:494,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:495,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:496,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:497,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:498,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:499,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:501,1
    - Dst: EchoServiceV2::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:501,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:502,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 505
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - EchoServiceV2::ncalled::load
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled::load
    - EchoServiceV2::EchoServiceV2
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    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:509,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:511,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:512,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:512,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:513,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:516,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:516,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:517,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:518,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:519,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:520,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:521,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:523,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:523,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:525,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:526,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:527,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:528,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:529,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:531,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:531,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:533,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:534,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:535,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:536,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:537,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:538,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:539,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:540,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:541,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:541,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:544,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:545,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:546,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:547,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:548,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:549,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:549,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:550,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:550,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:553,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 555
      start: 507
    functionDepth: 1
    functionLinenumber: 507
    functionLinenumberEnd: 555
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - EchoServiceV1::ncalled::load
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    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:559,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:561,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:562,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:562,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:563,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:566,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:566,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:567,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:568,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:569,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:570,1
    - Dst: brpc::Controller::Failed
      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::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:571,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:573,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:573,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:574,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:574,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:576,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:577,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:578,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:579,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:582,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:583,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:583,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:585,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:586,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:587,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:588,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:592,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:593,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:593,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 557
    functionDepth: 1
    functionLinenumber: 557
    functionLinenumberEnd: 594
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - EchoServiceV1::ncalled::load
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    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:598,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:599,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:603,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:603,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:604,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:604,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:605,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:608,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:608,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:609,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:610,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:611,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:612,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:613,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:614,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:616,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:616,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:618,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:619,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:620,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:621,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:622,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:624,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:625,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 596
    functionDepth: 1
    functionLinenumber: 596
    functionLinenumberEnd: 626
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled::load
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::ErrorCode
    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:630,1
    - Dst: EchoServiceV2::EchoServiceV2
      Src: /src/brpc/test/brpc_server_unittest.cpp:631,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:634,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:635,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:660,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:661,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:662,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:662,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:666,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:671,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:671,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:675,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:680,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:680,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:683,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:684,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:684,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:688,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:688,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:689,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:693,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:693,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:696,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:697,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:701,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:701,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:704,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:705,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:709,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:709,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:712,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:713,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:713,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:717,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:717,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:721,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:725,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:726,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:726,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:730,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:730,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:733,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:734,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:734,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:738,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:738,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:742,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:747,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:747,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:748,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:751,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:751,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:752,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:753,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:755,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:755,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:758,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:759,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:760,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:761,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:762,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:763,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:764,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:764,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:767,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:768,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:769,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:770,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:771,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:773,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:774,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:774,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:777,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:778,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:779,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:780,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:781,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:783,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:784,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:784,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:787,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:788,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:789,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:790,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:791,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:792,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:793,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:793,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:794,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:794,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:797,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:798,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:799,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:800,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:801,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:804,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:804,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:805,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:805,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:808,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:809,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:810,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:811,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:812,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:814,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:814,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:815,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:815,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:818,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:819,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:820,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:821,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:822,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:823,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:824,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:825,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:825,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:827,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:828,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:829,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:830,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:831,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:832,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:833,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:833,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:834,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:834,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:836,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:837,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:838,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:839,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:840,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:842,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:843,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:843,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:845,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:846,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:847,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:848,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:849,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:851,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:852,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:852,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:854,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:855,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:856,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:857,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:858,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:860,1
    - Dst: EchoServiceV1::ncalled_echo2::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:860,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:861,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:861,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:863,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:864,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:865,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:866,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:867,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:868,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:869,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:869,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:870,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:870,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:872,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:873,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:874,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:875,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:876,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:877,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:878,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:878,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:879,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:879,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:882,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:883,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:884,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:885,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:886,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:887,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:887,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:888,1
    - Dst: EchoServiceV1::ncalled_echo3::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:888,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:890,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:891,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:892,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:893,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:894,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:895,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:896,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:896,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:897,1
    - Dst: EchoServiceV1::ncalled_echo4::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:897,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:899,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:900,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:901,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:902,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:903,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:904,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:905,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:905,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:906,1
    - Dst: EchoServiceV1::ncalled_echo5::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:906,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:909,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:910,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:911,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:912,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:913,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:914,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:915,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:915,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:916,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:916,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:918,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:919,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:920,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:921,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:922,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:924,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:924,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:925,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:925,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:927,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:928,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:929,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:930,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:931,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:932,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:933,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:933,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:934,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:934,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:937,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:938,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:939,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:940,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:941,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:942,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:942,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:945,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:946,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:948,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:948,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:951,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:952,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:953,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:954,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:955,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:956,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:957,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:957,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:958,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:958,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:961,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:962,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:963,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:964,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:965,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:966,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:967,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:967,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:968,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:968,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:970,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:971,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:974,1
    - Dst: brpc::Server::RemoveService
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:975,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:976,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:977,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:977,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 213
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 978
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::ncalled_echo2::load
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - EchoServiceV1::ncalled_echo4::load
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Server::RemoveService
    - ASSERT_TRUE
    - brpc::Server::_global_restful_map::size
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled_echo5::load
    - EchoServiceV1::ncalled::load
    - EchoServiceV2::EchoServiceV2
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - EchoServiceV1::ncalled_echo3::load
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - brpc::Server::service_count
    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:986,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:987,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:988,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:989,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:989,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:991,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:994,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:994,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:995,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:996,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:997,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:998,1
    - Dst: brpc::Controller::Failed
      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::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:999,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1000,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1001,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1001,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1002,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1002,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1007,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1008,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1012,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1012,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1013,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1013,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1014,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1015,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1017,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1017,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1018,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1019,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1020,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1021,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1021,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1022,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1023,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1024,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1025,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1025,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1030,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1031,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1032,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1033,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1033,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1058,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1059,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1060,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1062,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1062,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1063,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1066,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1066,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1067,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1068,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1069,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1070,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1071,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1072,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1073,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1074,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1075,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1075,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1080,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      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::AddService
      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: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1088,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1088,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1089,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1090,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1092,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1092,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1095,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1095,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1098,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1099,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1100,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1101,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1102,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1102,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1104,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1107,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1108,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1109,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1109,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1111,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1112,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1114,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1115,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1116,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1117,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1118,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1120,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1121,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1123,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1125,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1125,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1125,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1126,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1126,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 75
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 980
    functionDepth: 1
    functionLinenumber: 980
    functionLinenumberEnd: 1130
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::CallMethod
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::MaxConcurrencyOf
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Server::_global_restful_map::size
    - EchoServiceV1::ncalled::load
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::call_id
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::DoNothing
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - brpc::Join
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    - brpc::Controller::ErrorCode
    - test::EchoService_Stub::Echo
    - brpc::Server::service_count
    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:1134,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1137,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1138,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1142,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1142,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1145,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1145,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1146
      start: 1132
    functionDepth: 1
    functionLinenumber: 1132
    functionLinenumberEnd: 1146
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_TRUE
    - brpc::Server::AddService
    - brpc::Server::Start
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Server::service_count
    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:1150,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1152,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1153,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1154,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1158,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1162,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1162,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1164,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1167,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1167,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1170,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1171,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1172,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1174,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1174,1
    - Dst: EchoServiceV1::GetDescriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1175,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1176,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1179,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1180,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1181,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1182,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1184,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1185,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1185,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1188,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1189,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1190,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1191,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1192,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1194,1
    - Dst: EchoServiceV1::ncalled::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1194,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1195,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1195,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1198,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1202,1
    - Dst: brpc::Server::RemoveService
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1205,1
    - Dst: brpc::Server::_global_restful_map::size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1207
      start: 1148
    functionDepth: 1
    functionLinenumber: 1148
    functionLinenumberEnd: 1207
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::GetDescriptor
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Server::RemoveService
    - ASSERT_TRUE
    - brpc::Server::_global_restful_map::size
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EchoServiceV1::ncalled::load
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Server::service_count
    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:1210,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1212,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1217,1
    - Dst: brpc::Server::FindServiceByName
      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: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1221,1
    - Dst: brpc::Server::FindServiceByFullName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1221,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1222,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1224,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1225,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1228,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1229,1
    - Dst: brpc::Server::first_service
      Src: /src/brpc/test/brpc_server_unittest.cpp:1229,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1230,1
    - Dst: brpc::Server::FindServiceByName
      Src: /src/brpc/test/brpc_server_unittest.cpp:1230,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      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::AddService
      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::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1237,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1240,1
    - Dst: brpc::Server::RemoveService
      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::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1241,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1245,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1246,1
    - Dst: brpc::Server::ClearServices
      Src: /src/brpc/test/brpc_server_unittest.cpp:1248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1249,1
    - Dst: brpc::Server::service_count
      Src: /src/brpc/test/brpc_server_unittest.cpp:1249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1250
      start: 1209
    functionDepth: 1
    functionLinenumber: 1209
    functionLinenumberEnd: 1250
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::RemoveService
    - pbrpcframework::get_prototype_by_method_descriptor
    - ASSERT_TRUE
    - brpc::Server::AddService
    - brpc::Server::FindServiceByName
    - brpc::Server::Start
    - brpc::Server::FindServiceByFullName
    - brpc::Server::ClearServices
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::Server::service_count
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::first_service
    - brpc::Server::Stop
    - brpc::Server::Join
    - str2endpoint
    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:1253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1254,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1254,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1256,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1259,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1261,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1264,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1266,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1266,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1266,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1267,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1269,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 3
    argNames:
    - ep
    - sleep_ms
    - succ
    argTypes:
    - butil::EndPoint
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1252
    functionDepth: 1
    functionLinenumber: 1252
    functionLinenumberEnd: 1271
    functionName: SendSleepRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::latency_us
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:1274,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1275,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1278,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1279,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1279,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_server_unittest.cpp:1281,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_server_unittest.cpp:1282,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1283,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1286,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1288,1
    - Dst: brpc::Server::GetStat
      Src: /src/brpc/test/brpc_server_unittest.cpp:1289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1291
      start: 1273
    functionDepth: 1
    functionLinenumber: 1273
    functionLinenumberEnd: 1291
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - tcp_connect
    - brpc::Server::Start
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - usleep
    - ASSERT_GT
    - brpc::Server::GetStat
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    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:1294,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1295,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1296,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1300,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1304,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1304,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1306,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1308,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1309,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1309,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1310,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1311,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1314,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1315,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1316,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1317,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1324,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1324,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1326,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1328,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1329,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1329,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1330,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1331,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1335,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1336,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1336,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1337,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1347,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1347,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1349,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1351,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1352,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1352,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1353,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1354,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1358,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1359,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1359,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1360,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1370,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1370,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1372,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1375,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_server_unittest.cpp:1375,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1376,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1377,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1380,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1381,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1382,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: labs
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1383,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1384,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1386
      start: 1293
    functionDepth: 1
    functionLinenumber: 1293
    functionLinenumberEnd: 1386
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - ASSERT_EQ
    - butil::Timer::start
    - EchoServiceImpl::count::load
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - EXPECT_TRUE
    - butil::Timer::Timer
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - labs
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::EndPoint::EndPoint
    - brpc::NewCallback
    - bthread_usleep
    - brpc::Server::AddService
    - bthread_start_background
    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:1389,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1390,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1390,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1393,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1396,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1398,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1400,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1400,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1400,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ep
    - count
    argTypes:
    - butil::EndPoint
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1402
      start: 1388
    functionDepth: 1
    functionLinenumber: 1388
    functionLinenumberEnd: 1402
    functionName: SendMultipleRPC
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - 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:1405,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1407,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1407,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1410,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1411,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1411,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_server_unittest.cpp:1418,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1419,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_server_unittest.cpp:1419,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    - Dst: EchoServiceImpl::count::load
      Src: /src/brpc/test/brpc_server_unittest.cpp:1424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1425,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1426,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1426,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1427
      start: 1404
    functionDepth: 1
    functionLinenumber: 1404
    functionLinenumberEnd: 1427
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - brpc::Server::AddService
    - brpc::Server::Start
    - pthread_join
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - EchoServiceImpl::count::load
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Stop
    - str2endpoint
    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:1431,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/test/brpc_server_unittest.cpp:1433,1
    - Dst: getpid
      Src: /src/brpc/test/brpc_server_unittest.cpp:1434,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1436,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1439,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1442,1
    - Dst: std::ifstream::is_open
      Src: /src/brpc/test/brpc_server_unittest.cpp:1442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1443
      start: 1429
    functionDepth: 1
    functionLinenumber: 1429
    functionLinenumberEnd: 1443
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::PutPidFileIfNeeded
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ASSERT_EQ
    - 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:1449,1
    - Dst: reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1452,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/brpc_server_unittest.cpp:1452,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1456,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1456,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1456,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1459,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1459,1
    - Dst: brpc::PortRange
      Src: /src/brpc/test/brpc_server_unittest.cpp:1459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1460,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_server_unittest.cpp:1460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1445
    functionDepth: 1
    functionLinenumber: 1445
    functionLinenumberEnd: 1461
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Server::listen_address
    - butil::EndPoint::EndPoint
    - reset
    - brpc::PortRange
    - 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: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:1469,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1469,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:1472,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1472,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: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:1479,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1479,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
    - Dst: TestAddBuiltinService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1482,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1482,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1484
      start: 1463
    functionDepth: 1
    functionLinenumber: 1463
    functionLinenumberEnd: 1484
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - TestAddBuiltinService
    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:1493,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1494,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      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::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1499,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1499,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1501,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1504,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1504,1
    - Dst: brpc::Controller::Controller
      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: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1507,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1508,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1509,1
    - Dst: brpc::Controller::set_pb_bytes_to_base64
      Src: /src/brpc/test/brpc_server_unittest.cpp:1510,1
    - Dst: test::BytesRequest::set_databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1513,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1514,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1515,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1516,1
    - Dst: test::BytesResponse::databytes
      Src: /src/brpc/test/brpc_server_unittest.cpp:1516,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1517,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1518,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1520
      start: 1486
    functionDepth: 1
    functionLinenumber: 1486
    functionLinenumberEnd: 1520
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::set_pb_bytes_to_base64
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - test::BytesRequest::set_databytes
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - test::BytesResponse::databytes
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - EXPECT_FALSE
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    - butil::string_printf
    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:1524,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1525,1
    - Dst: brpc::ServiceOptions::ServiceOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1529,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1530,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1530,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1533,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1534,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1536,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1536,1
    - Dst: brpc::Controller::Controller
      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::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1539,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1540,1
    - Dst: brpc::Controller::set_pb_single_repeated_to_array
      Src: /src/brpc/test/brpc_server_unittest.cpp:1541,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1543,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1544,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1547,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1549,1
    - Dst: brpc::Controller::Failed
      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::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1550,1
    - Dst: test::ComboRequest::requests_size
      Src: /src/brpc/test/brpc_server_unittest.cpp:1551,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1552,1
    - Dst: test::ComboRequest::requests
      Src: /src/brpc/test/brpc_server_unittest.cpp:1552,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_server_unittest.cpp:1552,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1555,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1555,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1559,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1560,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1562
      start: 1522
    functionDepth: 1
    functionLinenumber: 1522
    functionLinenumberEnd: 1562
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::ComboResponse::responses_size
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::set_pb_single_repeated_to_array
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Join
    - test::ComboResponse::responses
    - brpc::Channel::Init
    - test::ComboRequest::requests
    - brpc::Controller::Controller
    - test::ComboRequest::requests_size
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - EXPECT_FALSE
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - test::ComboRequest::add_requests
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    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:1565,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1569,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1569,1
    - Dst: SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1573,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1577,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1577,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1578,1
    - Dst: test::EchoRequest::mutable_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1581,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1583,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1584,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1587,1
    - Dst: SetLogSink
      Src: /src/brpc/test/brpc_server_unittest.cpp:1587,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1592,1
    - Dst: logging::StringSink::find
      Src: /src/brpc/test/brpc_server_unittest.cpp:1592,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1592,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1595,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1596,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1597
      start: 1564
    functionDepth: 1
    functionLinenumber: 1564
    functionLinenumberEnd: 1597
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - logging::StringSink::find
    - test::EchoRequest::mutable_message
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - SetLogSink
    - ASSERT_NE
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - std::ostringstream::str
    - ASSERT_EQ
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Stop
    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:1601,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      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::AddService
      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: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: brpc::Server::MaxConcurrencyOf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1609,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1609,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1610,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1613,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1613,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1616,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1616,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1619,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1620,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1621,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1622,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1623,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1623,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1625,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1628,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1629,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1630,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_server_unittest.cpp:1630,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_server_unittest.cpp:1632,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_server_unittest.cpp:1633,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1635,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1636,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1637,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1638,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1641,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1642,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:1642,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1644,1
    - Dst: test::EchoRequest::clear_sleep_us
      Src: /src/brpc/test/brpc_server_unittest.cpp:1645,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1646,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1647,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:1648,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1650,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_server_unittest.cpp:1651,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1652,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1652,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1652,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1653,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1655,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1656,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1657,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1658,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1659,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1660,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:1662,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1663,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1664,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1664,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1664,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1599
    functionDepth: 1
    functionLinenumber: 1599
    functionLinenumberEnd: 1665
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::MaxConcurrencyOf
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::call_id
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::DoNothing
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - brpc::Join
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - test::EchoService_Stub::Echo
    - test::EchoRequest::clear_sleep_us
    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:1669,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1671,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1672,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1672,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1675,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1675,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1678,1
    - Dst: brpc::Controller::request_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1679,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1682,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1683,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1685,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1686,1
    - Dst: brpc::Controller::has_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: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1687,1
    - Dst: brpc::Controller::response_user_fields
      Src: /src/brpc/test/brpc_server_unittest.cpp:1688,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1690,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1667
    functionDepth: 1
    functionLinenumber: 1667
    functionLinenumberEnd: 1691
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - ASSERT_TRUE
    - brpc::Controller::response_user_fields
    - brpc::Controller::request_user_fields
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::has_response_user_fields
    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:1702,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1702,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: has_service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1703,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1704,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1705,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: has_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1706,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: brpc::Controller*::sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1707,1
    - Dst: brpc::Controller*::request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1708,1
    - Dst: brpc::Controller*::request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1709,1
    - Dst: brpc::Controller*::request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1714,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1714,1
    - Dst: brpc::SerializedRequest*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1717,1
    - Dst: test::EchoRequest::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1717,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1718,1
    - Dst: brpc::Controller*::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1718,1
    - Dst: brpc::Controller*::set_response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1735,1
    - Dst: brpc::Controller*::set_response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1736,1
    - Dst: brpc::Controller*::set_response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1737,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1738,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1739,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1740,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1740,1
    - Dst: brpc::SerializedResponse*::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1742,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: 1743
      start: 1695
    functionDepth: 1
    functionLinenumber: 1695
    functionLinenumberEnd: 1743
    functionName: BaiduMasterServiceImpl::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::request_compress_type
    - test::EchoResponse::set_message
    - ASSERT_EQ
    - service_name
    - ASSERT_TRUE
    - method_name
    - brpc::DeserializeRpcMessage
    - brpc::Controller*::set_response_checksum_type
    - test::EchoRequest::message
    - has_service_name
    - brpc::Controller*::request_content_type
    - brpc::Controller*::set_response_compress_type
    - brpc::Controller*::request_checksum_type
    - brpc::Controller*::sampled_request
    - has_method_name
    - brpc::SerializedRequest*::serialized_data
    - brpc::Controller*::request_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller*::response_attachment
    - ASSERT_NE
    - brpc::policy::SerializeRpcMessage
    - brpc::SerializedResponse*::serialized_data
    - brpc::Controller*::set_response_content_type
    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:1750,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1753,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1754,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1755,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1757,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1758,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1759,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1760,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1760,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 2
    argNames:
    - ' channel'
    - compress_type
    argTypes:
    - brpc::Channel
    - brpc::CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1761
      start: 1749
    functionDepth: 1
    functionLinenumber: 1749
    functionLinenumberEnd: 1761
    functionName: TestBaiduMasterService
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - brpc::Controller::response_attachment
    - test::EchoService_Stub::Echo
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - brpc::Controller::request_attachment
    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:1764,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1765,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1765,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1766,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1767,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1768,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1768,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1769,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1771,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1771,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1773,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1774,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1776,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1776,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: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1781,1
    - Dst: TestBaiduMasterService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1785,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1786,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1786,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1787
      start: 1763
    functionDepth: 2
    functionLinenumber: 1763
    functionLinenumberEnd: 1787
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - brpc::Server::AddService
    - brpc::Server::Start
    - TestBaiduMasterService
    - brpc::Server::Stop
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    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:1792,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1797,1
    - Dst: brpc::SerializedResponse::SerializedResponse
      Src: /src/brpc/test/brpc_server_unittest.cpp:1799,1
    - Dst: brpc::SerializedRequest::SerializedRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1800,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1802,1
    - Dst: brpc::Controller::set_request_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1803,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1804,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1805,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1806,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1809,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1809,1
    - Dst: brpc::SerializedRequest::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1811,1
    - Dst: brpc::SampledRequest::SampledRequest
      Src: /src/brpc/test/brpc_server_unittest.cpp:1812,1
    - Dst: auto::meta::set_service_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: auto::meta::set_method_name
      Src: /src/brpc/test/brpc_server_unittest.cpp:1815,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_server_unittest.cpp:1816,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:1817,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:1819,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1820,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/test/brpc_server_unittest.cpp:1822,1
    - Dst: brpc::SerializedResponse::serialized_data
      Src: /src/brpc/test/brpc_server_unittest.cpp:1823,1
    - Dst: brpc::Controller::response_content_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: brpc::Controller::response_compress_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1824,1
    - Dst: brpc::Controller::response_checksum_type
      Src: /src/brpc/test/brpc_server_unittest.cpp:1825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1826,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1826,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1827,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1827,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: 1828
      start: 1789
    functionDepth: 1
    functionLinenumber: 1789
    functionLinenumberEnd: 1828
    functionName: TestGenericCall
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::set_request_checksum_type
    - auto::meta::set_service_name
    - brpc::Controller::set_request_compress_type
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SerializedRequest::SerializedRequest
    - brpc::SerializedResponse::SerializedResponse
    - ASSERT_FALSE
    - brpc::Controller::response_content_type
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::SerializedResponse::serialized_data
    - brpc::Controller::response_attachment
    - brpc::DeserializeRpcMessage
    - brpc::Controller::reset_sampled_request
    - test::EchoRequest::set_message
    - brpc::SerializedRequest::serialized_data
    - CallMethod
    - auto::meta::set_method_name
    - brpc::SampledRequest::SampledRequest
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - brpc::policy::SerializeRpcMessage
    - brpc::Controller::response_compress_type
    - brpc::Controller::set_request_content_type
    - brpc::Controller::response_checksum_type
    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:1831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1832,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1832,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1833,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1834,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1835,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1835,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1836,1
    - Dst: BaiduMasterServiceImpl::BaiduMasterServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:1837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1838,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1838,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1840,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1843,1
    - Dst: brpc::Channel::Init
      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:1851,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:1860,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:1869,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: TestGenericCall
      Src: /src/brpc/test/brpc_server_unittest.cpp:1878,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1881,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1882,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1882,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1883
      start: 1830
    functionDepth: 2
    functionLinenumber: 1830
    functionLinenumberEnd: 1883
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Channel::Init
    - brpc::Server::AddService
    - brpc::Server::Start
    - brpc::Server::Stop
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - TestGenericCall
    - brpc::Channel::Channel
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    - BaiduMasterServiceImpl::BaiduMasterServiceImpl
    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: 1886
      start: 1886
    functionDepth: 0
    functionLinenumber: 1886
    functionLinenumberEnd: 1886
    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: 1887
      start: 1887
    functionDepth: 0
    functionLinenumber: 1887
    functionLinenumberEnd: 1887
    functionName: Request
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 26
    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: 1888
      start: 1888
    functionDepth: 0
    functionLinenumber: 1888
    functionLinenumberEnd: 1888
    functionName: Response
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 22
    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:1898,1
    - Dst: butil::get_object<v1::EchoRequest>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1899,1
    - Dst: butil::get_object<v1::EchoResponse>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1900,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1901,1
    - Dst: auto::clear_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1902,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - ' service'
    - ' method'
    argTypes:
    - google::protobuf::Service
    - google::protobuf::MethodDescriptor
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1906
      start: 1896
    functionDepth: 0
    functionLinenumber: 1896
    functionLinenumberEnd: 1906
    functionName: TestRpcPBMessageFactory::Get
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 4
    functionsReached:
    - butil::get_object<DefaultRpcPBMessages>
    - butil::get_object<v1::EchoRequest>
    - butil::get_object<v1::EchoResponse>
    - auto::clear_message
    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:1909,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1910,1
    - Dst: static_cast<v1::EchoRequest*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1910,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1911,1
    - Dst: static_cast<v1::EchoResponse*>
      Src: /src/brpc/test/brpc_server_unittest.cpp:1911,1
    - Dst: butil::return_object
      Src: /src/brpc/test/brpc_server_unittest.cpp:1914,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - messages
    argTypes:
    - brpc::RpcPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1915
      start: 1908
    functionDepth: 0
    functionLinenumber: 1908
    functionLinenumberEnd: 1915
    functionName: TestRpcPBMessageFactory::Return
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<v1::EchoRequest*>
    - static_cast<v1::EchoResponse*>
    - butil::return_object
    - static_cast<DefaultRpcPBMessages*>
    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:1919,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1920,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1920,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1921,1
    - Dst: EchoServiceV1::EchoServiceV1
      Src: /src/brpc/test/brpc_server_unittest.cpp:1922,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1923,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1923,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1924,1
    - Dst: TestRpcPBMessageFactory::TestRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1926,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1926,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1928,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1929,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1931,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1931,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1933,1
    - Dst: v1::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1936,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1938,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1939,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1939,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1939,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1940,1
    - Dst: v1::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1940,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1943,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1944,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1946,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1946,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1948,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1949,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1950,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1950,1
    - Dst: v1::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1952,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1953,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1954,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1954,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1954,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1955,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1958,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:1958,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1959,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:1959,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1960
      start: 1918
    functionDepth: 1
    functionLinenumber: 1918
    functionLinenumberEnd: 1960
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - EchoServiceV1::EchoServiceV1
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Channel::Channel
    - c_str
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - v1::EchoRequest::set_message
    - brpc::Server::AddService
    - v1::EchoResponse::message
    - TestRpcPBMessageFactory::TestRpcPBMessageFactory
    - butil::string_printf
    - v1::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:1963,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1964,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:1964,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:1965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1967,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:1967,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1968,1
    - Dst: brpc::GetArenaRpcPBMessageFactory
      Src: /src/brpc/test/brpc_server_unittest.cpp:1969,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1970,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:1970,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1972,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1973,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1975,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1975,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1977,1
    - Dst: v3::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1980,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1983,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1983,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1983,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1984,1
    - Dst: v3::EchoResponse::message
      Src: /src/brpc/test/brpc_server_unittest.cpp:1984,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:1987,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:1988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1990,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:1990,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:1992,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1993,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1994,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1994,1
    - Dst: v3::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:1996,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:1997,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:1998,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_server_unittest.cpp:1998,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_server_unittest.cpp:1998,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:1999,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2002,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2002,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2003,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2003,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2004
      start: 1962
    functionDepth: 1
    functionLinenumber: 1962
    functionLinenumberEnd: 2004
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - v3::EchoResponse::message
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - v3::EchoService_Stub::Echo
    - brpc::Channel::Channel
    - c_str
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::GetArenaRpcPBMessageFactory
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - v3::EchoRequest::set_message
    - butil::string_printf
    - brpc::ServerOptions::ServerOptions
    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:2009,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2013,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2013,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:2017,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:2019,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2020,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2020,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2021,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:2021,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: 2022
      start: 2006
    functionDepth: 1
    functionLinenumber: 2006
    functionLinenumberEnd: 2022
    functionName: TestBaiduStdAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::Channel::Init
    - Failed
    - test::EchoService_Stub::Echo
    - ASSERT_EQ
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ErrorText
    - ErrorCode
    - brpc::ChannelOptions::ChannelOptions
    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:2027,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2028,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2031,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2031,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2033,1
    - Dst: request_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2034,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2035,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_server_unittest.cpp:2037,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2038,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2038,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2038,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2039,1
    - Dst: http_response
      Src: /src/brpc/test/brpc_server_unittest.cpp:2039,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: 2040
      start: 2024
    functionDepth: 1
    functionLinenumber: 2024
    functionLinenumberEnd: 2040
    functionName: TestHttpAuth
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::Channel::Init
    - http_response
    - http_request
    - Failed
    - request_attachment
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::Channel::CallMethod
    - ErrorText
    - brpc::ChannelOptions::ChannelOptions
    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:2043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2044,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2044,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:2045,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:2046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2047,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:2047,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_server_unittest.cpp:2048,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2049,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2051,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:2051,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:2053,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2054,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2057,1
    - Dst: TestBaiduStdAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2058,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2059,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2059,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2061,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2062,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_server_unittest.cpp:2063,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_server_unittest.cpp:2063,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2067,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_server_unittest.cpp:2068,1
    - Dst: TestHttpAuth
      Src: /src/brpc/test/brpc_server_unittest.cpp:2069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2071,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2072,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2072,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2073
      start: 2042
    functionDepth: 2
    functionLinenumber: 2042
    functionLinenumberEnd: 2073
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - TestBaiduStdAuth
    - brpc::Controller::http_request
    - butil::EndPoint::EndPoint
    - TestHttpAuth
    - brpc::Server::AddService
    - ASSERT_NE
    - MyAuthenticator::MyAuthenticator
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, auth)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_server_unittest.cpp:2079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2081,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_server_unittest.cpp:2081,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_server_unittest.cpp:2085,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_server_unittest.cpp:2087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2088,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_server_unittest.cpp:2088,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_server_unittest.cpp:2088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2089,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_server_unittest.cpp:2089,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 5
    argNames:
    - ' ep'
    - ' cntl'
    - error_code
    - failed
    - ' copt'
    argTypes:
    - butil::EndPoint
    - brpc::Controller
    - int
    - bool
    - brpc::ChannelOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2090
      start: 2075
    functionDepth: 1
    functionLinenumber: 2075
    functionLinenumberEnd: 2090
    functionName: TestClientHost
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::Channel::Init
    - Failed
    - test::EchoService_Stub::Echo
    - ASSERT_EQ
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ErrorText
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: "void TestClientHost(const butil::EndPoint& ep,\n                  brpc::Controller&
      cntl,\n                  int error_code, bool failed,\n                  brpc::ChannelOptions&
      copt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2093,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2094,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_server_unittest.cpp:2094,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_server_unittest.cpp:2095,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_server_unittest.cpp:2096,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2097,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_server_unittest.cpp:2097,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2099,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_server_unittest.cpp:2099,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_server_unittest.cpp:2101,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_server_unittest.cpp:2102,1
    - Dst: TestClientHost
      Src: /src/brpc/test/brpc_server_unittest.cpp:2112,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_server_unittest.cpp:2113,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2116,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_server_unittest.cpp:2116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_server_unittest.cpp:2117,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_server_unittest.cpp:2117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2118
      start: 2092
    functionDepth: 2
    functionLinenumber: 2092
    functionLinenumberEnd: 2118
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_server_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Controller::Controller
    - brpc::Server::AddService
    - brpc::Server::Start
    - TestClientHost
    - brpc::Server::Stop
    - brpc::Server::Join
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::Controller::Reset
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - brpc::ServerOptions::ServerOptions
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(ServerTest, bind_client_host_and_network_device)
  - 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:
    - std::map<std::string, std::string>::string>
    - butil::debug::SetCrashKeyReportingFunctions
    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:
    - EXPECT_EQ
    - find
    - end
    - butil::debug::ClearCrashKey
    - EXPECT_TRUE
    - butil::debug::InitCrashKeys
    - butil::debug::SetCrashKeyValue
    - arraysize
    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:
    - EXPECT_EQ
    - find
    - end
    - EXPECT_TRUE
    - butil::debug::ClearCrashKey
    - butil::debug::InitCrashKeys
    - butil::debug::SetCrashKeyValue
    - size
    - arraysize
    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:
    - EXPECT_EQ
    - find
    - end
    - EXPECT_TRUE
    - butil::debug::InitCrashKeys
    - size
    - arraysize
    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:
    - EXPECT_EQ
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::debug::InitCrashKeys
    - butil::debug::LookupCrashKey
    - arraysize
    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:
    - ChunkCrashKeyValue
    - ASSERT_EQ
    - std::vector::size
    - EXPECT_EQ
    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:
    - butil::Timer::stop
    - ASSERT_TRUE
    - butil::IOBuf::length
    - printf
    - decompress
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - compress
    - butil::Timer::Timer
    - butil::IOBuf::IOBuf
    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:
    - brpc::policy::SnappyCompress
    - ASSERT_TRUE
    - snappy_message::SnappyMessageProto::add_numbers
    - strcmp
    - brpc::policy::SnappyDecompress
    - snappy_message::SnappyMessageProto::numbers
    - ASSERT_EQ
    - snappy_message::SnappyMessageProto::numbers_size
    - snappy_message::SnappyMessageProto::text
    - 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:
    - brpc::policy::SnappyCompress
    - ASSERT_TRUE
    - strlen
    - brpc::policy::SnappyDecompress
    - butil::IOBuf::append
    - to_string
    - ASSERT_STREQ
    - butil::IOBuf::IOBuf
    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:
    - brpc::policy::SnappyCompress
    - ASSERT_TRUE
    - snappy_message::SnappyMessageProto::add_numbers
    - strcmp
    - brpc::policy::SnappyDecompress
    - ProfilerStop
    - snappy_message::SnappyMessageProto::numbers
    - ASSERT_EQ
    - char::char
    - snappy_message::SnappyMessageProto::numbers_size
    - snappy_message::SnappyMessageProto::text
    - ProfilerStart
    - butil::IOBuf::IOBuf
    - snappy_message::SnappyMessageProto::set_text
    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:
    - std::string::c_str
    - ASSERT_TRUE
    - strlen
    - std::string::append
    - char::char
    - butil::snappy::Compress
    - butil::snappy::Uncompress
    - const_cast<char*>
    - butil::IOBuf::IOBuf
    - std::string::size
    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
    - butil::Timer::Timer
    - CompressMessage
    - std::min
    - char::char
    - printf
    - snappy_message::SnappyMessageProto::set_text
    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
    - butil::Timer::Timer
    - CompressMessage
    - std::min
    - char::char
    - printf
    - rand
    - snappy_message::SnappyMessageProto::set_text
    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:
    - brpc::policy::SnappyCompress
    - ASSERT_TRUE
    - strlen
    - strcmp
    - std::string::c_str
    - butil::IOBuf::to_string
    - butil::IOBuf::append
    - to_string
    - char::char
    - SnappyDecompressIOBuf
    - std::string::data
    - const_cast<char*>
    - butil::IOBuf::IOBuf
    - std::string::size
    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: 1
    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:
    - Map::empty
    - Map::bucket_count
    - ASSERT_TRUE
    - arraysize
    - ASSERT_NE
    - Map::initialized
    - ASSERT_GE
    - ASSERT_LE
    - ASSERT_EQ
    - Map::size
    - Map::init
    - butil::flatmap_round
    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: 1
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::FlatMap::seek
    - 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: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:255,1
    - Dst: tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:255,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:255,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:262,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:273,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:274,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:275,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:277,1
    - Dst: strcasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:278,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:279,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:280,1
    - Dst: strncasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:281,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:282,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:283,1
    - Dst: memcmp
      Src: /src/brpc/test/flat_map_unittest.cpp:284,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:286,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:286,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:287,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:288,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 289
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - LOG
    - ASSERT_EQ
    - tolower
    - strcasecmp
    - butil::Timer::start
    - butil::ascii_tolower
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - memcmp
    - rand
    - strncasecmp
    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:294,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:295,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/test/flat_map_unittest.cpp:297,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:300,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    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/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - LOG
    - __builtin_ctzl
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:305,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:314,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 315
    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:319,1
    - Dst: butil::CaseIgnoredFlatSet::init
      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: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:325,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:325,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:327,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:327,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:329,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:329,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:333,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:334,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 335
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::CaseIgnoredFlatSet::insert
    - butil::CaseIgnoredFlatSet::init
    - ASSERT_TRUE
    - butil::CaseIgnoredFlatSet::size
    - butil::CaseIgnoredFlatSet::seek
    - ASSERT_EQ
    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:341,1
    - Dst: M1::init
      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_EQ
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:348,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:349,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:352,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:352,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:353,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:355,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:356,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:357,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:358,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:359,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:359,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:360,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:360,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:371,1
    - Dst: S1::init
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:372,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:373,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:374,1
    - Dst: S1::seek
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:375,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:378,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:378,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:380,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:382,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:383,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:384,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:385,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:386,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:386,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:387,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:387,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:391,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:391,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 395
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - S1::erase
    - M1::end
    - M1::insert
    - M1::begin
    - ASSERT_TRUE
    - M1::seek
    - S1::begin
    - S1::size
    - S1::seek
    - ASSERT_EQ
    - S1::end
    - S1::init
    - M1::size
    - M1::erase
    - S1::insert
    - M1::init
    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:403,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:403,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:404,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:406,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:408,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/flat_map_unittest.cpp:408,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:411,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:415,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:416,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:420,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:421,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:425,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:426,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:426,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:427,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:428,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:430,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:432,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:434,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:435,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:437,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:439,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:440,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:442,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:444,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:446,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:446,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:448,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:452,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:453,1
    - Dst: std::map::find
      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: start
      Src: /src/brpc/test/flat_map_unittest.cpp:458,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:462,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:463,1
    - Dst: find_cstr
      Src: /src/brpc/test/flat_map_unittest.cpp:465,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:465,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:469,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:469,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:470,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:470,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:476,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:486,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:487,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:488,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:488,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:490,1
    - Dst: ASSERT_TRUE
      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: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:492,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: ASSERT_TRUE
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:499,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:499,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:500,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      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: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:505,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:507,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:508,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:508,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:510,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:512,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: ASSERT_TRUE
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:519,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:519,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:520,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:521,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:521,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:522,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:523,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:523,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:524,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:525,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:526,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:527,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:528,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:528,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 108
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 530
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - find_cstr
    - butil::FlatMap::size
    - LOG
    - butil::hash_map::find
    - ASSERT_EQ
    - butil::Timer::start
    - std::vector::reserve
    - butil::Timer::stop
    - ASSERT_TRUE
    - stop
    - std::map::find
    - butil::FlatMap::swap
    - c_str
    - butil::Timer::Timer
    - butil::string_printf
    - std::vector::push_back
    - start
    - butil::FlatMap::resize
    - butil::FlatMap::seek
    - butil::Timer::n_elapsed
    - butil::FlatMap::init
    - n_elapsed
    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:539,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:541,1
    - Dst: M2::init
      Src: /src/brpc/test/flat_map_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:544,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:548,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:550,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:550,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:553,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:554,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:558,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:560,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:561,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:567,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:567,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:568,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:569,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:570,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:570,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:571,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:573,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:574,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:574,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:575,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:577,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:579,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:580,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:581,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:585,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:586,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:586,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 532
    functionDepth: 1
    functionLinenumber: 532
    functionLinenumberEnd: 587
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - butil::Timer::stop
    - M2::init
    - M1::begin
    - ASSERT_TRUE
    - std::vector::push_back
    - M1::end
    - M2::end
    - M2::begin
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - rand
    - M1::init
    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:594,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:597,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:597,1
    - Dst: save_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:600,1
    - Dst: on_pause
      Src: /src/brpc/test/flat_map_unittest.cpp:602,1
    - Dst: restore_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:603,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:604,1
    - Dst: std::vector<Key>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:605,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:607,1
    - Dst: std::vector<Key>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:611,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: 613
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 613
    functionName: list_flat_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - on_pause
    - std::vector<Key>*::clear
    - restore_iterator
    - end
    - save_iterator
    - std::vector<Key>*::push_back
    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:619,1
    - Dst: time
      Src: /src/brpc/test/flat_map_unittest.cpp:619,1
    - Dst: PositionHintMap*::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:622,1
    - Dst: PositionHintMap*::init
      Src: /src/brpc/test/flat_map_unittest.cpp:622,1
    - Dst: std::vector<uint64_t>*::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:625,1
    - Dst: std::vector<uint64_t>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    - Dst: PositionHintMap*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:627,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:629,1
    - Dst: PositionHintMap*::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:630,1
    - Dst: std::vector<uint64_t>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:633,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:636,1
    - Dst: PositionHintMap*::bucket_info
      Src: /src/brpc/test/flat_map_unittest.cpp:636,1
    - Dst: PositionHintMap*::size
      Src: /src/brpc/test/flat_map_unittest.cpp:636,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - map
    - keys
    argTypes:
    - PositionHintMap*
    - std::vector<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 637
    functionName: fill_position_hint_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - PositionHintMap*::bucket_info
    - PositionHintMap*::initialized
    - PositionHintMap*::seek
    - LOG
    - ASSERT_EQ
    - PositionHintMap*::clear
    - PositionHintMap*::size
    - PositionHintMap*::init
    - std::vector<uint64_t>*::reserve
    - std::vector<uint64_t>*::push_back
    - srand
    - std::vector<uint64_t>*::clear
    - rand
    - time
    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: 640
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 640
    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: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    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:650,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:655,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:656,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:657,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:657,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:657,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:658,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:658,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:658,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:659,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:660,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:660,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:662,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 647
    functionDepth: 2
    functionLinenumber: 647
    functionLinenumberEnd: 665
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - PositionHintMap::seek
    - EXPECT_EQ
    - ASSERT_TRUE
    - PositionHintMap::size
    - fill_position_hint_map
    - std::vector::end
    - ASSERT_NE
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::sort
    - list_flat_map
    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:669,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:670,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 668
    functionDepth: 1
    functionLinenumber: 668
    functionLinenumberEnd: 671
    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:675,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:675,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:680,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:680,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:681,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:687,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:687,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:688,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 672
    functionDepth: 0
    functionLinenumber: 672
    functionLinenumberEnd: 690
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - ASSERT_EQ
    - erase
    - seek
    - size
    - 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:700,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:703,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:708,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:710,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:710,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:711,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:711,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:711,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:712,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:714,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:716,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:717,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:717,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    - Dst: RemoveInsertVisitedOnPause::inserted_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 697
    functionDepth: 2
    functionLinenumber: 697
    functionLinenumberEnd: 721
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - RemoveInsertVisitedOnPause::inserted_keys::seek
    - ASSERT_FALSE
    - PositionHintMap::seek
    - EXPECT_EQ
    - ASSERT_TRUE
    - RemoveInsertVisitedOnPause::removed_keys::seek
    - PositionHintMap::size
    - fill_position_hint_map
    - std::vector::end
    - ASSERT_NE
    - ASSERT_EQ
    - std::vector::begin
    - RemoveInsertVisitedOnPause::removed_keys::size
    - std::vector::size
    - std::sort
    - list_flat_map
    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:725,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 724
    functionDepth: 1
    functionLinenumber: 724
    functionLinenumberEnd: 726
    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:729,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:729,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:730,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 727
    functionDepth: 0
    functionLinenumber: 727
    functionLinenumberEnd: 731
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - insert
    - erase
    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:739,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:745,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:748,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::unique
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: LOG_IF
      Src: /src/brpc/test/flat_map_unittest.cpp:751,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:751,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:752,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:754,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:754,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:754,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:755,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:757,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:759,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:760,1
    - Dst: RemoveHintedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:760,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 736
    functionDepth: 2
    functionLinenumber: 736
    functionLinenumberEnd: 763
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique
    - PositionHintMap::seek
    - ASSERT_TRUE
    - RemoveHintedOnPause::removed_keys::seek
    - std::vector::end
    - fill_position_hint_map
    - PositionHintMap::size
    - ASSERT_NE
    - std::vector::begin
    - ASSERT_EQ
    - std::vector::size
    - std::sort
    - std::vector::resize
    - list_flat_map
    - LOG_IF
    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:768,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:769,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 770
    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:775,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:776,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:777,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:777,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:777,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:778,1
    - Dst: push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:781,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:782,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:789,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:789,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:794,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:797,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:797,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:797,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:798,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:801,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:801,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:802,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 771
    functionDepth: 0
    functionLinenumber: 771
    functionLinenumberEnd: 805
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - insert
    - size
    - end
    - ASSERT_EQ
    - erase
    - seek
    - push_back
    - std::find
    - 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:816,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:824,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:825,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:825,1
    - Dst: RemoveInsertUnvisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:826,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:826,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:826,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:827,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:827,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:827,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:828,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:830,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:832,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:832,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 834
      start: 813
    functionDepth: 2
    functionLinenumber: 813
    functionLinenumberEnd: 834
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - PositionHintMap::seek
    - EXPECT_EQ
    - ASSERT_TRUE
    - PositionHintMap::size
    - fill_position_hint_map
    - std::vector::end
    - ASSERT_NE
    - ASSERT_EQ
    - RemoveInsertUnvisitedOnPause::removed_keys::size
    - std::vector::begin
    - std::vector::size
    - std::sort
    - list_flat_map
    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: 844
      start: 836
    functionDepth: 0
    functionLinenumber: 836
    functionLinenumberEnd: 844
    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:849,1
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/test/flat_map_unittest.cpp:849,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 849
    functionName: operator()(const T* p) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint64_t>
    - fmix64
    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:855,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 855
      start: 854
    functionDepth: 0
    functionLinenumber: 854
    functionLinenumberEnd: 855
    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:861,1
    - Dst: int::int
      Src: /src/brpc/test/flat_map_unittest.cpp:862,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/test/flat_map_unittest.cpp:866,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:871,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:873,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:873,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:876,1
    - Dst: std::set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:878,1
    - Dst: butil::hash_set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:879,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: butil::hash_set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:887,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:887,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:887,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:890,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:891,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:892,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:894,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:895,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:895,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:895,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:898,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:899,1
    - Dst: std::set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:900,1
    - Dst: std::set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:900,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:906,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:907,1
    - Dst: butil::hash_set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:908,1
    - Dst: butil::hash_set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:908,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:911,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:911,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:911,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:913,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 916
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatSet::size
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - std::vector::size
    - butil::FlatSet::FlatSet
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::end
    - std::set::size
    - butil::Timer::Timer
    - butil::FlatSet::init
    - std::set::end
    - butil::hash_set::size
    - std::vector::push_back
    - butil::hash_set::end
    - std::set::insert
    - std::random_shuffle
    - std::vector::begin
    - std::set::find
    - butil::Timer::n_elapsed
    - butil::FlatSet::insert
    - butil::hash_set::find
    - ARRAY_SIZE
    - int::int
    - butil::hash_set::insert
    - butil::FlatSet::seek
    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: 924
      start: 924
    functionDepth: 0
    functionLinenumber: 924
    functionLinenumberEnd: 924
    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: 925
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 925
    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: 926
      start: 926
    functionDepth: 0
    functionLinenumber: 926
    functionLinenumberEnd: 926
    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: 930
      start: 927
    functionDepth: 0
    functionLinenumber: 927
    functionLinenumberEnd: 930
    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: 936
      start: 932
    functionDepth: 0
    functionLinenumber: 932
    functionLinenumberEnd: 936
    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: 938
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 938
    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: 939
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 939
    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: 942
      start: 941
    functionDepth: 0
    functionLinenumber: 941
    functionLinenumberEnd: 942
    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: 951
      start: 951
    functionDepth: 0
    functionLinenumber: 951
    functionLinenumberEnd: 951
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 5
    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: 952
      start: 952
    functionDepth: 0
    functionLinenumber: 952
    functionLinenumberEnd: 952
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 5
    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: 953
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 953
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 5
    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: 954
      start: 954
    functionDepth: 0
    functionLinenumber: 954
    functionLinenumberEnd: 954
    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: 955
      start: 955
    functionDepth: 0
    functionLinenumber: 955
    functionLinenumberEnd: 955
    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: 959
      start: 959
    functionDepth: 0
    functionLinenumber: 959
    functionLinenumberEnd: 959
    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: 963
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 963
    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:968,1
    - Dst: butil::FlatMap::init
      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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:974,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:975,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:976,1
    - Dst: butil::FlatMap::seek
      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::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:977,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:979,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:980,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:981,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 966
    functionDepth: 1
    functionLinenumber: 966
    functionLinenumberEnd: 982
    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:986,1
    - Dst: butil::FlatMap::initialized
      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:987,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:988,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:989,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:989,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:990,1
    - Dst: butil::FlatMap::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:991,1
    - Dst: butil::FlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:991,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:992,1
    - Dst: butil::FlatMap::load_factor
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:995,1
    - Dst: ASSERT_NE
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1000,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1001,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1002,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::swap
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1007,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1008,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1008,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1009,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1011,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1013,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1014,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1014,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1015,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1017,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1018,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1019,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1020,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1021
      start: 984
    functionDepth: 1
    functionLinenumber: 984
    functionLinenumberEnd: 1021
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::initialized
    - butil::FlatMap::init
    - ASSERT_TRUE
    - ASSERT_NE
    - butil::FlatMap::empty
    - butil::FlatMap::load_factor
    - butil::FlatMap::swap
    - ASSERT_EQ
    - butil::FlatMap::seek
    - butil::FlatMap::size
    - butil::FlatMap::erase
    - butil::FlatMap::bucket_count
    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:1024,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1025,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1026,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1027,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1030,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1035,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1037,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1039,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1043,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1045,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1047,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1051,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1053,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1058,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1061,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1062,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1063,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1023
    functionDepth: 1
    functionLinenumber: 1023
    functionLinenumberEnd: 1065
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::CaseIgnoredFlatMap::init
    - LOG
    - butil::Timer::start
    - butil::FlatMap::init
    - butil::Timer::n_elapsed
    - 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:1070,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1070,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1071,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1072,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1072,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1073,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1073,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1074,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1079,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:1089,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1091,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1095,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1095,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1097,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1103,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1103,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1109,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1110,1
    - Dst: Map::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1111,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1111,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1112,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1112,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1113,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1116,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1116,1
    - Dst: Map::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: Map::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1128,1
    - Dst: Map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1129,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1129,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1130,1
    - Dst: Map::empty
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1132,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1133,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1134,1
    - Dst: Map::_pool::count_allocated
      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::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1141,1
    - Dst: Map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1145,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1146,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1147,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1148,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1149,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1150
      start: 1067
    functionDepth: 1
    functionLinenumber: 1067
    functionLinenumberEnd: 1150
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - Map::empty
    - Map::bucket_count
    - ASSERT_TRUE
    - Map::seek
    - Map::initialized
    - Map::end
    - ASSERT_EQ
    - Map::_pool::count_allocated
    - Map::clear
    - Map::size
    - Map::erase
    - Map::begin
    - Map::_pool::count_free
    - Map::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/flat_map_unittest.cpp:1153,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:1159,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1168,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1169,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1170,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1178,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1179,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1181,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1182,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1189,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1189,1
    - Dst: find
      Src: /src/brpc/test/flat_map_unittest.cpp:1191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1192,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1196,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1197,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1209,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1218
      start: 1152
    functionDepth: 1
    functionLinenumber: 1152
    functionLinenumberEnd: 1218
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - begin
    - find
    - ASSERT_TRUE
    - end
    - init
    - clear
    - LOG
    - ASSERT_EQ
    - erase
    - seek
    - srand
    - size
    - rand
    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:1223,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1233,1
    - Dst: std::max
      Src: /src/brpc/test/flat_map_unittest.cpp:1238,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1240,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1241,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1250,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1251,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1252,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1253,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1254,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1255,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1257,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1259,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1260,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1262,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1269,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1270,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1271,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1274,1
    - Dst: butil::MultiFlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1276,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1277,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1278,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1281,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1283,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1284,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1285,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1288,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1290,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1291,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1292,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1295,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1297,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1298,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1299,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1302,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1304,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1305,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1306,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1307,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1309,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1311,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1312,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1313,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1316,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1318,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1319,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1322,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1322,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1323,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1323,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1324,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1324,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1325,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1325,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1326,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1326,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1327,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1327,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1328,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1328,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1334,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1335,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1336,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1338,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1340,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1341,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1342,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1344,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1346,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1347,1
    - Dst: std::map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1348,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1350,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1352,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1353,1
    - Dst: butil::PooledMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1354,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1356,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1358,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1359,1
    - Dst: std::unordered_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1360,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1362,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1364,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1365,1
    - Dst: std::unordered_multimap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1366,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1368,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1370,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1371,1
    - Dst: butil::hash_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1372,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1374,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1376,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1377,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1380,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1380,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1381,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1381,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1382,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1382,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1383,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1383,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1384,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1384,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1385,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1385,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1386,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1386,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 110
    argCount: 2
    argNames:
    - random
    - ' value'
    argTypes:
    - bool
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1388
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1388
    functionName: perf_insert_erase
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_multimap::insert
    - std::vector::clear
    - std::unordered_multimap::erase
    - random_shuffle
    - LOG
    - butil::PooledMap::clear
    - butil::Timer::start
    - std::vector::size
    - butil::FlatMap::erase
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::Timer::stop
    - std::max
    - std::vector::end
    - stop
    - butil::Timer::Timer
    - butil::MultiFlatMap::erase
    - std::vector::push_back
    - std::unordered_map::clear
    - start
    - std::vector::begin
    - std::map::erase
    - butil::Timer::n_elapsed
    - std::map::clear
    - ARRAY_SIZE
    - butil::PooledMap::erase
    - butil::hash_map::clear
    - butil::hash_map::erase
    - std::unordered_multimap::clear
    - butil::FlatMap::init
    - butil::MultiFlatMap::clear
    - std::unordered_map::erase
    - n_elapsed
    - rand
    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:1393,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1403,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1406,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1407,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1408,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1410,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1411,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1413,1
    - Dst: butil::FlatMap::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::MultiFlatMap::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::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: butil::PooledMap::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_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: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1442,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1443,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1446,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1447,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1454,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1455,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1456,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1458,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1460,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1461,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1462,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1464,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1466,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1467,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1468,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1470,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1472,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1473,1
    - Dst: butil::PooledMap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1474,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1476,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1478,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1479,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1482,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1484,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1485,1
    - Dst: std::unordered_multimap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1486,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1488,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1490,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1491,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1492,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1494,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1496,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1496,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1499,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1499,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1500,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1500,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1501,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1501,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1502,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1502,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1503,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1503,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1504,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1504,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1505,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1505,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 75
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1507
      start: 1391
    functionDepth: 1
    functionLinenumber: 1391
    functionLinenumberEnd: 1507
    functionName: perf_seek
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_multimap::insert
    - std::vector::clear
    - random_shuffle
    - LOG
    - butil::hash_map::find
    - std::vector::size
    - butil::PooledMap::clear
    - butil::Timer::start
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::Timer::stop
    - butil::MultiFlatMap::seek
    - std::vector::end
    - stop
    - std::map::find
    - butil::Timer::Timer
    - butil::PooledMap::find
    - std::vector::push_back
    - std::unordered_map::clear
    - start
    - std::vector::begin
    - butil::FlatMap::seek
    - butil::Timer::n_elapsed
    - std::map::clear
    - ARRAY_SIZE
    - butil::hash_map::clear
    - std::unordered_multimap::clear
    - butil::FlatMap::init
    - std::unordered_multimap::find
    - butil::MultiFlatMap::clear
    - n_elapsed
    - rand
    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:1517,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1519,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1519,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1520,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1521,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1521,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1522,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1522,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1523,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1525,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1525,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1526,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1527,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1527,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1529
      start: 1516
    functionDepth: 2
    functionLinenumber: 1516
    functionLinenumberEnd: 1529
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - perf_seek
    - perf_insert_erase
    - Dummy1
    - Dummy2
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1534,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1534,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1538,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1538,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1538,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1540
      start: 1531
    functionDepth: 1
    functionLinenumber: 1531
    functionLinenumberEnd: 1540
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - butil::FlatMap::init
    - ASSERT_EQ
    - butil::FlatMap::size
    - butil::FlatMap::is_too_crowded
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1549,1
    - Dst: butil::MultiFlatMap::init
      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: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1554,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      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:1559,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: butil::MultiFlatMap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1565,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1576,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: hasher
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1580,1
    - Dst: hasher
      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::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1584,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1585,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1587,1
    - Dst: ASSERT_EQ
      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_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1591,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1592,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1592,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1593,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1596,1
    - Dst: butil::MultiFlatMap::seek
      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::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1598,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1599,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1599,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1600,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1600,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1606,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1607,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1607,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1607,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1613,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1614,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1614,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1618,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1622,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1626,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1627
      start: 1542
    functionDepth: 1
    functionLinenumber: 1542
    functionLinenumberEnd: 1627
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - hasher
    - butil::MultiFlatMap::size
    - ASSERT_TRUE
    - butil::flatmap_mod
    - butil::flatmap_round
    - butil::MultiFlatMap::seek
    - ASSERT_NE
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - butil::MultiFlatMap::bucket_count
    - std::vector::size
    - butil::MultiFlatMap::seek_all
    - butil::MultiFlatMap::init
    - butil::MultiFlatMap::erase
    - std::find
    - butil::MultiFlatMap::insert
    - Foo
    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: 1
    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:
    - Map::empty
    - Map::bucket_count
    - ASSERT_TRUE
    - arraysize
    - ASSERT_NE
    - Map::initialized
    - ASSERT_GE
    - ASSERT_LE
    - ASSERT_EQ
    - Map::size
    - Map::init
    - butil::flatmap_round
    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: 1
    functionLinenumber: 228
    functionLinenumberEnd: 241
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::FlatMap::seek
    - 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: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:255,1
    - Dst: tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:255,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/test/flat_map_unittest.cpp:255,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:262,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:273,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:274,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:275,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:277,1
    - Dst: strcasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:278,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:279,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:280,1
    - Dst: strncasecmp
      Src: /src/brpc/test/flat_map_unittest.cpp:281,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:282,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:283,1
    - Dst: memcmp
      Src: /src/brpc/test/flat_map_unittest.cpp:284,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:286,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:286,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:287,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:288,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 289
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - LOG
    - ASSERT_EQ
    - tolower
    - strcasecmp
    - butil::Timer::start
    - butil::ascii_tolower
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - memcmp
    - rand
    - strncasecmp
    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:294,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:295,1
    - Dst: __builtin_ctzl
      Src: /src/brpc/test/flat_map_unittest.cpp:297,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:300,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    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/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - LOG
    - __builtin_ctzl
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:305,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:314,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 315
    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:319,1
    - Dst: butil::CaseIgnoredFlatSet::init
      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: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:323,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:325,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:325,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:327,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:327,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:329,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:329,1
    - Dst: butil::CaseIgnoredFlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:330,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: butil::CaseIgnoredFlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:332,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:333,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:334,1
    - Dst: butil::CaseIgnoredFlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 335
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::CaseIgnoredFlatSet::insert
    - butil::CaseIgnoredFlatSet::init
    - ASSERT_TRUE
    - butil::CaseIgnoredFlatSet::size
    - butil::CaseIgnoredFlatSet::seek
    - ASSERT_EQ
    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:341,1
    - Dst: M1::init
      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_EQ
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:348,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:349,1
    - Dst: M1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:352,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:352,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:353,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: M1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:355,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:356,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:357,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:358,1
    - Dst: M1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:358,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:359,1
    - Dst: M1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:359,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:360,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:360,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:371,1
    - Dst: S1::init
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:372,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:373,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:374,1
    - Dst: S1::seek
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:375,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:378,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:378,1
    - Dst: S1::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:379,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:380,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:382,1
    - Dst: S1::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:383,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:384,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:385,1
    - Dst: S1::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:386,1
    - Dst: S1::size
      Src: /src/brpc/test/flat_map_unittest.cpp:386,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:387,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:387,1
    - Dst: S1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:391,1
    - Dst: S1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:391,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 395
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - S1::erase
    - M1::end
    - M1::insert
    - M1::begin
    - ASSERT_TRUE
    - M1::seek
    - S1::begin
    - S1::size
    - S1::seek
    - ASSERT_EQ
    - S1::end
    - S1::init
    - M1::size
    - M1::erase
    - S1::insert
    - M1::init
    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:403,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:403,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:404,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:406,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:408,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/flat_map_unittest.cpp:408,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:411,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:415,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:416,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:420,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:421,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:425,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:426,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:426,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:427,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:428,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:430,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:432,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:434,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:435,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:437,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:439,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:440,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:442,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:444,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:445,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:446,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:446,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:448,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:450,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:452,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:453,1
    - Dst: std::map::find
      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: start
      Src: /src/brpc/test/flat_map_unittest.cpp:458,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:460,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:462,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:463,1
    - Dst: find_cstr
      Src: /src/brpc/test/flat_map_unittest.cpp:465,1
    - Dst: c_str
      Src: /src/brpc/test/flat_map_unittest.cpp:465,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:469,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:469,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:470,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:470,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:475,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:476,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:486,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:487,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:488,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:488,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:490,1
    - Dst: ASSERT_TRUE
      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: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:492,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:493,1
    - Dst: ASSERT_TRUE
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:496,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:499,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:499,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:500,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      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: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:505,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:507,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:508,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:508,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:510,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:511,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:512,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:513,1
    - Dst: ASSERT_TRUE
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:516,1
    - Dst: butil::FlatMap::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:519,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:519,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:520,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:521,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:521,1
    - Dst: butil::FlatMap::swap
      Src: /src/brpc/test/flat_map_unittest.cpp:522,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:523,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:523,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:524,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:525,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:525,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:526,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:527,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:528,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:528,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 108
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 530
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 530
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - find_cstr
    - butil::FlatMap::size
    - LOG
    - butil::hash_map::find
    - ASSERT_EQ
    - butil::Timer::start
    - std::vector::reserve
    - butil::Timer::stop
    - ASSERT_TRUE
    - stop
    - std::map::find
    - butil::FlatMap::swap
    - c_str
    - butil::Timer::Timer
    - butil::string_printf
    - std::vector::push_back
    - start
    - butil::FlatMap::resize
    - butil::FlatMap::seek
    - butil::Timer::n_elapsed
    - butil::FlatMap::init
    - n_elapsed
    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:539,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: M1::init
      Src: /src/brpc/test/flat_map_unittest.cpp:540,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:541,1
    - Dst: M2::init
      Src: /src/brpc/test/flat_map_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:543,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:544,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:548,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:550,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:550,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:553,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:554,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:558,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:560,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:561,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:567,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:567,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:568,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:569,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:570,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:570,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:571,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:573,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:574,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:574,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:575,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:576,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:577,1
    - Dst: M1::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:579,1
    - Dst: M2::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:580,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:581,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:585,1
    - Dst: M1::end
      Src: /src/brpc/test/flat_map_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:586,1
    - Dst: M2::end
      Src: /src/brpc/test/flat_map_unittest.cpp:586,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 587
      start: 532
    functionDepth: 1
    functionLinenumber: 532
    functionLinenumberEnd: 587
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - butil::Timer::stop
    - M2::init
    - M1::begin
    - ASSERT_TRUE
    - std::vector::push_back
    - M1::end
    - M2::end
    - M2::begin
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - rand
    - M1::init
    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:594,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:597,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:597,1
    - Dst: save_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:600,1
    - Dst: on_pause
      Src: /src/brpc/test/flat_map_unittest.cpp:602,1
    - Dst: restore_iterator
      Src: /src/brpc/test/flat_map_unittest.cpp:603,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:604,1
    - Dst: std::vector<Key>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:605,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:607,1
    - Dst: std::vector<Key>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:611,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: 613
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 613
    functionName: list_flat_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 4
    functionsReached:
    - begin
    - on_pause
    - std::vector<Key>*::clear
    - restore_iterator
    - end
    - save_iterator
    - std::vector<Key>*::push_back
    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:619,1
    - Dst: time
      Src: /src/brpc/test/flat_map_unittest.cpp:619,1
    - Dst: PositionHintMap*::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:622,1
    - Dst: PositionHintMap*::init
      Src: /src/brpc/test/flat_map_unittest.cpp:622,1
    - Dst: std::vector<uint64_t>*::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:625,1
    - Dst: std::vector<uint64_t>*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:626,1
    - Dst: PositionHintMap*::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:627,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:629,1
    - Dst: PositionHintMap*::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:630,1
    - Dst: std::vector<uint64_t>*::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:633,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:636,1
    - Dst: PositionHintMap*::bucket_info
      Src: /src/brpc/test/flat_map_unittest.cpp:636,1
    - Dst: PositionHintMap*::size
      Src: /src/brpc/test/flat_map_unittest.cpp:636,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 2
    argNames:
    - map
    - keys
    argTypes:
    - PositionHintMap*
    - std::vector<uint64_t>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 637
    functionName: fill_position_hint_map
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 4
    functionsReached:
    - PositionHintMap*::bucket_info
    - PositionHintMap*::initialized
    - PositionHintMap*::seek
    - LOG
    - ASSERT_EQ
    - PositionHintMap*::clear
    - PositionHintMap*::size
    - PositionHintMap*::init
    - std::vector<uint64_t>*::reserve
    - std::vector<uint64_t>*::push_back
    - srand
    - std::vector<uint64_t>*::clear
    - rand
    - time
    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: 640
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 640
    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: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    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:650,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:655,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:656,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:656,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:657,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:657,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:657,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:658,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:658,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:658,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:659,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:660,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:660,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:662,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 647
    functionDepth: 2
    functionLinenumber: 647
    functionLinenumberEnd: 665
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - PositionHintMap::seek
    - EXPECT_EQ
    - ASSERT_TRUE
    - PositionHintMap::size
    - fill_position_hint_map
    - std::vector::end
    - ASSERT_NE
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::sort
    - list_flat_map
    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:669,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:670,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 668
    functionDepth: 1
    functionLinenumber: 668
    functionLinenumberEnd: 671
    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:675,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:675,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:677,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:680,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:680,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:681,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:687,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:687,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:688,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 672
    functionDepth: 0
    functionLinenumber: 672
    functionLinenumberEnd: 690
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - ASSERT_EQ
    - erase
    - seek
    - size
    - 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:700,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:703,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:708,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:709,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:710,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:710,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:711,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:711,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:711,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:712,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:714,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:716,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:717,1
    - Dst: RemoveInsertVisitedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:717,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    - Dst: RemoveInsertVisitedOnPause::inserted_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:719,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 697
    functionDepth: 2
    functionLinenumber: 697
    functionLinenumberEnd: 721
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - RemoveInsertVisitedOnPause::inserted_keys::seek
    - ASSERT_FALSE
    - PositionHintMap::seek
    - EXPECT_EQ
    - ASSERT_TRUE
    - RemoveInsertVisitedOnPause::removed_keys::seek
    - PositionHintMap::size
    - fill_position_hint_map
    - std::vector::end
    - ASSERT_NE
    - ASSERT_EQ
    - std::vector::begin
    - RemoveInsertVisitedOnPause::removed_keys::size
    - std::vector::size
    - std::sort
    - list_flat_map
    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:725,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 724
    functionDepth: 1
    functionLinenumber: 724
    functionLinenumberEnd: 726
    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:729,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:729,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:730,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 727
    functionDepth: 0
    functionLinenumber: 727
    functionLinenumberEnd: 731
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - insert
    - erase
    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:739,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:745,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:748,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:749,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::unique
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:750,1
    - Dst: LOG_IF
      Src: /src/brpc/test/flat_map_unittest.cpp:751,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:751,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:752,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:754,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:754,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:754,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:755,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:757,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:759,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:760,1
    - Dst: RemoveHintedOnPause::removed_keys::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:760,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 763
      start: 736
    functionDepth: 2
    functionLinenumber: 736
    functionLinenumberEnd: 763
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique
    - PositionHintMap::seek
    - ASSERT_TRUE
    - RemoveHintedOnPause::removed_keys::seek
    - std::vector::end
    - fill_position_hint_map
    - PositionHintMap::size
    - ASSERT_NE
    - std::vector::begin
    - ASSERT_EQ
    - std::vector::size
    - std::sort
    - std::vector::resize
    - list_flat_map
    - LOG_IF
    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:768,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:769,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 770
    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:775,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:776,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:777,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:777,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:777,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:778,1
    - Dst: push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:781,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:782,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:789,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:789,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:794,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:797,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:797,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:797,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:798,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:801,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:801,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:802,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 24
    argCount: 1
    argNames:
    - ' hint'
    argTypes:
    - PositionHintMap::PositionHint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 805
      start: 771
    functionDepth: 0
    functionLinenumber: 771
    functionLinenumberEnd: 805
    functionName: operator()(const PositionHintMap::PositionHint& hint)
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - begin
    - insert
    - size
    - end
    - ASSERT_EQ
    - erase
    - seek
    - push_back
    - std::find
    - 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:816,1
    - Dst: list_flat_map
      Src: /src/brpc/test/flat_map_unittest.cpp:824,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:825,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:825,1
    - Dst: RemoveInsertUnvisitedOnPause::removed_keys::size
      Src: /src/brpc/test/flat_map_unittest.cpp:825,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:826,1
    - Dst: PositionHintMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:826,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:826,1
    - Dst: std::sort
      Src: /src/brpc/test/flat_map_unittest.cpp:827,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:827,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:827,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:828,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:830,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:832,1
    - Dst: PositionHintMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:832,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 834
      start: 813
    functionDepth: 2
    functionLinenumber: 813
    functionLinenumberEnd: 834
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - PositionHintMap::seek
    - EXPECT_EQ
    - ASSERT_TRUE
    - PositionHintMap::size
    - fill_position_hint_map
    - std::vector::end
    - ASSERT_NE
    - ASSERT_EQ
    - RemoveInsertUnvisitedOnPause::removed_keys::size
    - std::vector::begin
    - std::vector::size
    - std::sort
    - list_flat_map
    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: 844
      start: 836
    functionDepth: 0
    functionLinenumber: 836
    functionLinenumberEnd: 844
    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:849,1
    - Dst: reinterpret_cast<uint64_t>
      Src: /src/brpc/test/flat_map_unittest.cpp:849,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 849
    functionName: operator()(const T* p) const
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint64_t>
    - fmix64
    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:855,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 855
      start: 854
    functionDepth: 0
    functionLinenumber: 854
    functionLinenumberEnd: 855
    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:861,1
    - Dst: int::int
      Src: /src/brpc/test/flat_map_unittest.cpp:862,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/test/flat_map_unittest.cpp:866,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:871,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/flat_map_unittest.cpp:873,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:873,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: butil::FlatSet::init
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:874,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:876,1
    - Dst: std::set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:877,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:878,1
    - Dst: butil::hash_set::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:879,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:881,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/test/flat_map_unittest.cpp:884,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: std::set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: butil::hash_set::size
      Src: /src/brpc/test/flat_map_unittest.cpp:885,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:887,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:887,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:887,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:890,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:891,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:892,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:894,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:895,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:895,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:895,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:898,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:899,1
    - Dst: std::set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:900,1
    - Dst: std::set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:900,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:903,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:906,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:907,1
    - Dst: butil::hash_set::find
      Src: /src/brpc/test/flat_map_unittest.cpp:908,1
    - Dst: butil::hash_set::end
      Src: /src/brpc/test/flat_map_unittest.cpp:908,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:911,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:911,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:911,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/flat_map_unittest.cpp:913,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 916
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 916
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatSet::size
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - std::vector::size
    - butil::FlatSet::FlatSet
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::end
    - std::set::size
    - butil::Timer::Timer
    - butil::FlatSet::init
    - std::set::end
    - butil::hash_set::size
    - std::vector::push_back
    - butil::hash_set::end
    - std::set::insert
    - std::random_shuffle
    - std::vector::begin
    - std::set::find
    - butil::Timer::n_elapsed
    - butil::FlatSet::insert
    - butil::hash_set::find
    - ARRAY_SIZE
    - int::int
    - butil::hash_set::insert
    - butil::FlatSet::seek
    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: 924
      start: 924
    functionDepth: 0
    functionLinenumber: 924
    functionLinenumberEnd: 924
    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: 925
      start: 925
    functionDepth: 0
    functionLinenumber: 925
    functionLinenumberEnd: 925
    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: 926
      start: 926
    functionDepth: 0
    functionLinenumber: 926
    functionLinenumberEnd: 926
    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: 930
      start: 927
    functionDepth: 0
    functionLinenumber: 927
    functionLinenumberEnd: 930
    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: 936
      start: 932
    functionDepth: 0
    functionLinenumber: 932
    functionLinenumberEnd: 936
    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: 938
      start: 938
    functionDepth: 0
    functionLinenumber: 938
    functionLinenumberEnd: 938
    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: 939
      start: 939
    functionDepth: 0
    functionLinenumber: 939
    functionLinenumberEnd: 939
    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: 942
      start: 941
    functionDepth: 0
    functionLinenumber: 941
    functionLinenumberEnd: 942
    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: 951
      start: 951
    functionDepth: 0
    functionLinenumber: 951
    functionLinenumberEnd: 951
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 5
    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: 952
      start: 952
    functionDepth: 0
    functionLinenumber: 952
    functionLinenumberEnd: 952
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 5
    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: 953
      start: 953
    functionDepth: 0
    functionLinenumber: 953
    functionLinenumberEnd: 953
    functionName: Key
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 5
    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: 954
      start: 954
    functionDepth: 0
    functionLinenumber: 954
    functionLinenumberEnd: 954
    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: 955
      start: 955
    functionDepth: 0
    functionLinenumber: 955
    functionLinenumberEnd: 955
    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: 959
      start: 959
    functionDepth: 0
    functionLinenumber: 959
    functionLinenumberEnd: 959
    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: 963
      start: 962
    functionDepth: 0
    functionLinenumber: 962
    functionLinenumberEnd: 963
    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:968,1
    - Dst: butil::FlatMap::init
      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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:972,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:974,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:975,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:976,1
    - Dst: butil::FlatMap::seek
      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::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:977,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:978,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:979,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:980,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:981,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 982
      start: 966
    functionDepth: 1
    functionLinenumber: 966
    functionLinenumberEnd: 982
    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:986,1
    - Dst: butil::FlatMap::initialized
      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:987,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:988,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:989,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:989,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:990,1
    - Dst: butil::FlatMap::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:990,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:991,1
    - Dst: butil::FlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:991,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:992,1
    - Dst: butil::FlatMap::load_factor
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:995,1
    - Dst: ASSERT_NE
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1000,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1001,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1002,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1004,1
    - Dst: butil::FlatMap::swap
      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::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1007,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1008,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1008,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1009,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1011,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1013,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1014,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1014,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1015,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1017,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1018,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1019,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1020,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1021
      start: 984
    functionDepth: 1
    functionLinenumber: 984
    functionLinenumberEnd: 1021
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::initialized
    - butil::FlatMap::init
    - ASSERT_TRUE
    - ASSERT_NE
    - butil::FlatMap::empty
    - butil::FlatMap::load_factor
    - butil::FlatMap::swap
    - ASSERT_EQ
    - butil::FlatMap::seek
    - butil::FlatMap::size
    - butil::FlatMap::erase
    - butil::FlatMap::bucket_count
    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:1024,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1025,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1026,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1027,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1030,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1035,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1037,1
    - Dst: butil::CaseIgnoredFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1039,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1043,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1045,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1047,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1051,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1053,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1058,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1060,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1061,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1062,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1063,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1023
    functionDepth: 1
    functionLinenumber: 1023
    functionLinenumberEnd: 1065
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::CaseIgnoredFlatMap::init
    - LOG
    - butil::Timer::start
    - butil::FlatMap::init
    - butil::Timer::n_elapsed
    - 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:1070,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1070,1
    - Dst: Map::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1071,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1072,1
    - Dst: Map::initialized
      Src: /src/brpc/test/flat_map_unittest.cpp:1072,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1073,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1073,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1074,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1075,1
    - Dst: Map::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1079,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:1089,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1091,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1095,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1095,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1096,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1097,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1102,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1103,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1103,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1104,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1109,1
    - Dst: Map::_pool::count_allocated
      Src: /src/brpc/test/flat_map_unittest.cpp:1109,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1110,1
    - Dst: Map::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1110,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1111,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1111,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1112,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1112,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1113,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1116,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1116,1
    - Dst: Map::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: Map::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1128,1
    - Dst: Map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1129,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1129,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1130,1
    - Dst: Map::empty
      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::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1132,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1133,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1134,1
    - Dst: Map::_pool::count_allocated
      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::_pool::count_free
      Src: /src/brpc/test/flat_map_unittest.cpp:1135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1141,1
    - Dst: Map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1145,1
    - Dst: Map::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1145,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1146,1
    - Dst: Map::empty
      Src: /src/brpc/test/flat_map_unittest.cpp:1146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1147,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1148,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1149,1
    - Dst: Map::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1150
      start: 1067
    functionDepth: 1
    functionLinenumber: 1067
    functionLinenumberEnd: 1150
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - Map::empty
    - Map::bucket_count
    - ASSERT_TRUE
    - Map::seek
    - Map::initialized
    - Map::end
    - ASSERT_EQ
    - Map::_pool::count_allocated
    - Map::clear
    - Map::size
    - Map::erase
    - Map::begin
    - Map::_pool::count_free
    - Map::init
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, sanity)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/flat_map_unittest.cpp:1153,1
    - Dst: init
      Src: /src/brpc/test/flat_map_unittest.cpp:1159,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1168,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1169,1
    - Dst: insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1170,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1178,1
    - Dst: erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1179,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1181,1
    - Dst: clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1182,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1189,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1189,1
    - Dst: find
      Src: /src/brpc/test/flat_map_unittest.cpp:1191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1192,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1192,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1193,1
    - Dst: begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1196,1
    - Dst: end
      Src: /src/brpc/test/flat_map_unittest.cpp:1197,1
    - Dst: seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    - Dst: size
      Src: /src/brpc/test/flat_map_unittest.cpp:1203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1209,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1213,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1218
      start: 1152
    functionDepth: 1
    functionLinenumber: 1152
    functionLinenumberEnd: 1218
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - insert
    - begin
    - find
    - ASSERT_TRUE
    - end
    - init
    - clear
    - LOG
    - ASSERT_EQ
    - erase
    - seek
    - srand
    - size
    - rand
    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:1223,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1233,1
    - Dst: std::max
      Src: /src/brpc/test/flat_map_unittest.cpp:1238,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1240,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1241,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1250,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1251,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1252,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1253,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1254,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1255,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1257,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1259,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1260,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1262,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1266,1
    - Dst: butil::FlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1269,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1270,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1271,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1274,1
    - Dst: butil::MultiFlatMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1276,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1277,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1278,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1281,1
    - Dst: std::map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1283,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1284,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1285,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1288,1
    - Dst: butil::PooledMap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1290,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1291,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1292,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1295,1
    - Dst: std::unordered_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1297,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1298,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1299,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1302,1
    - Dst: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1304,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1305,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1306,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1307,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1309,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1311,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1312,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1313,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1316,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1318,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1319,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1322,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1322,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1323,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1323,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1324,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1324,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1325,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1325,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1326,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1326,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1327,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1327,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1328,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1328,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1331,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1334,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1335,1
    - Dst: butil::FlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1336,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1338,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1340,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1341,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1342,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1344,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1346,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1347,1
    - Dst: std::map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1348,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1350,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1352,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1353,1
    - Dst: butil::PooledMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1354,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1356,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1358,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1359,1
    - Dst: std::unordered_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1360,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1362,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1364,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1365,1
    - Dst: std::unordered_multimap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1366,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1368,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1370,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1371,1
    - Dst: butil::hash_map::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1372,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1374,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1376,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1377,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1380,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1380,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1381,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1381,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1382,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1382,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1383,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1383,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1384,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1384,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1385,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1385,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1386,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1386,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 110
    argCount: 2
    argNames:
    - random
    - ' value'
    argTypes:
    - bool
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1388
      start: 1221
    functionDepth: 1
    functionLinenumber: 1221
    functionLinenumberEnd: 1388
    functionName: perf_insert_erase
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::unordered_multimap::insert
    - std::vector::clear
    - std::unordered_multimap::erase
    - random_shuffle
    - LOG
    - butil::PooledMap::clear
    - butil::Timer::start
    - std::vector::size
    - butil::FlatMap::erase
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::Timer::stop
    - std::max
    - std::vector::end
    - stop
    - butil::Timer::Timer
    - butil::MultiFlatMap::erase
    - std::vector::push_back
    - std::unordered_map::clear
    - start
    - std::vector::begin
    - std::map::erase
    - butil::Timer::n_elapsed
    - std::map::clear
    - ARRAY_SIZE
    - butil::PooledMap::erase
    - butil::hash_map::clear
    - butil::hash_map::erase
    - std::unordered_multimap::clear
    - butil::FlatMap::init
    - butil::MultiFlatMap::clear
    - std::unordered_map::erase
    - n_elapsed
    - rand
    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:1393,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/flat_map_unittest.cpp:1403,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1406,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1407,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1408,1
    - Dst: rand
      Src: /src/brpc/test/flat_map_unittest.cpp:1410,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1411,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/flat_map_unittest.cpp:1413,1
    - Dst: butil::FlatMap::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::MultiFlatMap::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::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: butil::PooledMap::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_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: std::unordered_multimap::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1441,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1442,1
    - Dst: std::unordered_multimap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1443,1
    - Dst: butil::hash_map::clear
      Src: /src/brpc/test/flat_map_unittest.cpp:1446,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1447,1
    - Dst: random_shuffle
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1451,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/flat_map_unittest.cpp:1454,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1455,1
    - Dst: butil::FlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1456,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1458,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1460,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1461,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1462,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1464,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1466,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1467,1
    - Dst: std::map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1468,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1470,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1472,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1473,1
    - Dst: butil::PooledMap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1474,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1476,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1478,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1479,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1482,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1484,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1485,1
    - Dst: std::unordered_multimap::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1486,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1488,1
    - Dst: start
      Src: /src/brpc/test/flat_map_unittest.cpp:1490,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1491,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1492,1
    - Dst: stop
      Src: /src/brpc/test/flat_map_unittest.cpp:1494,1
    - Dst: LOG
      Src: /src/brpc/test/flat_map_unittest.cpp:1496,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1496,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1499,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1499,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1500,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1500,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1501,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1501,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1502,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1502,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1503,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1503,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1504,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1504,1
    - Dst: n_elapsed
      Src: /src/brpc/test/flat_map_unittest.cpp:1505,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1505,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 75
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1507
      start: 1391
    functionDepth: 1
    functionLinenumber: 1391
    functionLinenumberEnd: 1507
    functionName: perf_seek
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::unordered_multimap::insert
    - std::vector::clear
    - random_shuffle
    - LOG
    - butil::hash_map::find
    - std::vector::size
    - butil::PooledMap::clear
    - butil::Timer::start
    - butil::MultiFlatMap::init
    - butil::FlatMap::clear
    - butil::Timer::stop
    - butil::MultiFlatMap::seek
    - std::vector::end
    - stop
    - std::map::find
    - butil::Timer::Timer
    - butil::PooledMap::find
    - std::vector::push_back
    - std::unordered_map::clear
    - start
    - std::vector::begin
    - butil::FlatMap::seek
    - butil::Timer::n_elapsed
    - std::map::clear
    - ARRAY_SIZE
    - butil::hash_map::clear
    - std::unordered_multimap::clear
    - butil::FlatMap::init
    - std::unordered_multimap::find
    - butil::MultiFlatMap::clear
    - n_elapsed
    - rand
    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:1517,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1518,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1519,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1519,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1520,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1521,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1521,1
    - Dst: perf_insert_erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1522,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1522,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1523,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1524,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1525,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1525,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1526,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1527,1
    - Dst: Dummy1
      Src: /src/brpc/test/flat_map_unittest.cpp:1527,1
    - Dst: perf_seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    - Dst: Dummy2
      Src: /src/brpc/test/flat_map_unittest.cpp:1528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1529
      start: 1516
    functionDepth: 2
    functionLinenumber: 1516
    functionLinenumberEnd: 1529
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - perf_seek
    - perf_insert_erase
    - Dummy1
    - Dummy2
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1534,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1534,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1538,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1538,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1538,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: butil::FlatMap::is_too_crowded
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1539,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1540
      start: 1531
    functionDepth: 1
    functionLinenumber: 1531
    functionLinenumberEnd: 1540
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - butil::FlatMap::init
    - ASSERT_EQ
    - butil::FlatMap::size
    - butil::FlatMap::is_too_crowded
    linkageType: ''
    returnType: void
    signature: void TEST_F(FlatMapTest, copy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1549,1
    - Dst: butil::MultiFlatMap::init
      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: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1554,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      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:1559,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1562,1
    - Dst: butil::MultiFlatMap::insert
      Src: /src/brpc/test/flat_map_unittest.cpp:1564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1565,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1567,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1569,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: std::vector::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1571,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1572,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1573,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::find
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: std::vector::end
      Src: /src/brpc/test/flat_map_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1576,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: hasher
      Src: /src/brpc/test/flat_map_unittest.cpp:1579,1
    - Dst: butil::flatmap_mod
      Src: /src/brpc/test/flat_map_unittest.cpp:1580,1
    - Dst: hasher
      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::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1581,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1584,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1585,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1586,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1587,1
    - Dst: ASSERT_EQ
      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_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1591,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1592,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1592,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1593,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1596,1
    - Dst: butil::MultiFlatMap::seek
      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::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1598,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1598,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1599,1
    - Dst: butil::MultiFlatMap::seek
      Src: /src/brpc/test/flat_map_unittest.cpp:1599,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/flat_map_unittest.cpp:1600,1
    - Dst: butil::MultiFlatMap::seek_all
      Src: /src/brpc/test/flat_map_unittest.cpp:1600,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1604,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1606,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1606,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1607,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1607,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1607,1
    - Dst: Foo
      Src: /src/brpc/test/flat_map_unittest.cpp:1611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1613,1
    - Dst: butil::MultiFlatMap::size
      Src: /src/brpc/test/flat_map_unittest.cpp:1613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1614,1
    - Dst: butil::flatmap_round
      Src: /src/brpc/test/flat_map_unittest.cpp:1614,1
    - Dst: butil::MultiFlatMap::bucket_count
      Src: /src/brpc/test/flat_map_unittest.cpp:1614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1618,1
    - Dst: butil::MultiFlatMap::init
      Src: /src/brpc/test/flat_map_unittest.cpp:1618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1620,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1622,1
    - Dst: butil::MultiFlatMap::erase
      Src: /src/brpc/test/flat_map_unittest.cpp:1622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/flat_map_unittest.cpp:1626,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1627
      start: 1542
    functionDepth: 1
    functionLinenumber: 1542
    functionLinenumberEnd: 1627
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/flat_map_unittest.cpp
    functionUses: 0
    functionsReached:
    - hasher
    - butil::MultiFlatMap::size
    - ASSERT_TRUE
    - butil::flatmap_mod
    - butil::flatmap_round
    - butil::MultiFlatMap::seek
    - ASSERT_NE
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - butil::MultiFlatMap::bucket_count
    - std::vector::size
    - butil::MultiFlatMap::seek_all
    - butil::MultiFlatMap::init
    - butil::MultiFlatMap::erase
    - std::find
    - butil::MultiFlatMap::insert
    - Foo
    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:
    - bvar::Variable::count_exposed
    - ASSERT_EQ
    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:
    - bvar::Variable::count_exposed
    - bvar::Status::get_value
    - boost::any_cast<void*>
    - bvar::Status::expose
    - bvar::Status::set_value
    - ASSERT_TRUE
    - boost::any_cast<std::string>
    - LOG
    - bvar::Status::get_description
    - ASSERT_EQ
    - bvar::Status::name
    - bvar::Status::Status
    - std::vector::size
    - bvar::Variable::describe_exposed
    - boost::any_cast<int>
    - bvar::Status::hide
    - bvar::Variable::list_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:
    - bvar::Variable::count_exposed
    - boost::any_cast<int32_t>
    - ASSERT_TRUE
    - boost::any_cast<std::string>
    - bvar::BasicPassiveStatus::get_value
    - LOG
    - ASSERT_EQ
    - std::vector::size
    - boost::any_cast<int64_t>
    - std::ostringstream::str
    - bvar::Variable::describe_exposed
    - bvar::Variable::list_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:
    - bvar::Status::get_value
    - bvar::Status::set_value
    - boost::any_cast<Foo>
    - ASSERT_EQ
    - bvar::Status::Status
    - Foo
    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:
    - bvar::Variable::count_exposed
    - ASSERT_EQ
    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:
    - bvar::Variable::count_exposed
    - bvar::Status::get_value
    - boost::any_cast<void*>
    - bvar::Status::expose
    - bvar::Status::set_value
    - ASSERT_TRUE
    - boost::any_cast<std::string>
    - LOG
    - bvar::Status::get_description
    - ASSERT_EQ
    - bvar::Status::name
    - bvar::Status::Status
    - std::vector::size
    - bvar::Variable::describe_exposed
    - boost::any_cast<int>
    - bvar::Status::hide
    - bvar::Variable::list_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:
    - bvar::Variable::count_exposed
    - boost::any_cast<int32_t>
    - ASSERT_TRUE
    - boost::any_cast<std::string>
    - bvar::BasicPassiveStatus::get_value
    - LOG
    - ASSERT_EQ
    - std::vector::size
    - boost::any_cast<int64_t>
    - std::ostringstream::str
    - bvar::Variable::describe_exposed
    - bvar::Variable::list_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:
    - bvar::Status::get_value
    - bvar::Status::set_value
    - boost::any_cast<Foo>
    - ASSERT_EQ
    - bvar::Status::Status
    - Foo
    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:
    - DeviceIoControl
    - wcslen
    - memcpy
    - butil::value
    - std::wstring::c_str
    - std::wstring::size
    - static_cast<USHORT>
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    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:
    - butil::ReparsePoint::IsValid
    - Set
    - value
    - ::CreateFile
    - SetReparsePoint
    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:
    - ASSERT_FALSE
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    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:
    - setegid
    - ASSERT_TRUE
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - getuid
    - seteuid
    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
    - setegid
    - seteuid
    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:
    - insert
    - find
    - end
    - EXPECT_TRUE
    - Next
    - FilePath::value
    - value
    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:
    - value
    - find
    - 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
    - butil::value
    - std::wofstream::is_open
    - 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:
    - std::wifstream::open
    - std::wifstream::close
    - std::wstring
    - butil::value
    - std::wifstream::getline
    - EXPECT_TRUE
    - std::wifstream::is_open
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::GetFileSize
    - butil::ComputeDirectorySize
    - butil::CreateDirectory
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - DirName
    - butil::CreateDirectory
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FilePath::StringType::resize
    - butil::FilePath
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::NormalizeFilePath
    - ReparsePoint::IsValid
    - ASSERT_STREQ
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::FilePath
    - LOG
    - ::QueryDosDevice
    - ASSERT_EQ
    - std::wstring::c_str
    - FilePath::value
    - ASSERT_LT
    - isalpha
    - DevicePathToDriveLetterPath
    - butil::path
    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:
    - file_util::MakeFileUnreadable
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_TRUE
    - ASSERT_STRNE
    - butil::path
    - FPL
    - butil::CreateTemporaryFileInDir
    - EXPECT_EQ
    - FilePath::value
    - FilePath::IsParent
    - butil::PathExists
    - FilePath::DirName
    - FilePath::BaseName
    - GetLongPathName
    - ASSERT_NE
    - EXPECT_STREQ
    - butil::CreateDirectory
    - ASSERT_LT
    - GetShortPathName
    - DWORD
    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:
    - FPL
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - butil::ReadSymbolicLink
    - butil::CreateDirectory
    - EXPECT_FALSE
    - FilePath::value
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - FPL
    - FilePath::BaseName
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_NE
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::NormalizeFilePath
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - butil::path
    - ASSERT_TRUE
    - butil::IsLink
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - 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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::ReadFile
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - char::char
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::PathIsWritable
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::WriteFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - butil::CreateDirectory
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_TRUE
    - FindResultCollector::HasFile
    - std::string::data
    - butil::PathExists
    - FindResultCollector::size
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::internal::MoveUnsafe
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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::CreateTextFile
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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
    - SetFileAttributes
    - butil::SetPosixFilePermissions
    - GetFileAttributes
    - ASSERT_NE
    - butil::value
    - ASSERT_EQ
    - EXPECT_TRUE
    - win::GetVersion
    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:
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    - GetFileAttributes
    - butil::value
    - EXPECT_TRUE
    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:
    - ASSERT_FALSE
    - butil::SetReadOnly
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::IsReadOnly
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::internal::CopyFileUnsafe
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CopyFile
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - butil::SetReadOnly
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CopyFile
    - butil::IsReadOnly
    - butil::path
    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
    - FilePath::Append
    - butil::FilePath
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - butil::ContentsEqual
    - EXPECT_FALSE
    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:
    - butil::TextContentsEqual
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - butil::path
    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:
    - _T
    - ::_tdupenv_s
    - butil::GetTempDir
    - free
    - FilePath::IsAbsolute
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::value
    - ::_tputenv_s
    - arraysize
    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:
    - butil::CreateTemporaryFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::CreateAndOpenTemporaryFile
    - butil::CloseFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::File
    - butil::CloseFile
    - File::Pass
    - butil::FileToFILE
    - EXPECT_FALSE
    - EXPECT_TRUE
    - File::IsValid
    - butil::path
    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:
    - butil::CreateNewTempDirectory
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FilePath::StringType
    - butil::PathExists
    - butil::DeleteFile
    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
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    - butil::DeleteFile
    - butil::path
    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::DirectoryExists
    - EXPECT_TRUE
    - butil::GetShmemTempDir
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::IsAbsolute
    - butil::GetHomeDir
    - FilePath::empty
    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:
    - butil::path
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - FilePath::DirName
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::path
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - FileEnumerator::Next
    - EXPECT_EQ
    - std::wstring
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - FindResultCollector::HasFile
    - ReparsePoint::IsValid
    - win::GetVersion
    - FindResultCollector::size
    - butil::path
    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:
    - butil::WriteFile
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - std::string::c_str
    - butil::AppendToFile
    - FILE_PATH_LITERAL
    - static_cast<int>
    - butil::CreateDirectory
    - std::string::length
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - butil::ReadFile
    - FILE_PATH_LITERAL
    - std::string
    - static_cast<int>
    - std::string::begin
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::string::data
    - std::string::size
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - butil::ReadFileToString
    - ASSERT_EQ
    - EXPECT_TRUE
    - EXPECT_FALSE
    - std::string::length
    - std::string::clear
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - butil::TouchFile
    - auto::ToInternalValue
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_EQ
    - File::Info::last_modified::ToInternalValue
    - butil::FromUTCExploded
    - FILE_PATH_LITERAL
    - butil::GetFileInfo
    - butil::CreateDirectory
    - std::string::length
    - File::Info::last_accessed::ToInternalValue
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - butil::WriteFile
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - std::string::length
    - EXPECT_FALSE
    - butil::IsDirectoryEmpty
    - butil::PathExists
    - butil::path
    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:
    - insert
    - AppendASCII
    - ASSERT_TRUE
    - ChangePosixFilePermissions
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    - CreateDirectory
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - stat
    - geteuid
    - value
    - path
    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:
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - AppendASCII
    - 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:
    - AppendASCII
    - ASSERT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CreateSymbolicLink
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - begin
    - end
    - std::set_union
    - ASSERT_NO_FATAL_FAILURE
    - std::inserter
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - std::set::begin
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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_FALSE
    - butil::FilePath::value
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::GetFileSize
    - file_util::InsertImageIntoMediaStore
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - EXPECT_LT
    - FilePath::IsContentUri
    - char::char
    - OpenContentUriForRead
    - File::IsValid
    - butil::PathExists
    - File::ReadAtCurrentPos
    - 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:
    - butil::GetFileSize
    - EXPECT_TRUE
    - File::IsValid
    - FilePath::IsContentUri
    - OpenContentUriForRead
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - pipe
    - EXPECT_EQ
    - fcntl
    - ASSERT_EQ
    - close
    - read
    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:
    - butil::CloseWithScopedFD
    - pipe
    - EXPECT_EQ
    - IGNORE_EINTR
    - ASSERT_EQ
    - close
    - EXPECT_DEATH
    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:
    - DeviceIoControl
    - wcslen
    - memcpy
    - butil::value
    - std::wstring::c_str
    - std::wstring::size
    - static_cast<USHORT>
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    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:
    - butil::ReparsePoint::IsValid
    - Set
    - value
    - ::CreateFile
    - SetReparsePoint
    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:
    - ASSERT_FALSE
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    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:
    - setegid
    - ASSERT_TRUE
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - getuid
    - seteuid
    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
    - setegid
    - seteuid
    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:
    - insert
    - find
    - end
    - EXPECT_TRUE
    - Next
    - FilePath::value
    - value
    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:
    - value
    - find
    - 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
    - butil::value
    - std::wofstream::is_open
    - 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:
    - std::wifstream::open
    - std::wifstream::close
    - std::wstring
    - butil::value
    - std::wifstream::getline
    - EXPECT_TRUE
    - std::wifstream::is_open
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::GetFileSize
    - butil::ComputeDirectorySize
    - butil::CreateDirectory
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - DirName
    - butil::CreateDirectory
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FilePath::StringType::resize
    - butil::FilePath
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::NormalizeFilePath
    - ReparsePoint::IsValid
    - ASSERT_STREQ
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::FilePath
    - LOG
    - ::QueryDosDevice
    - ASSERT_EQ
    - std::wstring::c_str
    - FilePath::value
    - ASSERT_LT
    - isalpha
    - DevicePathToDriveLetterPath
    - butil::path
    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:
    - file_util::MakeFileUnreadable
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_TRUE
    - ASSERT_STRNE
    - butil::path
    - FPL
    - butil::CreateTemporaryFileInDir
    - EXPECT_EQ
    - FilePath::value
    - FilePath::IsParent
    - butil::PathExists
    - FilePath::DirName
    - FilePath::BaseName
    - GetLongPathName
    - ASSERT_NE
    - EXPECT_STREQ
    - butil::CreateDirectory
    - ASSERT_LT
    - GetShortPathName
    - DWORD
    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:
    - FPL
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - butil::ReadSymbolicLink
    - butil::CreateDirectory
    - EXPECT_FALSE
    - FilePath::value
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - FPL
    - FilePath::BaseName
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_NE
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::NormalizeFilePath
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - butil::path
    - ASSERT_TRUE
    - butil::IsLink
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - 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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::ReadFile
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - char::char
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::PathIsWritable
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::WriteFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - butil::CreateDirectory
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_TRUE
    - FindResultCollector::HasFile
    - std::string::data
    - butil::PathExists
    - FindResultCollector::size
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::internal::MoveUnsafe
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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::CreateTextFile
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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
    - SetFileAttributes
    - butil::SetPosixFilePermissions
    - GetFileAttributes
    - ASSERT_NE
    - butil::value
    - ASSERT_EQ
    - EXPECT_TRUE
    - win::GetVersion
    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:
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    - GetFileAttributes
    - butil::value
    - EXPECT_TRUE
    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:
    - ASSERT_FALSE
    - butil::SetReadOnly
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::IsReadOnly
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::internal::CopyFileUnsafe
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CopyFile
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - butil::SetReadOnly
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CopyFile
    - butil::IsReadOnly
    - butil::path
    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
    - FilePath::Append
    - butil::FilePath
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - butil::ContentsEqual
    - EXPECT_FALSE
    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:
    - butil::TextContentsEqual
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - butil::path
    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:
    - _T
    - ::_tdupenv_s
    - butil::GetTempDir
    - free
    - FilePath::IsAbsolute
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::value
    - ::_tputenv_s
    - arraysize
    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:
    - butil::CreateTemporaryFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::CreateAndOpenTemporaryFile
    - butil::CloseFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::File
    - butil::CloseFile
    - File::Pass
    - butil::FileToFILE
    - EXPECT_FALSE
    - EXPECT_TRUE
    - File::IsValid
    - butil::path
    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:
    - butil::CreateNewTempDirectory
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FilePath::StringType
    - butil::PathExists
    - butil::DeleteFile
    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
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    - butil::DeleteFile
    - butil::path
    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::DirectoryExists
    - EXPECT_TRUE
    - butil::GetShmemTempDir
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::IsAbsolute
    - butil::GetHomeDir
    - FilePath::empty
    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:
    - butil::path
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - FilePath::DirName
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::path
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - FileEnumerator::Next
    - EXPECT_EQ
    - std::wstring
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - FindResultCollector::HasFile
    - ReparsePoint::IsValid
    - win::GetVersion
    - FindResultCollector::size
    - butil::path
    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:
    - butil::WriteFile
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - std::string::c_str
    - butil::AppendToFile
    - FILE_PATH_LITERAL
    - static_cast<int>
    - butil::CreateDirectory
    - std::string::length
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - butil::ReadFile
    - FILE_PATH_LITERAL
    - std::string
    - static_cast<int>
    - std::string::begin
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::string::data
    - std::string::size
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - butil::ReadFileToString
    - ASSERT_EQ
    - EXPECT_TRUE
    - EXPECT_FALSE
    - std::string::length
    - std::string::clear
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - butil::TouchFile
    - auto::ToInternalValue
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_EQ
    - File::Info::last_modified::ToInternalValue
    - butil::FromUTCExploded
    - FILE_PATH_LITERAL
    - butil::GetFileInfo
    - butil::CreateDirectory
    - std::string::length
    - File::Info::last_accessed::ToInternalValue
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - butil::WriteFile
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - std::string::length
    - EXPECT_FALSE
    - butil::IsDirectoryEmpty
    - butil::PathExists
    - butil::path
    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:
    - insert
    - AppendASCII
    - ASSERT_TRUE
    - ChangePosixFilePermissions
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    - CreateDirectory
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - stat
    - geteuid
    - value
    - path
    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:
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - AppendASCII
    - 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:
    - AppendASCII
    - ASSERT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CreateSymbolicLink
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - begin
    - end
    - std::set_union
    - ASSERT_NO_FATAL_FAILURE
    - std::inserter
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - std::set::begin
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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_FALSE
    - butil::FilePath::value
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::GetFileSize
    - file_util::InsertImageIntoMediaStore
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - EXPECT_LT
    - FilePath::IsContentUri
    - char::char
    - OpenContentUriForRead
    - File::IsValid
    - butil::PathExists
    - File::ReadAtCurrentPos
    - 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:
    - butil::GetFileSize
    - EXPECT_TRUE
    - File::IsValid
    - FilePath::IsContentUri
    - OpenContentUriForRead
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - pipe
    - EXPECT_EQ
    - fcntl
    - ASSERT_EQ
    - close
    - read
    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:
    - butil::CloseWithScopedFD
    - pipe
    - EXPECT_EQ
    - IGNORE_EINTR
    - ASSERT_EQ
    - close
    - EXPECT_DEATH
    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:
    - DeviceIoControl
    - wcslen
    - memcpy
    - butil::value
    - std::wstring::c_str
    - std::wstring::size
    - static_cast<USHORT>
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    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:
    - butil::ReparsePoint::IsValid
    - Set
    - value
    - ::CreateFile
    - SetReparsePoint
    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:
    - ASSERT_FALSE
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    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:
    - setegid
    - ASSERT_TRUE
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - getuid
    - seteuid
    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
    - setegid
    - seteuid
    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:
    - insert
    - find
    - end
    - EXPECT_TRUE
    - Next
    - FilePath::value
    - value
    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:
    - value
    - find
    - 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
    - butil::value
    - std::wofstream::is_open
    - 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:
    - std::wifstream::open
    - std::wifstream::close
    - std::wstring
    - butil::value
    - std::wifstream::getline
    - EXPECT_TRUE
    - std::wifstream::is_open
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::GetFileSize
    - butil::ComputeDirectorySize
    - butil::CreateDirectory
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - DirName
    - butil::CreateDirectory
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FilePath::StringType::resize
    - butil::FilePath
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::NormalizeFilePath
    - ReparsePoint::IsValid
    - ASSERT_STREQ
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::FilePath
    - LOG
    - ::QueryDosDevice
    - ASSERT_EQ
    - std::wstring::c_str
    - FilePath::value
    - ASSERT_LT
    - isalpha
    - DevicePathToDriveLetterPath
    - butil::path
    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:
    - file_util::MakeFileUnreadable
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_TRUE
    - ASSERT_STRNE
    - butil::path
    - FPL
    - butil::CreateTemporaryFileInDir
    - EXPECT_EQ
    - FilePath::value
    - FilePath::IsParent
    - butil::PathExists
    - FilePath::DirName
    - FilePath::BaseName
    - GetLongPathName
    - ASSERT_NE
    - EXPECT_STREQ
    - butil::CreateDirectory
    - ASSERT_LT
    - GetShortPathName
    - DWORD
    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:
    - FPL
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - butil::ReadSymbolicLink
    - butil::CreateDirectory
    - EXPECT_FALSE
    - FilePath::value
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - FPL
    - FilePath::BaseName
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_NE
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::NormalizeFilePath
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - butil::path
    - ASSERT_TRUE
    - butil::IsLink
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - 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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::ReadFile
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - char::char
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::PathIsWritable
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::WriteFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - butil::CreateDirectory
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_TRUE
    - FindResultCollector::HasFile
    - std::string::data
    - butil::PathExists
    - FindResultCollector::size
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::internal::MoveUnsafe
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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::CreateTextFile
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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
    - SetFileAttributes
    - butil::SetPosixFilePermissions
    - GetFileAttributes
    - ASSERT_NE
    - butil::value
    - ASSERT_EQ
    - EXPECT_TRUE
    - win::GetVersion
    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:
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    - GetFileAttributes
    - butil::value
    - EXPECT_TRUE
    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:
    - ASSERT_FALSE
    - butil::SetReadOnly
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::IsReadOnly
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::internal::CopyFileUnsafe
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CopyFile
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - butil::SetReadOnly
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CopyFile
    - butil::IsReadOnly
    - butil::path
    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
    - FilePath::Append
    - butil::FilePath
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - butil::ContentsEqual
    - EXPECT_FALSE
    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:
    - butil::TextContentsEqual
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - butil::path
    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:
    - _T
    - ::_tdupenv_s
    - butil::GetTempDir
    - free
    - FilePath::IsAbsolute
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::value
    - ::_tputenv_s
    - arraysize
    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:
    - butil::CreateTemporaryFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::CreateAndOpenTemporaryFile
    - butil::CloseFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::File
    - butil::CloseFile
    - File::Pass
    - butil::FileToFILE
    - EXPECT_FALSE
    - EXPECT_TRUE
    - File::IsValid
    - butil::path
    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:
    - butil::CreateNewTempDirectory
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FilePath::StringType
    - butil::PathExists
    - butil::DeleteFile
    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
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    - butil::DeleteFile
    - butil::path
    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::DirectoryExists
    - EXPECT_TRUE
    - butil::GetShmemTempDir
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::IsAbsolute
    - butil::GetHomeDir
    - FilePath::empty
    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:
    - butil::path
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - FilePath::DirName
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::path
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - FileEnumerator::Next
    - EXPECT_EQ
    - std::wstring
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - FindResultCollector::HasFile
    - ReparsePoint::IsValid
    - win::GetVersion
    - FindResultCollector::size
    - butil::path
    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:
    - butil::WriteFile
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - std::string::c_str
    - butil::AppendToFile
    - FILE_PATH_LITERAL
    - static_cast<int>
    - butil::CreateDirectory
    - std::string::length
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - butil::ReadFile
    - FILE_PATH_LITERAL
    - std::string
    - static_cast<int>
    - std::string::begin
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::string::data
    - std::string::size
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - butil::ReadFileToString
    - ASSERT_EQ
    - EXPECT_TRUE
    - EXPECT_FALSE
    - std::string::length
    - std::string::clear
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - butil::TouchFile
    - auto::ToInternalValue
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_EQ
    - File::Info::last_modified::ToInternalValue
    - butil::FromUTCExploded
    - FILE_PATH_LITERAL
    - butil::GetFileInfo
    - butil::CreateDirectory
    - std::string::length
    - File::Info::last_accessed::ToInternalValue
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - butil::WriteFile
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - std::string::length
    - EXPECT_FALSE
    - butil::IsDirectoryEmpty
    - butil::PathExists
    - butil::path
    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:
    - insert
    - AppendASCII
    - ASSERT_TRUE
    - ChangePosixFilePermissions
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    - CreateDirectory
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - stat
    - geteuid
    - value
    - path
    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:
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - AppendASCII
    - 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:
    - AppendASCII
    - ASSERT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CreateSymbolicLink
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - begin
    - end
    - std::set_union
    - ASSERT_NO_FATAL_FAILURE
    - std::inserter
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - std::set::begin
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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_FALSE
    - butil::FilePath::value
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::GetFileSize
    - file_util::InsertImageIntoMediaStore
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - EXPECT_LT
    - FilePath::IsContentUri
    - char::char
    - OpenContentUriForRead
    - File::IsValid
    - butil::PathExists
    - File::ReadAtCurrentPos
    - 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:
    - butil::GetFileSize
    - EXPECT_TRUE
    - File::IsValid
    - FilePath::IsContentUri
    - OpenContentUriForRead
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - pipe
    - EXPECT_EQ
    - fcntl
    - ASSERT_EQ
    - close
    - read
    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:
    - butil::CloseWithScopedFD
    - pipe
    - EXPECT_EQ
    - IGNORE_EINTR
    - ASSERT_EQ
    - close
    - EXPECT_DEATH
    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:
    - DeviceIoControl
    - wcslen
    - memcpy
    - butil::value
    - std::wstring::c_str
    - std::wstring::size
    - static_cast<USHORT>
    - reinterpret_cast<REPARSE_DATA_BUFFER*>
    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:
    - butil::ReparsePoint::IsValid
    - Set
    - value
    - ::CreateFile
    - SetReparsePoint
    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:
    - ASSERT_FALSE
    - butil::SetPosixFilePermissions
    - ASSERT_TRUE
    - butil::GetPosixFilePermissions
    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:
    - setegid
    - ASSERT_TRUE
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - CreateUniqueTempDir
    - getuid
    - seteuid
    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
    - setegid
    - seteuid
    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:
    - insert
    - find
    - end
    - EXPECT_TRUE
    - Next
    - FilePath::value
    - value
    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:
    - value
    - find
    - 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
    - butil::value
    - std::wofstream::is_open
    - 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:
    - std::wifstream::open
    - std::wifstream::close
    - std::wstring
    - butil::value
    - std::wifstream::getline
    - EXPECT_TRUE
    - std::wifstream::is_open
    - arraysize
    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:
    - FPL
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::GetFileSize
    - butil::ComputeDirectorySize
    - butil::CreateDirectory
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - DirName
    - butil::CreateDirectory
    - butil::NormalizeFilePath
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FilePath::StringType::resize
    - butil::FilePath
    - butil::CreateDirectory
    - ASSERT_EQ
    - FilePath::value
    - butil::NormalizeFilePath
    - ReparsePoint::IsValid
    - ASSERT_STREQ
    - FilePath::DirName
    - butil::path
    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:
    - FPL
    - ASSERT_FALSE
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::FilePath
    - LOG
    - ::QueryDosDevice
    - ASSERT_EQ
    - std::wstring::c_str
    - FilePath::value
    - ASSERT_LT
    - isalpha
    - DevicePathToDriveLetterPath
    - butil::path
    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:
    - file_util::MakeFileUnreadable
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_TRUE
    - ASSERT_STRNE
    - butil::path
    - FPL
    - butil::CreateTemporaryFileInDir
    - EXPECT_EQ
    - FilePath::value
    - FilePath::IsParent
    - butil::PathExists
    - FilePath::DirName
    - FilePath::BaseName
    - GetLongPathName
    - ASSERT_NE
    - EXPECT_STREQ
    - butil::CreateDirectory
    - ASSERT_LT
    - GetShortPathName
    - DWORD
    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:
    - FPL
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - butil::ReadSymbolicLink
    - butil::CreateDirectory
    - EXPECT_FALSE
    - FilePath::value
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - FPL
    - FilePath::BaseName
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_NE
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::NormalizeFilePath
    - butil::CreateSymbolicLink
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - ASSERT_FALSE
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - butil::path
    - ASSERT_TRUE
    - butil::IsLink
    - EXPECT_TRUE
    - butil::CreateSymbolicLink
    - butil::PathExists
    - butil::DeleteFile
    - 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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::ReadFile
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - char::char
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::path
    - butil::WriteFile
    - EXPECT_EQ
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - std::string::length
    - EXPECT_TRUE
    - std::string::data
    - butil::PathExists
    - butil::PathIsWritable
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::WriteFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::GetPosixFilePermissions
    - butil::SetPosixFilePermissions
    - static_cast<int>
    - butil::CreateDirectory
    - EXPECT_FALSE
    - std::string::length
    - EXPECT_TRUE
    - FindResultCollector::HasFile
    - std::string::data
    - butil::PathExists
    - FindResultCollector::size
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - FPL
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_FALSE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::Move
    - butil::path
    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::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::internal::MoveUnsafe
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::PathExists
    - butil::Move
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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_FALSE
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - butil::ReadTextFile
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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::CreateTextFile
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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:
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::path
    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
    - SetFileAttributes
    - butil::SetPosixFilePermissions
    - GetFileAttributes
    - ASSERT_NE
    - butil::value
    - ASSERT_EQ
    - EXPECT_TRUE
    - win::GetVersion
    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:
    - butil::GetPosixFilePermissions
    - EXPECT_NE
    - GetFileAttributes
    - butil::value
    - EXPECT_TRUE
    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:
    - ASSERT_FALSE
    - butil::SetReadOnly
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::CopyDirectory
    - butil::PathExists
    - butil::IsReadOnly
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::internal::CopyFileUnsafe
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CopyFile
    - butil::PathExists
    - FilePath::DirName
    - butil::path
    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:
    - ASSERT_FALSE
    - butil::ReadTextFile
    - butil::SetReadOnly
    - EXPECT_EQ
    - ASSERT_TRUE
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CopyFile
    - butil::IsReadOnly
    - butil::path
    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
    - FilePath::Append
    - butil::FilePath
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - butil::ContentsEqual
    - EXPECT_FALSE
    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:
    - butil::TextContentsEqual
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::PathExists
    - TestRpcPBMessageFactory::Get
    - EXPECT_FALSE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - internal::CopyAndDeleteDirectory
    - butil::PathExists
    - butil::path
    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:
    - _T
    - ::_tdupenv_s
    - butil::GetTempDir
    - free
    - FilePath::IsAbsolute
    - ASSERT_EQ
    - EXPECT_TRUE
    - FilePath::value
    - ::_tputenv_s
    - arraysize
    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:
    - butil::CreateTemporaryFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::CreateAndOpenTemporaryFile
    - butil::CloseFile
    - ASSERT_TRUE
    - EXPECT_TRUE
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - butil::File
    - butil::CloseFile
    - File::Pass
    - butil::FileToFILE
    - EXPECT_FALSE
    - EXPECT_TRUE
    - File::IsValid
    - butil::path
    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:
    - butil::CreateNewTempDirectory
    - ASSERT_TRUE
    - EXPECT_TRUE
    - FilePath::StringType
    - butil::PathExists
    - butil::DeleteFile
    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
    - FILE_PATH_LITERAL
    - EXPECT_TRUE
    - butil::PathExists
    - butil::CreateTemporaryDirInDir
    - butil::DeleteFile
    - butil::path
    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::DirectoryExists
    - EXPECT_TRUE
    - butil::GetShmemTempDir
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - FilePath::IsAbsolute
    - butil::GetHomeDir
    - FilePath::empty
    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:
    - butil::path
    - ASSERT_TRUE
    - FilePath::Append
    - butil::CreateTextFile
    - butil::FilePath
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - FilePath::DirName
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - butil::path
    - FilePath::Append
    - butil::CreateTextFile
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - butil::DirectoryExists
    - butil::PathExists
    - butil::DeleteFile
    - EXPECT_FALSE
    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:
    - FPL
    - FileEnumerator::Next
    - EXPECT_EQ
    - std::wstring
    - FilePath::Append
    - butil::CreateTextFile
    - butil::CreateDirectory
    - EXPECT_TRUE
    - EXPECT_FALSE
    - FindResultCollector::HasFile
    - ReparsePoint::IsValid
    - win::GetVersion
    - FindResultCollector::size
    - butil::path
    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:
    - butil::WriteFile
    - butil::ReadTextFile
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - std::string::c_str
    - butil::AppendToFile
    - FILE_PATH_LITERAL
    - static_cast<int>
    - butil::CreateDirectory
    - std::string::length
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - butil::ReadFile
    - FILE_PATH_LITERAL
    - std::string
    - static_cast<int>
    - std::string::begin
    - std::vector::end
    - ASSERT_EQ
    - std::vector::begin
    - std::vector::size
    - std::string::data
    - std::string::size
    - butil::path
    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:
    - butil::WriteFile
    - EXPECT_EQ
    - FILE_PATH_LITERAL
    - butil::ReadFileToString
    - ASSERT_EQ
    - EXPECT_TRUE
    - EXPECT_FALSE
    - std::string::length
    - std::string::clear
    - butil::DeleteFile
    - butil::path
    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:
    - butil::WriteFile
    - butil::TouchFile
    - auto::ToInternalValue
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - EXPECT_EQ
    - File::Info::last_modified::ToInternalValue
    - butil::FromUTCExploded
    - FILE_PATH_LITERAL
    - butil::GetFileInfo
    - butil::CreateDirectory
    - std::string::length
    - File::Info::last_accessed::ToInternalValue
    - butil::PathExists
    - butil::DeleteFile
    - butil::path
    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_FALSE
    - butil::WriteFile
    - std::string::c_str
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::CreateDirectory
    - EXPECT_TRUE
    - std::string::length
    - EXPECT_FALSE
    - butil::IsDirectoryEmpty
    - butil::PathExists
    - butil::path
    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:
    - insert
    - AppendASCII
    - ASSERT_TRUE
    - ChangePosixFilePermissions
    - ASSERT_NO_FATAL_FAILURE
    - CreateTextFile
    - CreateDirectory
    - ASSERT_EQ
    - StreamingRpcTest::SetUp
    - stat
    - geteuid
    - value
    - path
    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:
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - AppendASCII
    - 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:
    - AppendASCII
    - ASSERT_TRUE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - butil::CreateSymbolicLink
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - begin
    - end
    - std::set_union
    - ASSERT_NO_FATAL_FAILURE
    - std::inserter
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - std::set::begin
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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:
    - ASSERT_NO_FATAL_FAILURE
    - butil::VerifyPathControlledByUser
    - EXPECT_TRUE
    - butil::ChangePosixFilePermissions
    - EXPECT_FALSE
    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_FALSE
    - butil::FilePath::value
    - ASSERT_TRUE
    - butil::CreateDirectory
    - butil::path
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - FilePath::Append
    - FILE_PATH_LITERAL
    - butil::GetFileSize
    - file_util::InsertImageIntoMediaStore
    - EXPECT_TRUE
    - FilePath::AppendASCII
    - EXPECT_LT
    - FilePath::IsContentUri
    - char::char
    - OpenContentUriForRead
    - File::IsValid
    - butil::PathExists
    - File::ReadAtCurrentPos
    - 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:
    - butil::GetFileSize
    - EXPECT_TRUE
    - File::IsValid
    - FilePath::IsContentUri
    - OpenContentUriForRead
    - butil::PathExists
    - EXPECT_FALSE
    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:
    - pipe
    - EXPECT_EQ
    - fcntl
    - ASSERT_EQ
    - close
    - read
    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:
    - butil::CloseWithScopedFD
    - pipe
    - EXPECT_EQ
    - IGNORE_EINTR
    - ASSERT_EQ
    - close
    - EXPECT_DEATH
    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::lock
    - push_back
    - bthread_self_tag
    - static_cast<bthread::Mutex*>
    - auto::unlock
    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_join
    - ASSERT_EQ
    - bthread::Mutex::lock
    - bthread::Mutex::unlock
    - bthread_start_urgent
    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:
    - static_cast<ButexWakeAllArgs*>
    - auto::wait
    - auto::signal
    - bthread_self_tag
    - 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:
    - static_cast<ButexWakeAllArgs*>
    - auto::wait
    - auto::signal
    - bthread_self_tag
    - 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:
    - bthread_join
    - bthread::CountdownEvent::wait
    - bthread_start_background
    - ASSERT_EQ
    - 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::wait
    - auto::signal
    - bthread_self_tag
    - static_cast<ButexRequeueArgs*>
    - push_back
    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::wait
    - auto::signal
    - bthread_self_tag
    - static_cast<ButexRequeueArgs*>
    - push_back
    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:
    - bthread_join
    - bthread::CountdownEvent::wait
    - ASSERT_EQ
    - bthread::ConditionVariable::notify_all
    - bthread_start_background
    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::lock
    - push_back
    - bthread_self_tag
    - static_cast<bthread::Mutex*>
    - auto::unlock
    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_join
    - ASSERT_EQ
    - bthread::Mutex::lock
    - bthread::Mutex::unlock
    - bthread_start_urgent
    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:
    - static_cast<ButexWakeAllArgs*>
    - auto::wait
    - auto::signal
    - bthread_self_tag
    - 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:
    - static_cast<ButexWakeAllArgs*>
    - auto::wait
    - auto::signal
    - bthread_self_tag
    - 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:
    - bthread_join
    - bthread::CountdownEvent::wait
    - bthread_start_background
    - ASSERT_EQ
    - 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::wait
    - auto::signal
    - bthread_self_tag
    - static_cast<ButexRequeueArgs*>
    - push_back
    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::wait
    - auto::signal
    - bthread_self_tag
    - static_cast<ButexRequeueArgs*>
    - push_back
    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:
    - bthread_join
    - bthread::CountdownEvent::wait
    - ASSERT_EQ
    - bthread::ConditionVariable::notify_all
    - bthread_start_background
    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:
    - WaitableEvent::Wait
    - WaitableEvent::TimedWait
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - WaitableEvent::Signal
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::Reset
    - EXPECT_FALSE
    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:
    - WaitableEvent::Wait
    - WaitableEvent::TimedWait
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - WaitableEvent::Signal
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::Reset
    - EXPECT_FALSE
    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:
    - butil::WaitableEvent::WaitMany
    - Signal
    - WaitableEvent::WaitableEvent
    - EXPECT_EQ
    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::TimeDelta::FromSeconds
    - Signal
    - butil::PlatformThread::Sleep
    - 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:
    - butil::PlatformThread::Join
    - EXPECT_EQ
    - butil::WaitableEvent::WaitMany
    - WaitableEvent::WaitableEvent
    - butil::PlatformThread::Create
    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:
    - WaitableEvent::Wait
    - WaitableEvent::TimedWait
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - WaitableEvent::Signal
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::Reset
    - EXPECT_FALSE
    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:
    - WaitableEvent::Wait
    - WaitableEvent::TimedWait
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - WaitableEvent::Signal
    - butil::TimeDelta::FromMilliseconds
    - WaitableEvent::Reset
    - EXPECT_FALSE
    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:
    - butil::WaitableEvent::WaitMany
    - Signal
    - WaitableEvent::WaitableEvent
    - EXPECT_EQ
    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::TimeDelta::FromSeconds
    - Signal
    - butil::PlatformThread::Sleep
    - 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:
    - butil::PlatformThread::Join
    - EXPECT_EQ
    - butil::WaitableEvent::WaitMany
    - WaitableEvent::WaitableEvent
    - butil::PlatformThread::Create
    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: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - end
    - LinkNode*::previous
    - LinkNode*::next
    - LinkNode*::value
    - ASSERT_LT
    - head
    - tail
    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: 2
    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: 3
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    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: 3
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - Node::RemoveFromList
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertBefore
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertAfter
    - LinkedList::head
    - LinkedList::Append
    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: 0
    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:
    - EXPECT_FALSE
    - LinkedList::empty
    - LinkedList::Append
    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
    - EXPECT_TRUE
    - Node::RemoveFromList
    - LinkedList::Append
    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
    - EXPECT_EQ
    - Node::RemoveFromList
    - LinkedList::Append
    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:
    - EXPECT_EQ
    - Node::previous
    - Node::next
    - LinkedList::Append
    - Node::RemoveFromList
    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: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 1
    functionsReached:
    - EXPECT_EQ
    - end
    - LinkNode*::previous
    - LinkNode*::next
    - LinkNode*::value
    - ASSERT_LT
    - head
    - tail
    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: 2
    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: 3
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    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: 3
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - Node::RemoveFromList
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertBefore
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertAfter
    - LinkedList::head
    - LinkedList::Append
    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: 0
    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:
    - EXPECT_FALSE
    - LinkedList::empty
    - LinkedList::Append
    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
    - EXPECT_TRUE
    - Node::RemoveFromList
    - LinkedList::Append
    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
    - EXPECT_EQ
    - Node::RemoveFromList
    - LinkedList::Append
    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:
    - EXPECT_EQ
    - Node::previous
    - Node::next
    - LinkedList::Append
    - Node::RemoveFromList
    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: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 2
    functionsReached:
    - EXPECT_EQ
    - end
    - LinkNode*::previous
    - LinkNode*::next
    - LinkNode*::value
    - ASSERT_LT
    - head
    - tail
    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: 2
    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: 3
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    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: 3
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - Node::RemoveFromList
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertBefore
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertAfter
    - LinkedList::head
    - LinkedList::Append
    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: 0
    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:
    - EXPECT_FALSE
    - LinkedList::empty
    - LinkedList::Append
    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
    - EXPECT_TRUE
    - Node::RemoveFromList
    - LinkedList::Append
    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
    - EXPECT_EQ
    - Node::RemoveFromList
    - LinkedList::Append
    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:
    - EXPECT_EQ
    - Node::previous
    - Node::next
    - LinkedList::Append
    - Node::RemoveFromList
    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: 1
    functionLinenumber: 37
    functionLinenumberEnd: 49
    functionName: butil::ExpectListContentsForDirection
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 3
    functionsReached:
    - EXPECT_EQ
    - end
    - LinkNode*::previous
    - LinkNode*::next
    - LinkNode*::value
    - ASSERT_LT
    - head
    - tail
    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: 2
    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: 3
    functionLinenumber: 64
    functionLinenumberEnd: 69
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - LinkedList::head
    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: 3
    functionLinenumber: 71
    functionLinenumberEnd: 104
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - LinkedList::tail
    - butil::ExpectListContents
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 106
    functionLinenumberEnd: 179
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - LinkedList::end
    - Node::RemoveFromList
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 181
    functionLinenumberEnd: 216
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertBefore
    - LinkedList::head
    - LinkedList::Append
    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: 3
    functionLinenumber: 218
    functionLinenumberEnd: 253
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/linked_list_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - arraysize
    - butil::ExpectListContents
    - LinkedList::tail
    - Node::InsertAfter
    - LinkedList::head
    - LinkedList::Append
    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: 0
    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:
    - EXPECT_FALSE
    - LinkedList::empty
    - LinkedList::Append
    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
    - EXPECT_TRUE
    - Node::RemoveFromList
    - LinkedList::Append
    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
    - EXPECT_EQ
    - Node::RemoveFromList
    - LinkedList::Append
    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:
    - EXPECT_EQ
    - Node::previous
    - Node::next
    - LinkedList::Append
    - Node::RemoveFromList
    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:
    - butil::UTF8ToWide
    - std::wostringstream::str
    - EXPECT_EQ
    - arraysize
    - std::ostringstream::str
    - butil::WideToUTF8
    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:
    - butil::UTF8ToWide
    - EXPECT_EQ
    - 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:
    - butil::UTF8ToWide
    - EXPECT_EQ
    - strlen
    - static_cast<wchar_t>
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::wstring::length
    - ARRAYSIZE_UNSAFE
    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
    - butil::WideToUTF8
    - wcslen
    - arraysize
    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:
    - ARRAYSIZE_UNSAFE
    - butil::WideToUTF8
    - wcslen
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - memcpy
    - WriteInto
    - std::wstring::length
    - std::string::length
    - butil::length
    - butil::WideToUTF8
    - arraysize
    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:
    - butil::UTF8ToWide
    - std::wostringstream::str
    - EXPECT_EQ
    - arraysize
    - std::ostringstream::str
    - butil::WideToUTF8
    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:
    - butil::UTF8ToWide
    - EXPECT_EQ
    - 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:
    - butil::UTF8ToWide
    - EXPECT_EQ
    - strlen
    - static_cast<wchar_t>
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::wstring::length
    - ARRAYSIZE_UNSAFE
    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
    - butil::WideToUTF8
    - wcslen
    - arraysize
    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:
    - ARRAYSIZE_UNSAFE
    - butil::WideToUTF8
    - wcslen
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - memcpy
    - WriteInto
    - std::wstring::length
    - std::string::length
    - butil::length
    - butil::WideToUTF8
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TEST(UTFStringConversionsTest, ConvertMultiString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:40,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_redis_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_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - RUN_ALL_TESTS
    - testing::InitGoogleTest
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:51,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:54,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:56,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_redis_unittest.cpp:58,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:58,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 62
    functionName: RemoveRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveRedisServer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:69,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:70,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:71,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:77,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:78,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:82,1
    - Dst: fork
      Src: /src/brpc/test/brpc_redis_unittest.cpp:84,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:86,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:87,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:89,1
    - Dst: unlink
      Src: /src/brpc/test/brpc_redis_unittest.cpp:93,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_redis_unittest.cpp:94,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:95,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:96,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:100,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 101
    functionName: RunRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - execvp
    - system
    - unlink
    - usleep
    - puts
    - exit
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void RunRedisServer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 108
    functionName: ScopedRedisMaxReplyDepth::ScopedRedisMaxReplyDepth
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedRedisMaxReplyDepth(int32_t depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: ~ScopedRedisMaxReplyDepth()
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedRedisMaxReplyDepth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: 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:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 122
    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: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    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:131,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:131,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:131,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:134,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:134,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:134,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:135,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:141,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:141,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:141,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:148,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:148,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 2
    argNames:
    - ' reply1'
    - ' reply2'
    argTypes:
    - brpc::RedisReply
    - brpc::RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 156
    functionName: AssertReplyEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - AssertReplyEqual
    - error_message
    - integer
    - ASSERT_NE
    - ASSERT_EQ
    - ASSERT_STREQ
    - data
    - CHECK_EQ
    - type
    - c_str
    - 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:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:167,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - brpc::RedisResponse
    - brpc::RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 158
    functionDepth: 2
    functionLinenumber: 158
    functionLinenumberEnd: 172
    functionName: AssertResponseEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - AssertReplyEqual
    - reply_size
    - ASSERT_NE
    - ASSERT_EQ
    - reply
    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:176,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:179,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:182,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:182,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:184,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:185,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:187,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:187,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:188,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:190,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:194,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:195,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:196,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:197,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:198,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:200,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:201,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:202,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:202,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:204,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:205,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:206,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:207,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:207,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:208,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:209,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:210,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:212,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:212,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:214,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:215,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:216,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:217,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:218,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:220,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:222,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:222,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:224,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:225,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:227,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:227,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:228,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:229,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:231,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:234,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:235,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:237,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:237,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:238,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:239,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:240,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:241,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:241,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:243,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:244,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:246,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:246,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:247,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:249,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:250,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 251
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::Clear
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - brpc::RedisRequest::Clear
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:255,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:258,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:261,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:261,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:263,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:264,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:266,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:267,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:277,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:278,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:278,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:279,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:280,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:281,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:282,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:283,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:284,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:285,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:286,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:287,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:288,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:289,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:290,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:291,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:292,1
    - Dst: brpc::RedisResponse::reply
      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::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:293,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:296,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:297,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 253
    functionDepth: 3
    functionLinenumber: 253
    functionLinenumberEnd: 299
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::Clear
    - brpc::RedisResponse::MergeFrom
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - AssertResponseEqual
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - brpc::RedisRequest::Clear
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    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:303,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:306,1
    - Dst: brpc::Channel::Channel
      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::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:309,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:310,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:311,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:312,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:314,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:315,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:316,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:317,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:318,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:319,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:319,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:320,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:321,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:322,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:323,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:324,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:325,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:326,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:327,1
    - Dst: brpc::RedisResponse::reply
      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::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:328,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:331,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:332,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:333,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 301
    functionDepth: 3
    functionLinenumber: 301
    functionLinenumberEnd: 334
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - AssertResponseEqual
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::RedisResponse::MergeFrom
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    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:338,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:341,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:345,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:346,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:347,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:354,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:354,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:355,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:355,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:356,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:356,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:357,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:357,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:359,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:360,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:360,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:361,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:362,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:363,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:364,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:366,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:367,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:368,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:369,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:369,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:372,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:373,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 336
    functionDepth: 3
    functionLinenumber: 336
    functionLinenumberEnd: 375
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::AddCommandByComponents
    - ASSERT_FALSE
    - AssertResponseEqual
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::RedisResponse::MergeFrom
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - arraysize
    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:379,1
    - Dst: std::string::capacity
      Src: /src/brpc/test/brpc_redis_unittest.cpp:380,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:381,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/brpc_redis_unittest.cpp:381,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 384
    functionName: GeneratePassword
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::capacity
    - std::string::reserve
    - butil::fast_rand_in
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string GeneratePassword()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:388,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:392,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:393,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_redis_unittest.cpp:394,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:398,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:402,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:403,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:404,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:406,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:406,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:407,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:407,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:408,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:408,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:409,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:411,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:412,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:412,1
    - Dst: brpc::Controller::ErrorText
      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::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:414,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:414,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:415,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:416,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:416,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:417,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:418,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:418,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:419,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:426,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:429,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:429,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:430,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:431,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:432,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:434,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:435,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:437,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:438,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:438,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:444,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:450,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:450,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:451,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:452,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:453,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:455,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:458,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:460,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:461,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:461,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:463,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:463,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:464,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:464,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:472,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:472,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:475,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:475,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:476,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:477,1
    - Dst: brpc::Controller::Controller
      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: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:481,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:483,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:484,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:484,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:484,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 487
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - std::string::c_str
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - GeneratePassword
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, auth)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:491,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:494,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:496,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:497,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:498,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:499,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:501,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:502,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:503,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:504,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:506,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:507,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:508,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:509,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:511,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:512,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
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:516,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:517,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:517,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:518,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:520,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:521,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:521,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:522,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:524,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:525,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:529,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:530,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 531
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::AddCommand
    - ASSERT_STREQ
    - puts
    - brpc::RedisRequest::_buf::to_string
    - brpc::RedisRequest::Clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, cmd_format)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:535,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:538,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:539,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:540,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:541,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:542,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:544,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:545,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:546,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:547,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:549,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:550,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:551,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:552,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:554,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:555,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:556,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:557,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:559,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:560,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:561,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:562,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:564,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:566,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:567,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:569,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:570,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:571,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:572,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 573
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::AddCommand
    - ASSERT_STREQ
    - puts
    - brpc::RedisRequest::_buf::to_string
    - brpc::RedisRequest::Clear
    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:577,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' commands'
    argTypes:
    - std::vector<butil::StringPiece>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 584
    functionName: GetCompleteCommand
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - data
    - size
    - std::string::append
    - std::string::push_back
    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:588,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:589,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:591,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:595,1
    - Dst: brpc::RedisCommandNoFormat
      Src: /src/brpc/test/brpc_redis_unittest.cpp:595,1
    - Dst: std::string::c_str
      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:596,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:597,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:598,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:598,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:604,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:609,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:609,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:612,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:617,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:618,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:618,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:625,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:633,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:639,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:639,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:645,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:645,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:646,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:646,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:648,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:648,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:649,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:654,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:654,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:655,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:660,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:660,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:661,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:666,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:666,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:667,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:673,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 587
    functionDepth: 2
    functionLinenumber: 587
    functionLinenumberEnd: 675
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisCommandNoFormat
    - ASSERT_TRUE
    - std::string::c_str
    - butil::Arena::Arena
    - butil::fast_rand_less_than
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::empty
    - butil::IOBuf::push_back
    - GetCompleteCommand
    - butil::IOBuf::size
    - brpc::RedisCommandParser::Consume
    - brpc::RedisCommandParser::Reset
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, command_parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:678,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:679,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:681,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:686,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:687,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 677
    functionDepth: 1
    functionLinenumber: 677
    functionLinenumberEnd: 688
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::RedisCommandParser::RedisCommandParser
    - brpc::RedisCommandParser::Consume
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST(RedisCommandParserTest, reject_empty_resp_array_command)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:695,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:696,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:698,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:702,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:703,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:704,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:705,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:711,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:712,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:713,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:714,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:719,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:721,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:722,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 694
    functionDepth: 2
    functionLinenumber: 694
    functionLinenumberEnd: 724
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::clear
    - GetCompleteCommand
    - brpc::RedisCommandParser::Reset
    - brpc::RedisCommandParser::Consume
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, inline_does_not_eat_h2_preface)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:727,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:731,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:732,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:734,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:734,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:735,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:736,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:736,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:737,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:737,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:741,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:742,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:742,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:743,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:743,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:748,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:749,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:750,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:751,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:751,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:752,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:757,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:758,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:758,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:759,1
    - Dst: brpc::RedisReply::error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:759,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:764,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:765,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:766,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:767,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:767,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:768,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:773,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:774,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:774,1
    - Dst: brpc::RedisReply::SetString
      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::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:777,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:778,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:784,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:785,1
    - Dst: butil::IOBuf::to_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: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:786,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:788,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:789,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:789,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:790,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:791,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:791,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:795,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:796,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:797,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:797,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:798,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:798,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:798,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:803,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:804,1
    - Dst: brpc::RedisReply::SetInteger
      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::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:810,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:811,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:816,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:817,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:817,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:818,1
    - Dst: brpc::RedisReply::integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:818,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:824,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:825,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:826,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:828,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:829,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:830,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:831,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:832,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:833,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:833,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:834,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:834,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:835,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:836,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:841,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:841,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:842,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:843,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:843,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:844,1
    - Dst: is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:845,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:845,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:846,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:846,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:847,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:847,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:849,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:849,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:851,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:851,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:852,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:853,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:853,1
    - Dst: brpc::RedisReply::SetNullArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:856,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:857,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:857,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:858,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:859,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:861,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:861,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:867,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:869,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:870,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:871,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:874,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:875,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:875,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:876,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:876,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:877,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:877,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:877,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:883,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:884,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:884,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:885,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:886,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:886,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:888,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:888,1
    - Dst: brpc::RedisReply::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:889,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:890,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:890,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:891,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:892,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:892,1
    - Dst: brpc::RedisReply::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:893,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:894,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:894,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 107
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 896
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_nil
    - brpc::RedisReply::SetNullString
    - butil::Arena::Arena
    - brpc::RedisReply::FormatString
    - butil::IOBufAppender::move_to
    - brpc::RedisReply::SetStatus
    - ASSERT_EQ
    - brpc::RedisReply::is_array
    - SetInteger
    - butil::IOBufAppender::IOBufAppender
    - brpc::RedisReply::is_error
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - brpc::RedisReply::ConsumePartialIOBuf
    - is_integer
    - is_string
    - integer
    - ASSERT_STREQ
    - brpc::RedisReply::SerializeTo
    - c_str
    - size
    - brpc::RedisReply::error_message
    - brpc::RedisReply::c_str
    - brpc::RedisReply::is_string
    - SetArray
    - brpc::RedisReply::is_nil
    - brpc::RedisReply::SetArray
    - brpc::RedisReply::SetString
    - brpc::RedisReply::size
    - brpc::RedisReply::SetInteger
    - is_array
    - brpc::RedisReply::CopyFromDifferentArena
    - brpc::RedisReply::SetNullArray
    - brpc::RedisReply::integer
    - SetString
    - brpc::RedisReply::SetError
    - brpc::RedisReply::is_integer
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, redis_reply_codec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:901,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:903,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:905,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:907,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:909,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:909,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:911,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:913,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:915,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:918,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:918,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:919,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:919,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 920
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 920
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Arena::Arena
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - EXPECT_TRUE
    - brpc::RedisReply::is_array
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, redis_reply_rejects_deep_nested_arrays)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_redis_unittest.cpp:931,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 929
    functionDepth: 1
    functionLinenumber: 929
    functionLinenumberEnd: 931
    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:935,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:937,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:937,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:937,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:939,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:939,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:944,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:945,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:945,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:947,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:949,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:949,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:950,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:952,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:954,1
    - Dst: clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:958,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: 963
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 963
    functionName: RedisServiceImpl::OnBatched
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetArray
    - RedisServiceImpl::DoSet
    - std::vector::push_back
    - clear
    - RedisServiceImpl::DoGet
    - empty
    - as_string
    - push_back
    - 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:967,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: 968
      start: 965
    functionDepth: 0
    functionLinenumber: 965
    functionLinenumberEnd: 968
    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:971,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:972,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:973,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:975,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 970
    functionDepth: 0
    functionLinenumber: 970
    functionLinenumberEnd: 977
    functionName: RedisServiceImpl::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisReply*::SetNullString
    - brpc::RedisReply*::SetString
    - find
    - end
    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:988,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 988
      start: 987
    functionDepth: 1
    functionLinenumber: 987
    functionLinenumberEnd: 988
    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: 992
      start: 990
    functionDepth: 0
    functionLinenumber: 990
    functionLinenumberEnd: 992
    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: 1000
      start: 999
    functionDepth: 0
    functionLinenumber: 999
    functionLinenumberEnd: 1000
    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:1006,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1007,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1010,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1010,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1012,1
    - Dst: AuthSession::AuthSession
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1015,1
    - Dst: brpc::RedisConnContext*::reset_session
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1016,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1017,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: 1019
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1019
    functionName: AuthCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetError
    - data
    - brpc::RedisConnContext*::reset_session
    - AuthSession::AuthSession
    - size
    - brpc::RedisReply*::SetStatus
    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: 1029
      start: 1027
    functionDepth: 0
    functionLinenumber: 1027
    functionLinenumberEnd: 1029
    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:1036,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1039,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1041,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1044,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1045,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1049,1
    - Dst: SetCommandHandler::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1051,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1051,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1051,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: 1054
      start: 1031
    functionDepth: 1
    functionLinenumber: 1031
    functionLinenumberEnd: 1054
    functionName: SetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetCommandHandler::DoSet
    - OnBatched
    - static_cast<AuthSession*>
    - as_string
    - brpc::RedisReply*::SetError
    - 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:1058,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: 1059
      start: 1056
    functionDepth: 0
    functionLinenumber: 1056
    functionLinenumberEnd: 1059
    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: 1071
      start: 1069
    functionDepth: 0
    functionLinenumber: 1069
    functionLinenumberEnd: 1071
    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:1078,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1081,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1083,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1086,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1087,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: GetCommandHandler::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,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: 1096
      start: 1073
    functionDepth: 1
    functionLinenumber: 1073
    functionLinenumberEnd: 1096
    functionName: GetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnBatched
    - static_cast<AuthSession*>
    - GetCommandHandler::DoGet
    - as_string
    - brpc::RedisReply*::SetError
    - 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: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1099,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1100,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1101,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1098
    functionDepth: 0
    functionLinenumber: 1098
    functionLinenumberEnd: 1105
    functionName: GetCommandHandler::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisReply*::SetNullString
    - brpc::RedisReply*::SetString
    - find
    - end
    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: 1115
      start: 1114
    functionDepth: 0
    functionLinenumber: 1114
    functionLinenumberEnd: 1115
    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:1122,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1125,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1127,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1130,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1131,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1135,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1136,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1137,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1138,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: 1140
      start: 1117
    functionDepth: 1
    functionLinenumber: 1117
    functionLinenumberEnd: 1140
    functionName: IncrCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - brpc::RedisReply*::SetInteger
    - static_cast<AuthSession*>
    - lock
    - as_string
    - brpc::RedisReply*::SetError
    - 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: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1147,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1149,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1150,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1151,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1152,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1153,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1154,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1155,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1156,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1157,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1157,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1158,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1158,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1159,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1159,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1160,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1163,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1163,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1165,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1167,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1169,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1169,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1169,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1171,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1175,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1175,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1176,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1177,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1178,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1179,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1179,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1180,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1180,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1181,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1183,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1184,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1185,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1186,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1186,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1187,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1188,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1188,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1189,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1190,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1190,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1191,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1192,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1192,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1193,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1194,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1195,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1195,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1195,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1197,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1198,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1199,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1201,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1202,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1204,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1205,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1206,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1207,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1207,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1208,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1208,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1209,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1209,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1210,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1210,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1211,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1213,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1214,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1214,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1215,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1216,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1216,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1217,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1219,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1219,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1220,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1221,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1222,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1223,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1224
      start: 1146
    functionDepth: 2
    functionLinenumber: 1146
    functionLinenumberEnd: 1224
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - SetCommandHandler::SetCommandHandler
    - std::unique_ptr::get
    - brpc::RedisResponse::Clear
    - std::string::append
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - AuthCommandHandler::AuthCommandHandler
    - std::vector::size
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - IncrCommandHandler::IncrCommandHandler
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - brpc::RedisRequest::Clear
    - GetCommandHandler::GetCommandHandler
    - brpc::Server::Server
    - brpc::RedisRequest::AddCommandByComponents
    - std::vector::push_back
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - RedisServiceImpl*::AddCommandHandler
    - ASSERT_NE
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - brpc::ServerOptions::ServerOptions
    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:1227,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1229,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1230,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1232,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1232,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1233,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1234,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1234,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1235,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1235,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1236,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1236,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1239
      start: 1226
    functionDepth: 1
    functionLinenumber: 1226
    functionLinenumberEnd: 1239
    functionName: incr_thread
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - static_cast<brpc::Channel*>
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - EXPECT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::Channel*::CallMethod
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void * incr_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1242,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1245,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1246,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1247,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1248,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1249,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1250,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1251,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1251,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1252,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1257,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1260,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1267,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1267,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1267,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1268,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1275,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1241
    functionDepth: 2
    functionLinenumber: 1241
    functionLinenumberEnd: 1276
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - std::unique_ptr::get
    - IncrCommandHandler::IncrCommandHandler
    - bthread_join
    - std::vector::push_back
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Server::Start
    - brpc::Server::listen_address
    - ASSERT_EQ
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - bthread_start_background
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - std::vector::back
    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: 1280
      start: 1280
    functionDepth: 0
    functionLinenumber: 1280
    functionLinenumberEnd: 1280
    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:1285,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: 1287
      start: 1282
    functionDepth: 0
    functionLinenumber: 1282
    functionLinenumberEnd: 1287
    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:1290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1291
      start: 1289
    functionDepth: 0
    functionLinenumber: 1289
    functionLinenumberEnd: 1291
    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:1299,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1307,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1308,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1311,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1311,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1312,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1313,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1317,1
    - Dst: SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1319,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1322,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: 1324
      start: 1295
    functionDepth: 1
    functionLinenumber: 1295
    functionLinenumberEnd: 1324
    functionName: MultiCommandHandler::MultiTransactionHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetArray
    - std::vector::push_back
    - SetStatus
    - SetInteger
    - unlock
    - lock
    - as_string
    - brpc::RedisReply*::SetError
    - push_back
    - size
    - 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: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1331,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1333,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1335,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1336,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1337,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1338,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1339,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1340,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1341,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1351,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1353,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1355,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1355,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1355,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1357,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1358,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1359,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1360,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1360,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1361,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1361,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1362,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1363,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1363,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1364,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1364,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1365,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1365,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1368,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1369,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1371,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1371,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1372,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1372,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1375,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1375,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1377,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1377,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1379,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1379,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1381,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1381,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1382,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1383,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1385,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1385,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1386,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1386,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1389,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1391,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1391,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1396,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1397,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1399,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1400,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1401,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1402,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1402,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1403,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1404,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1404,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1405,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1406,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1407,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1407,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1408,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1409,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1409,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1410,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1410,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1412
      start: 1330
    functionDepth: 2
    functionLinenumber: 1330
    functionLinenumberEnd: 1412
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - SetCommandHandler::SetCommandHandler
    - std::unique_ptr::get
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - IncrCommandHandler::IncrCommandHandler
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - integer
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - size
    - GetCommandHandler::GetCommandHandler
    - MultiCommandHandler::MultiCommandHandler
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - RedisServiceImpl*::AddCommandHandler
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - brpc::ServerOptions::ServerOptions
    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:1415,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1417,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1418,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1419,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1420,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1421,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1422,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1423,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1424,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1425,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1425,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1426,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1426,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1427,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1427,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1428,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1431,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1431,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1433,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1435,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1439,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1440,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1442,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1442,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1443,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1443,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1444,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1444,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1445,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1445,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1446,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1446,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1447,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1447,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1448,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1448,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1449,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1449,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1450,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1452,1
    - Dst: brpc::RedisResponse::reply_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: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1455,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1455,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1456
      start: 1414
    functionDepth: 2
    functionLinenumber: 1414
    functionLinenumberEnd: 1456
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - SetCommandHandler::SetCommandHandler
    - std::unique_ptr::get
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - GetCommandHandler::GetCommandHandler
    - MultiCommandHandler::MultiCommandHandler
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - RedisServiceImpl*::AddCommandHandler
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - brpc::ServerOptions::ServerOptions
    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:1462,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1467,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1469,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1470,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1471,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1475,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1480,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1482,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1483,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1487,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1492,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1494,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1495,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1499,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1505,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1506,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1508,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1509,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1510,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1514,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1519,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1520,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1522,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1523,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1527,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1532,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1533,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1535,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1536,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1540,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1545,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1546,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1548,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1549,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1550,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1551,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1555,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1557,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1560,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1561,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1562,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1562,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1567,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1568,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1570,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1571,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1576,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1577,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1578,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1578,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1578,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1585,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1586,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1588,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1590,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1592,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1596,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1603,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1605,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1610,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1611,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1611,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1612,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1612,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1617,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1618,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1620,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1625,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1626,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1627,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1627,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1631
      start: 1458
    functionDepth: 1
    functionLinenumber: 1458
    functionLinenumberEnd: 1631
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - std::string::append
    - ASSERT_EQ
    - std::vector::size
    - brpc::RedisReply::is_array
    - butil::IOBuf::size
    - ASSERT_TRUE
    - brpc::RedisReply::ConsumePartialIOBuf
    - std::string::push_back
    - butil::IOBuf::push_back
    - ASSERT_STREQ
    - brpc::RedisCommandParser::Consume
    - std::to_string
    - as_string
    - c_str
    - size
    - brpc::RedisReply::size
    - butil::IOBuf::append
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::IOBuf
    - std::string::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:51,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:54,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:56,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_redis_unittest.cpp:58,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:58,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:60,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 49
    functionDepth: 1
    functionLinenumber: 49
    functionLinenumberEnd: 62
    functionName: RemoveRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveRedisServer()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:69,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:70,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:71,1
    - Dst: system
      Src: /src/brpc/test/brpc_redis_unittest.cpp:77,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:78,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:82,1
    - Dst: fork
      Src: /src/brpc/test/brpc_redis_unittest.cpp:84,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:86,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:87,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:89,1
    - Dst: unlink
      Src: /src/brpc/test/brpc_redis_unittest.cpp:93,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_redis_unittest.cpp:94,1
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:95,1
    - Dst: exit
      Src: /src/brpc/test/brpc_redis_unittest.cpp:96,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_redis_unittest.cpp:100,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 101
    functionName: RunRedisServer
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - execvp
    - system
    - unlink
    - usleep
    - puts
    - exit
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void RunRedisServer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 108
    functionName: ScopedRedisMaxReplyDepth::ScopedRedisMaxReplyDepth
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ScopedRedisMaxReplyDepth(int32_t depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: ~ScopedRedisMaxReplyDepth()
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~ScopedRedisMaxReplyDepth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: 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:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 122
    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: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    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:131,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:131,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:131,1
    - Dst: type
      Src: /src/brpc/test/brpc_redis_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:134,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:134,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:134,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:135,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:136,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:141,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:141,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:141,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:148,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:148,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:149,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:152,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    - Dst: error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:153,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 2
    argNames:
    - ' reply1'
    - ' reply2'
    argTypes:
    - brpc::RedisReply
    - brpc::RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 156
    functionName: AssertReplyEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached:
    - AssertReplyEqual
    - error_message
    - integer
    - ASSERT_NE
    - ASSERT_EQ
    - ASSERT_STREQ
    - data
    - CHECK_EQ
    - type
    - c_str
    - 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:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:165,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:167,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:168,1
    - Dst: AssertReplyEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:169,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' r1'
    - ' r2'
    argTypes:
    - brpc::RedisResponse
    - brpc::RedisResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 158
    functionDepth: 2
    functionLinenumber: 158
    functionLinenumberEnd: 172
    functionName: AssertResponseEqual
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 3
    functionsReached:
    - AssertReplyEqual
    - reply_size
    - ASSERT_NE
    - ASSERT_EQ
    - reply
    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:176,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:179,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:181,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:182,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:182,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:183,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:184,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:185,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:187,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:187,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:188,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:190,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:191,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:194,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:195,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:196,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:197,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:198,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:200,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:200,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:201,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:201,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:202,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:202,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:204,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:205,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:206,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:207,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:207,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:208,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:209,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:210,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:210,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:212,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:212,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:214,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:215,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:216,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:217,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:218,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:220,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:222,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:222,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:224,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:225,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:226,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:227,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:227,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:228,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:229,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:230,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:231,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:232,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:234,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:235,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:236,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:237,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:237,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:238,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:239,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:240,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:241,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:241,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:243,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:244,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:246,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:246,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:247,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:249,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:250,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 251
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::Clear
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - brpc::RedisRequest::Clear
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:255,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:258,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:261,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:261,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:262,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:263,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:264,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:266,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:267,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:269,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:270,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:273,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:274,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:275,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:277,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:278,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:278,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:279,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:280,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:281,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:282,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:283,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:284,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:285,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:286,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:286,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:287,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:288,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:289,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:290,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:291,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:292,1
    - Dst: brpc::RedisResponse::reply
      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::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:293,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:296,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:297,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 253
    functionDepth: 3
    functionLinenumber: 253
    functionLinenumberEnd: 299
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisResponse::Clear
    - brpc::RedisResponse::MergeFrom
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - AssertResponseEqual
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - brpc::RedisRequest::Clear
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    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:303,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:306,1
    - Dst: brpc::Channel::Channel
      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::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:309,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:310,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:311,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:312,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:314,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:315,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:316,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:317,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:318,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:319,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:319,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:319,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:320,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:321,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:322,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:322,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:323,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:324,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:325,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:326,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:327,1
    - Dst: brpc::RedisResponse::reply
      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::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:328,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:331,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:332,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:333,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 301
    functionDepth: 3
    functionLinenumber: 301
    functionLinenumberEnd: 334
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - AssertResponseEqual
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::RedisResponse::MergeFrom
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    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:338,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:341,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:344,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:345,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:346,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:347,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:354,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:354,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:355,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:355,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:356,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:356,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:357,1
    - Dst: arraysize
      Src: /src/brpc/test/brpc_redis_unittest.cpp:357,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:359,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:360,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:360,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:361,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:362,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:363,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:364,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:366,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:367,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:368,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:368,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:369,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:369,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:372,1
    - Dst: brpc::RedisResponse::MergeFrom
      Src: /src/brpc/test/brpc_redis_unittest.cpp:373,1
    - Dst: AssertResponseEqual
      Src: /src/brpc/test/brpc_redis_unittest.cpp:374,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 336
    functionDepth: 3
    functionLinenumber: 336
    functionLinenumberEnd: 375
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::AddCommandByComponents
    - ASSERT_FALSE
    - AssertResponseEqual
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::RedisResponse::MergeFrom
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - arraysize
    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:379,1
    - Dst: std::string::capacity
      Src: /src/brpc/test/brpc_redis_unittest.cpp:380,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:381,1
    - Dst: butil::fast_rand_in
      Src: /src/brpc/test/brpc_redis_unittest.cpp:381,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 384
    functionName: GeneratePassword
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 5
    functionsReached:
    - std::string::capacity
    - std::string::reserve
    - butil::fast_rand_in
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string GeneratePassword()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:388,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:392,1
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:393,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_redis_unittest.cpp:394,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:398,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:401,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:402,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:403,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:404,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:406,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:406,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:407,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:407,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:408,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:408,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:409,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:411,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:412,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:412,1
    - Dst: brpc::Controller::ErrorText
      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::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:414,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:414,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:415,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:416,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:416,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:417,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:418,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:418,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:419,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:420,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:421,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:426,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:429,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:429,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:430,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:431,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:432,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:434,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:435,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:437,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:437,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:438,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:438,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:444,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:446,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:450,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:450,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:451,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:452,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:453,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:455,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:456,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:458,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:460,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:461,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:461,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:462,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:463,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:463,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:464,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:464,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:469,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:472,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:472,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:475,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:475,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:476,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:477,1
    - Dst: brpc::Controller::Controller
      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: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:481,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:483,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:484,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:484,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:484,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 55
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 487
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - std::string::c_str
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - puts
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - GeneratePassword
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, auth)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:491,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:494,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:496,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:497,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:498,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:499,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:501,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:502,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:503,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:504,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:506,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:507,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:508,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:509,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:511,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:512,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
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:516,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:517,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:517,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:518,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:520,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:521,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:521,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:522,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:524,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:525,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:529,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:530,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 489
    functionDepth: 1
    functionLinenumber: 489
    functionLinenumberEnd: 531
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::AddCommand
    - ASSERT_STREQ
    - puts
    - brpc::RedisRequest::_buf::to_string
    - brpc::RedisRequest::Clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, cmd_format)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_redis_unittest.cpp:535,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:538,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:539,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:540,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:541,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:542,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:544,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:545,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:546,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:547,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:549,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:550,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:551,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:552,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:554,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:555,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:556,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:557,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:559,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:560,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:561,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:562,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:564,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:565,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:566,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:567,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:569,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:570,1
    - Dst: brpc::RedisRequest::_buf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:571,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:572,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 573
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::RedisRequest::AddCommand
    - ASSERT_STREQ
    - puts
    - brpc::RedisRequest::_buf::to_string
    - brpc::RedisRequest::Clear
    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:577,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:579,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:581,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' commands'
    argTypes:
    - std::vector<butil::StringPiece>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 584
    functionName: GetCompleteCommand
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - data
    - size
    - std::string::append
    - std::string::push_back
    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:588,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:589,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:591,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:595,1
    - Dst: brpc::RedisCommandNoFormat
      Src: /src/brpc/test/brpc_redis_unittest.cpp:595,1
    - Dst: std::string::c_str
      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:596,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:597,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:598,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:598,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:604,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:607,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:609,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:609,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:611,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:612,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:617,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:618,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:618,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:625,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:628,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:630,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_redis_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:633,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_redis_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:639,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:639,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:644,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:645,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:645,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:646,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:646,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:648,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:648,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:649,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:653,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:654,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:654,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:655,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:659,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:660,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:660,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:661,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:666,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:666,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:667,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:671,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:672,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:673,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 675
      start: 587
    functionDepth: 2
    functionLinenumber: 587
    functionLinenumberEnd: 675
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisCommandNoFormat
    - ASSERT_TRUE
    - std::string::c_str
    - butil::Arena::Arena
    - butil::fast_rand_less_than
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::empty
    - butil::IOBuf::push_back
    - GetCompleteCommand
    - butil::IOBuf::size
    - brpc::RedisCommandParser::Consume
    - brpc::RedisCommandParser::Reset
    - butil::IOBuf::IOBuf
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, command_parser)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:678,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:679,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:681,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:685,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:686,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:687,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 677
    functionDepth: 1
    functionLinenumber: 677
    functionLinenumberEnd: 688
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::RedisCommandParser::RedisCommandParser
    - brpc::RedisCommandParser::Consume
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST(RedisCommandParserTest, reject_empty_resp_array_command)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:695,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:696,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:698,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:702,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:703,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:704,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:705,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:711,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:712,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:713,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:714,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:719,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: GetCompleteCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:720,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:721,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:722,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 694
    functionDepth: 2
    functionLinenumber: 694
    functionLinenumberEnd: 724
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::clear
    - GetCompleteCommand
    - brpc::RedisCommandParser::Reset
    - brpc::RedisCommandParser::Consume
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, inline_does_not_eat_h2_preface)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:727,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:731,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:732,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:733,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:734,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:734,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:735,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:736,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:736,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:737,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:737,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:741,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:742,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:742,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:743,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:743,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:748,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:749,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:750,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:751,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:751,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:752,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:753,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:756,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:757,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:758,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:758,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:759,1
    - Dst: brpc::RedisReply::error_message
      Src: /src/brpc/test/brpc_redis_unittest.cpp:759,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:764,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:765,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:766,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:767,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:767,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:768,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:769,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:773,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:774,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:774,1
    - Dst: brpc::RedisReply::SetString
      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::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:777,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:778,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:779,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:780,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:783,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:784,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:785,1
    - Dst: butil::IOBuf::to_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: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:786,1
    - Dst: brpc::RedisReply::FormatString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:788,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:789,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:789,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:790,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:791,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:791,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:792,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:795,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:796,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:797,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:797,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:798,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:798,1
    - Dst: brpc::RedisReply::c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:798,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:803,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:804,1
    - Dst: brpc::RedisReply::SetInteger
      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::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:810,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:811,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:812,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:816,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:817,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:817,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:818,1
    - Dst: brpc::RedisReply::integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:818,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:824,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_redis_unittest.cpp:825,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:826,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:828,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:829,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:830,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:831,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:832,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:833,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:833,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:834,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:834,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:835,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:836,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:841,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:841,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:842,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:842,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:843,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:843,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:844,1
    - Dst: is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:844,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:845,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:845,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:846,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:846,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:847,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:847,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:849,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:849,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:850,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:851,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:851,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:852,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:853,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:853,1
    - Dst: brpc::RedisReply::SetNullArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:856,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:857,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/test/brpc_redis_unittest.cpp:857,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_redis_unittest.cpp:858,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:859,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:859,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:860,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:861,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:861,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:867,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:869,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:870,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:871,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:874,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:875,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:875,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:876,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:876,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:877,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:877,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:877,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:878,1
    - Dst: brpc::RedisReply::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:883,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:884,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:884,1
    - Dst: brpc::RedisReply::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:885,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:886,1
    - Dst: brpc::RedisReply::is_nil
      Src: /src/brpc/test/brpc_redis_unittest.cpp:886,1
    - Dst: brpc::RedisReply::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:888,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:888,1
    - Dst: brpc::RedisReply::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:889,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:890,1
    - Dst: brpc::RedisReply::is_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:890,1
    - Dst: brpc::RedisReply::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:891,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:892,1
    - Dst: brpc::RedisReply::is_error
      Src: /src/brpc/test/brpc_redis_unittest.cpp:892,1
    - Dst: brpc::RedisReply::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:893,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:894,1
    - Dst: brpc::RedisReply::is_integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:894,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 107
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 896
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - is_nil
    - brpc::RedisReply::SetNullString
    - butil::Arena::Arena
    - brpc::RedisReply::FormatString
    - butil::IOBufAppender::move_to
    - brpc::RedisReply::SetStatus
    - ASSERT_EQ
    - brpc::RedisReply::is_array
    - SetInteger
    - butil::IOBufAppender::IOBufAppender
    - brpc::RedisReply::is_error
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - brpc::RedisReply::ConsumePartialIOBuf
    - is_integer
    - is_string
    - integer
    - ASSERT_STREQ
    - brpc::RedisReply::SerializeTo
    - c_str
    - size
    - brpc::RedisReply::error_message
    - brpc::RedisReply::c_str
    - brpc::RedisReply::is_string
    - SetArray
    - brpc::RedisReply::is_nil
    - brpc::RedisReply::SetArray
    - brpc::RedisReply::SetString
    - brpc::RedisReply::size
    - brpc::RedisReply::SetInteger
    - is_array
    - brpc::RedisReply::CopyFromDifferentArena
    - brpc::RedisReply::SetNullArray
    - brpc::RedisReply::integer
    - SetString
    - brpc::RedisReply::SetError
    - brpc::RedisReply::is_integer
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, redis_reply_codec)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:901,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:903,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:905,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_redis_unittest.cpp:907,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:909,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:909,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:911,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:913,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:915,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:918,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:918,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:919,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:919,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 920
      start: 898
    functionDepth: 1
    functionLinenumber: 898
    functionLinenumberEnd: 920
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Arena::Arena
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - EXPECT_TRUE
    - brpc::RedisReply::is_array
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisTest, redis_reply_rejects_deep_nested_arrays)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_redis_unittest.cpp:931,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 929
    functionDepth: 1
    functionLinenumber: 929
    functionLinenumberEnd: 931
    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:935,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:937,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:937,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:937,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:939,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:939,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:944,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:945,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:945,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:947,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:949,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:949,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:950,1
    - Dst: RedisServiceImpl::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:952,1
    - Dst: RedisServiceImpl::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:954,1
    - Dst: clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:958,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: 963
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 963
    functionName: RedisServiceImpl::OnBatched
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetArray
    - RedisServiceImpl::DoSet
    - std::vector::push_back
    - clear
    - RedisServiceImpl::DoGet
    - empty
    - as_string
    - push_back
    - 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:967,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: 968
      start: 965
    functionDepth: 0
    functionLinenumber: 965
    functionLinenumberEnd: 968
    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:971,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:972,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:973,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:975,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 977
      start: 970
    functionDepth: 0
    functionLinenumber: 970
    functionLinenumberEnd: 977
    functionName: RedisServiceImpl::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisReply*::SetNullString
    - brpc::RedisReply*::SetString
    - find
    - end
    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:988,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - password
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 988
      start: 987
    functionDepth: 1
    functionLinenumber: 987
    functionLinenumberEnd: 988
    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: 992
      start: 990
    functionDepth: 0
    functionLinenumber: 990
    functionLinenumberEnd: 992
    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: 1000
      start: 999
    functionDepth: 0
    functionLinenumber: 999
    functionLinenumberEnd: 1000
    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:1006,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1007,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1010,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1010,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1012,1
    - Dst: AuthSession::AuthSession
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1015,1
    - Dst: brpc::RedisConnContext*::reset_session
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1016,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1017,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: 1019
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1019
    functionName: AuthCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetError
    - data
    - brpc::RedisConnContext*::reset_session
    - AuthSession::AuthSession
    - size
    - brpc::RedisReply*::SetStatus
    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: 1029
      start: 1027
    functionDepth: 0
    functionLinenumber: 1027
    functionLinenumberEnd: 1029
    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:1036,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1039,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1041,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1044,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1045,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1049,1
    - Dst: SetCommandHandler::DoSet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1051,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1051,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1051,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: 1054
      start: 1031
    functionDepth: 1
    functionLinenumber: 1031
    functionLinenumberEnd: 1054
    functionName: SetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetCommandHandler::DoSet
    - OnBatched
    - static_cast<AuthSession*>
    - as_string
    - brpc::RedisReply*::SetError
    - 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:1058,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: 1059
      start: 1056
    functionDepth: 0
    functionLinenumber: 1056
    functionLinenumberEnd: 1059
    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: 1071
      start: 1069
    functionDepth: 0
    functionLinenumber: 1069
    functionLinenumberEnd: 1071
    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:1078,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1081,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1083,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1086,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1087,1
    - Dst: OnBatched
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1091,1
    - Dst: GetCommandHandler::DoGet
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1093,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: 1096
      start: 1073
    functionDepth: 1
    functionLinenumber: 1073
    functionLinenumberEnd: 1096
    functionName: GetCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - OnBatched
    - static_cast<AuthSession*>
    - GetCommandHandler::DoGet
    - as_string
    - brpc::RedisReply*::SetError
    - 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: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1099,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1100,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1101,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' key'
    - output
    argTypes:
    - std::string
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1098
    functionDepth: 0
    functionLinenumber: 1098
    functionLinenumberEnd: 1105
    functionName: GetCommandHandler::DoGet
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisReply*::SetNullString
    - brpc::RedisReply*::SetString
    - find
    - end
    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: 1115
      start: 1114
    functionDepth: 0
    functionLinenumber: 1114
    functionLinenumberEnd: 1115
    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:1122,1
    - Dst: static_cast<AuthSession*>
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1125,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1127,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1130,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1131,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1135,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1136,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1137,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1138,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: 1140
      start: 1117
    functionDepth: 1
    functionLinenumber: 1117
    functionLinenumberEnd: 1140
    functionName: IncrCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - brpc::RedisReply*::SetInteger
    - static_cast<AuthSession*>
    - lock
    - as_string
    - brpc::RedisReply*::SetError
    - 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: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1147,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1149,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1150,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1151,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1152,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1153,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1154,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1155,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1156,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1157,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1157,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1158,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1158,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1159,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1159,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1160,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1163,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1163,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1165,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1167,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1169,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1169,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1169,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1171,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1172,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1175,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1175,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1176,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1176,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1177,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1178,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1178,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1179,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1179,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1180,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1180,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1181,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1183,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1184,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1184,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1185,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1185,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1186,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1186,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1187,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1188,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1188,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1189,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1189,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1190,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1190,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1191,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1191,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1192,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1192,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1193,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1194,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1195,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1195,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1195,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1197,1
    - Dst: brpc::RedisRequest::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1198,1
    - Dst: brpc::RedisResponse::Clear
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1199,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1201,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1202,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1204,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1205,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1206,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1207,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1207,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1208,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1208,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1209,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1209,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1210,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1210,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1211,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1212,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1213,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1214,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1214,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1215,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1215,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1216,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1216,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1217,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1218,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1219,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1219,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1220,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1221,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1222,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1223,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1224
      start: 1146
    functionDepth: 2
    functionLinenumber: 1146
    functionLinenumberEnd: 1224
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - SetCommandHandler::SetCommandHandler
    - std::unique_ptr::get
    - brpc::RedisResponse::Clear
    - std::string::append
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - AuthCommandHandler::AuthCommandHandler
    - std::vector::size
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - IncrCommandHandler::IncrCommandHandler
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - brpc::RedisRequest::Clear
    - GetCommandHandler::GetCommandHandler
    - brpc::Server::Server
    - brpc::RedisRequest::AddCommandByComponents
    - std::vector::push_back
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - RedisServiceImpl*::AddCommandHandler
    - ASSERT_NE
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - brpc::ServerOptions::ServerOptions
    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:1227,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1229,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1230,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1231,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1232,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1232,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1233,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1234,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1234,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1234,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1235,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1235,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1236,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1236,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1236,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1239
      start: 1226
    functionDepth: 1
    functionLinenumber: 1226
    functionLinenumberEnd: 1239
    functionName: incr_thread
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - static_cast<brpc::Channel*>
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - EXPECT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::Controller::ErrorText
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::Channel*::CallMethod
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void * incr_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1242,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1245,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1246,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1247,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1248,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1249,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1250,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1251,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1251,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1252,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1252,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1255,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1257,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1260,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1264,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1267,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1267,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1267,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1268,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1275,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1241
    functionDepth: 2
    functionLinenumber: 1241
    functionLinenumberEnd: 1276
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - std::unique_ptr::get
    - IncrCommandHandler::IncrCommandHandler
    - bthread_join
    - std::vector::push_back
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - RedisServiceImpl*::AddCommandHandler
    - brpc::Server::Start
    - brpc::Server::listen_address
    - ASSERT_EQ
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::Channel
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - bthread_start_background
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - std::vector::back
    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: 1280
      start: 1280
    functionDepth: 0
    functionLinenumber: 1280
    functionLinenumberEnd: 1280
    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:1285,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: 1287
      start: 1282
    functionDepth: 0
    functionLinenumber: 1282
    functionLinenumberEnd: 1287
    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:1290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1291
      start: 1289
    functionDepth: 0
    functionLinenumber: 1289
    functionLinenumberEnd: 1291
    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:1299,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1304,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1305,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1307,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1308,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1311,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1311,1
    - Dst: lock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1312,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1313,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1317,1
    - Dst: SetStatus
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1319,1
    - Dst: unlock
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1322,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: 1324
      start: 1295
    functionDepth: 1
    functionLinenumber: 1295
    functionLinenumberEnd: 1324
    functionName: MultiCommandHandler::MultiTransactionHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetArray
    - std::vector::push_back
    - SetStatus
    - SetInteger
    - unlock
    - lock
    - as_string
    - brpc::RedisReply*::SetError
    - push_back
    - size
    - 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: GeneratePassword
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1331,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1333,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1334,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1335,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1336,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1337,1
    - Dst: IncrCommandHandler::IncrCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1338,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1339,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1340,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1341,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1342,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1343,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1344,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1345,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1349,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1351,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1353,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1355,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1355,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1355,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1357,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1358,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1359,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1360,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1360,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1361,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1361,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1362,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1363,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1363,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1364,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1364,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1365,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1365,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1368,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1369,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1371,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1371,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1372,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1372,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1375,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1375,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1377,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1377,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1379,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1379,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1381,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1381,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1382,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1383,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1385,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1385,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1386,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1386,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1388,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1389,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1391,1
    - Dst: integer
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1391,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1396,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1397,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1398,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1399,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1399,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1400,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1401,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1402,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1402,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1403,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1404,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1404,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1404,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1405,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1406,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1407,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1407,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1408,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1409,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1409,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1410,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1410,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 52
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1412
      start: 1330
    functionDepth: 2
    functionLinenumber: 1330
    functionLinenumberEnd: 1412
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - SetCommandHandler::SetCommandHandler
    - std::unique_ptr::get
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - IncrCommandHandler::IncrCommandHandler
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - integer
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - size
    - GetCommandHandler::GetCommandHandler
    - MultiCommandHandler::MultiCommandHandler
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - RedisServiceImpl*::AddCommandHandler
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - brpc::ServerOptions::ServerOptions
    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:1415,1
    - Dst: brpc::policy::RedisAuthenticator::RedisAuthenticator
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1417,1
    - Dst: RedisServiceImpl::RedisServiceImpl
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1418,1
    - Dst: GetCommandHandler::GetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1419,1
    - Dst: SetCommandHandler::SetCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1420,1
    - Dst: AuthCommandHandler::AuthCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1421,1
    - Dst: MultiCommandHandler::MultiCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1422,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1423,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1424,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1425,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1425,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1426,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1426,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1427,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1427,1
    - Dst: RedisServiceImpl*::AddCommandHandler
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1428,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1431,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1431,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1433,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1435,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1437,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1439,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1440,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1442,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1442,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1443,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1443,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1444,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1444,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1445,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1445,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1446,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1446,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1447,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1447,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1448,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1448,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1449,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1449,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1450,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1452,1
    - Dst: brpc::RedisResponse::reply_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: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1454,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1455,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1455,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1456
      start: 1414
    functionDepth: 2
    functionLinenumber: 1414
    functionLinenumberEnd: 1456
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - SetCommandHandler::SetCommandHandler
    - std::unique_ptr::get
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - AuthCommandHandler::AuthCommandHandler
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::policy::RedisAuthenticator::RedisAuthenticator
    - brpc::RedisRequest::AddCommand
    - brpc::Channel::Channel
    - ASSERT_STREQ
    - GetCommandHandler::GetCommandHandler
    - MultiCommandHandler::MultiCommandHandler
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::Failed
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::ChannelOptions::ChannelOptions
    - brpc::RedisResponse::RedisResponse
    - RedisServiceImpl*::AddCommandHandler
    - RedisServiceImpl::RedisServiceImpl
    - GeneratePassword
    - brpc::ServerOptions::ServerOptions
    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:1462,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1467,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1469,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1470,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1471,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1474,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1475,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1480,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1482,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1483,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1486,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1487,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1492,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1494,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1495,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1498,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1499,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1505,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1506,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1508,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1509,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1510,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1513,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1514,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1519,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1520,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1522,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1523,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1527,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1532,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1533,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1535,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1536,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1540,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1545,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1546,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1548,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1549,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1550,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1551,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1555,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1557,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1560,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1561,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1562,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1562,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1567,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1568,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1570,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1571,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1575,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1576,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1577,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1577,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1578,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1578,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1578,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1585,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1586,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1588,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1590,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1592,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1596,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1603,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1605,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1609,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1610,1
    - Dst: brpc::RedisReply::is_array
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1610,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1611,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1611,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1612,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1612,1
    - Dst: brpc::RedisCommandParser::RedisCommandParser
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1617,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1618,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1620,1
    - Dst: brpc::RedisCommandParser::Consume
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1625,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1626,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1627,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_unittest.cpp:1627,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 64
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1631
      start: 1458
    functionDepth: 1
    functionLinenumber: 1458
    functionLinenumberEnd: 1631
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - std::string::append
    - ASSERT_EQ
    - std::vector::size
    - brpc::RedisReply::is_array
    - butil::IOBuf::size
    - ASSERT_TRUE
    - brpc::RedisReply::ConsumePartialIOBuf
    - std::string::push_back
    - butil::IOBuf::push_back
    - ASSERT_STREQ
    - brpc::RedisCommandParser::Consume
    - std::to_string
    - as_string
    - c_str
    - size
    - brpc::RedisReply::size
    - butil::IOBuf::append
    - brpc::RedisCommandParser::RedisCommandParser
    - butil::IOBuf::IOBuf
    - std::string::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: 78
    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_TRUE
    - ASSERT_NE
    - execution_queue_stop
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - ASSERT_EQ
    - execution_queue_join
    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: 78
    functionsReached:
    - bthread::TaskIterator<RValue>::value
    - bthread::TaskIterator<RValue>::is_queue_stopped
    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:
    - ASSERT_TRUE
    - std::move
    - ASSERT_NE
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - RValue
    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:
    - bthread::CountdownEvent::reset
    - butil::Timer::stop
    - bthread::CountdownEvent::wait
    - PushArg*::total_num::fetch_add
    - execution_queue_execute
    - PushArg*::expected_value::fetch_add
    - butil::Timer::start
    - PushArg*::total_time::fetch_add
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - bthread::CountdownEvent::CountdownEvent
    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:
    - butil::Timer::stop
    - execution_queue_address
    - PushArg*::total_num::fetch_add
    - PushArg*::expected_value::fetch_add
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::execute
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::stopped
    - EXPECT_TRUE
    - butil::Timer::start
    - PushArg*::total_time::fetch_add
    - butil::Timer::n_elapsed
    - 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
    - pthread_create
    - PushArg::expected_value::load
    - PushArg::total_time::load
    - pthread_join
    - execution_queue_stop
    - LOG
    - execution_queue_start
    - ProfilerStop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    - PushArg::total_num::load
    - ProfilerStart
    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
    - EXPECT_EQ
    - is_queue_stopped
    - event::signal
    - EXPECT_FALSE
    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:
    - ARRAY_SIZE
    - pthread_create
    - PushArg::expected_value::load
    - pthread_join
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:
    - std::atomic_thread_fence
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:
    - fetch_add
    - execution_queue_execute
    - LOG
    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:
    - event::signal
    - EXPECT_TRUE
    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:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - execution_queue_stop
    - LOG
    - execution_queue_start
    - execution_queue_join
    - ASSERT_EQ
    - memset
    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:
    - pthread_self
    - EXPECT_EQ
    - is_queue_stopped
    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:
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - pthread_self
    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:
    - pthread_self
    - execution_queue_execute
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - EXPECT_NE
    - EXPECT_FALSE
    - bthread::futex_wake_private
    - bthread::futex_wait_private
    - butil::atomic*::store
    - pthread_self
    - butil::atomic*::load
    - is_queue_stopped
    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:
    - pthread_create
    - butil::atomic::store
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - bthread::futex_wake_private
    - butil::atomic::load
    - execution_queue_join
    - pthread_self
    - bthread::futex_wait_private
    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:
    - fetch_add
    - execution_queue_execute
    - LOG
    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:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - execution_queue_stop
    - LOG
    - execution_queue_start
    - execution_queue_join
    - ASSERT_EQ
    - memset
    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:
    - event::signal
    - usleep
    - is_queue_stopped
    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:
    - execution_queue_cancel
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:
    - handle::load
    - usleep
    - execution_queue_cancel
    - EXPECT_EQ
    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:
    - CancelSelf::handle::store
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    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:
    - AddMeta*::succ_times::fetch_add
    - AddMeta*::expected::fetch_sub
    - execution_queue_cancel
    - AddMeta*::race_times::fetch_add
    - AddMeta*::fail_times::fetch_add
    - is_queue_stopped
    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:
    - execution_queue_cancel
    - butil::fast_rand_less_than
    - AddMeta::expected::load
    - AddMeta::expected::fetch_add
    - execution_queue_execute
    - execution_queue_stop
    - AddMeta::succ_times::store
    - execution_queue_start
    - ASSERT_EQ
    - execution_queue_join
    - LOG
    - AddMeta::expected::store
    - AddMeta::fail_times::store
    - AddMeta::race_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_NE
    - execution_queue_stop
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - ASSERT_EQ
    - execution_queue_join
    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:
    - event::signal
    - usleep
    - is_queue_stopped
    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:
    - execution_queue_cancel
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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: 84
    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_TRUE
    - ASSERT_NE
    - execution_queue_stop
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - ASSERT_EQ
    - execution_queue_join
    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: 84
    functionsReached:
    - bthread::TaskIterator<RValue>::value
    - bthread::TaskIterator<RValue>::is_queue_stopped
    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:
    - ASSERT_TRUE
    - std::move
    - ASSERT_NE
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - RValue
    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:
    - bthread::CountdownEvent::reset
    - butil::Timer::stop
    - bthread::CountdownEvent::wait
    - PushArg*::total_num::fetch_add
    - execution_queue_execute
    - PushArg*::expected_value::fetch_add
    - butil::Timer::start
    - PushArg*::total_time::fetch_add
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - bthread::CountdownEvent::CountdownEvent
    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:
    - butil::Timer::stop
    - execution_queue_address
    - PushArg*::total_num::fetch_add
    - PushArg*::expected_value::fetch_add
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::execute
    - bthread::ExecutionQueue<LongIntTask>::scoped_ptr_t::stopped
    - EXPECT_TRUE
    - butil::Timer::start
    - PushArg*::total_time::fetch_add
    - butil::Timer::n_elapsed
    - 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
    - pthread_create
    - PushArg::expected_value::load
    - PushArg::total_time::load
    - pthread_join
    - execution_queue_stop
    - LOG
    - execution_queue_start
    - ProfilerStop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    - PushArg::total_num::load
    - ProfilerStart
    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
    - EXPECT_EQ
    - is_queue_stopped
    - event::signal
    - EXPECT_FALSE
    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:
    - ARRAY_SIZE
    - pthread_create
    - PushArg::expected_value::load
    - pthread_join
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:
    - std::atomic_thread_fence
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:
    - fetch_add
    - execution_queue_execute
    - LOG
    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:
    - event::signal
    - EXPECT_TRUE
    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:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - execution_queue_stop
    - LOG
    - execution_queue_start
    - execution_queue_join
    - ASSERT_EQ
    - memset
    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:
    - pthread_self
    - EXPECT_EQ
    - is_queue_stopped
    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:
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - pthread_self
    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:
    - pthread_self
    - execution_queue_execute
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - EXPECT_NE
    - EXPECT_FALSE
    - bthread::futex_wake_private
    - bthread::futex_wait_private
    - butil::atomic*::store
    - pthread_self
    - butil::atomic*::load
    - is_queue_stopped
    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:
    - pthread_create
    - butil::atomic::store
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - bthread::futex_wake_private
    - butil::atomic::load
    - execution_queue_join
    - pthread_self
    - bthread::futex_wait_private
    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:
    - fetch_add
    - execution_queue_execute
    - LOG
    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:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - execution_queue_stop
    - LOG
    - execution_queue_start
    - execution_queue_join
    - ASSERT_EQ
    - memset
    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:
    - event::signal
    - usleep
    - is_queue_stopped
    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:
    - execution_queue_cancel
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:
    - handle::load
    - usleep
    - execution_queue_cancel
    - EXPECT_EQ
    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:
    - CancelSelf::handle::store
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    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:
    - AddMeta*::succ_times::fetch_add
    - AddMeta*::expected::fetch_sub
    - execution_queue_cancel
    - AddMeta*::race_times::fetch_add
    - AddMeta*::fail_times::fetch_add
    - is_queue_stopped
    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:
    - execution_queue_cancel
    - butil::fast_rand_less_than
    - AddMeta::expected::load
    - AddMeta::expected::fetch_add
    - execution_queue_execute
    - execution_queue_stop
    - AddMeta::succ_times::store
    - execution_queue_start
    - ASSERT_EQ
    - execution_queue_join
    - LOG
    - AddMeta::expected::store
    - AddMeta::fail_times::store
    - AddMeta::race_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_NE
    - execution_queue_stop
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - ASSERT_EQ
    - execution_queue_join
    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:
    - event::signal
    - usleep
    - is_queue_stopped
    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:
    - execution_queue_cancel
    - execution_queue_execute
    - LOG
    - execution_queue_start
    - execution_queue_stop
    - ASSERT_EQ
    - execution_queue_join
    - usleep
    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:68,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      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:70,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:74,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:78,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    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_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - 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: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    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: 98
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 98
    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:103,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 106
    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:117,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:119,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:121,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:121,1
    - Dst: std::string*::data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:121,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:123,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: 124
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - std::string*::data
    - static_cast<brpc::Controller*>
    - strtol
    - brpc::Controller*::http_request
    - ::test::EchoResponse*::set_message
    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:130,1
    - Dst: AddBuiltinServices
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:131,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:131,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:140,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:146,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:146,1
    - Dst: brpc::get_client_side_messenger
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 153
    functionName: HttpTest::HttpTest
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::get_client_side_messenger
    - brpc::SetTrackMeAddress
    - AddBuiltinServices
    - AddService
    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: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    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:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:164,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - expect
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 165
    functionName: HttpTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - EXPECT_EQ
    - brpc::policy::VerifyHttpRequest
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg, bool expect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dup
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:173,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:174,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:175,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:178,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:178,1
    - Dst: brpc::SocketUniquePtr::ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:181,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - msg
    - expect
    - local_port
    argTypes:
    - brpc::InputMessageBase*
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 182
    functionName: HttpTest::VerifyMessageFromLocalPort
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - EXPECT_EQ
    - Socket::Create
    - brpc::policy::VerifyHttpRequest
    - dup
    - butil::my_ip
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::ReAddress
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: "void VerifyMessageFromLocalPort(brpc::InputMessageBase* msg,\n                                    bool
      expect,\n                                    int local_port)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:187,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:190,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:192,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: HttpTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:198,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:199,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:200,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:201,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:204,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:206,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 208
    functionName: HttpTest::MakePostRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::body
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - json2pb::ProtoMessageToJson
    - brpc::policy::HttpContext*::header
    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:211,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:212,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:213,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:214,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:217,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:218,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:221,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 223
    functionName: HttpTest::MakePostProtoJsonRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::body
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::HttpContext*::header
    - json2pb::ProtoMessageToProtoJson
    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:227,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:228,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:229,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:230,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:233,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:234,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:235,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 237
    functionName: HttpTest::MakePostProtoTextRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::body
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::HttpContext*::header
    - brpc::URI::Print
    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:240,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:241,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 244
    functionName: HttpTest::MakeGetRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext*::header
    - brpc::policy::HttpContext::HttpContext
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakeGetRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - channel
    - ' ep'
    - ' connection_group'
    argTypes:
    - brpc::Channel*
    - butil::EndPoint
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 255
    functionName: HttpTest::InitHttpPooledChannel
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel*::Init
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: "void InitHttpPooledChannel(brpc::Channel* channel,\n                               const
      butil::EndPoint& ep,\n                               const std::string& connection_group)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:258,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:259,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - channel
    - cntl
    argTypes:
    - brpc::Channel*
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 261
    functionName: HttpTest::CallVersion
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    - brpc::Channel*::CallMethod
    linkageType: ''
    returnType: void
    signature: void CallVersion(brpc::Channel* channel, brpc::Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - 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::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:268,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:269,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - channel
    - cntl
    argTypes:
    - brpc::Channel*
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 271
    functionName: HttpTest::CallHttpEcho
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    - brpc::Channel*::CallMethod
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void CallHttpEcho(brpc::Channel* channel, brpc::Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:275,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:276,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:277,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:280,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:281,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:282,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 284
    functionName: HttpTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::set_message
    - brpc::policy::HttpContext::HttpContext
    - EXPECT_TRUE
    - brpc::policy::HttpContext*::body
    - json2pb::ProtoMessageToJson
    - brpc::policy::HttpContext*::header
    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:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:290,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:294,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:296,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:297,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:299,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:300,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:300,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:302,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:304,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:304,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:305,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 306
    functionName: HttpTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - static_cast<brpc::policy::HttpContext*>
    - EXPECT_EQ
    - EXPECT_GT
    - brpc::policy::HttpContext*::header
    - brpc::policy::ParseHttpMessage
    - ioctl
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - brpc::policy::HttpContext*::Destroy
    - get
    - 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:309,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:311,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:312,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:313,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:314,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:314,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:315,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:318,1
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:318,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:320,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,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: 323
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 323
    functionName: HttpTest::MakeH2EchoRequestBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::Controller*::Failed
    - get
    - ASSERT_TRUE
    - butil::Status::ok
    - brpc::Controller*::call_id
    - test::EchoRequest::set_message
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::policy::PackH2Request
    - brpc::policy::SerializeHttpRequest
    - brpc::Controller*::http_request
    - butil::IOBuf::IOBuf
    - brpc::policy::H2UnsentRequest::New
    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:326,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:328,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:329,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:331,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:332,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:332,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:335,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:336,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - h2_stream_id
    argTypes:
    - butil::IOBuf*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 337
    functionName: HttpTest::MakeH2EchoResponseBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::set_message
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - brpc::Controller::http_request
    - butil::Status::ok
    - EXPECT_TRUE
    - brpc::policy::H2UnsentResponse::New
    - brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
    - get
    - test::EchoResponse::SerializeToZeroCopyStream
    linkageType: ''
    returnType: void
    signature: void MakeH2EchoResponseBuf(butil::IOBuf* out, int h2_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:351,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:352,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:355,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:356,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:358,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:358,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:359,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:361,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:362,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:363,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 364
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - EXPECT_NE
    - butil::IOBuf::append
    - butil::IOPortal::append_from_file_descriptor
    - butil::IOPortal::to_string
    - ASSERT_EQ
    - ioctl
    - brpc::ParseResult::error
    - ASSERT_GT
    - get
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseHttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, reject_oversized_http_body)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:369,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:370,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:374,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:375,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:377,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:377,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:378,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:380,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:381,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:382,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:382,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 383
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - EXPECT_NE
    - butil::IOBuf::append
    - butil::IOPortal::append_from_file_descriptor
    - butil::IOPortal::to_string
    - ASSERT_EQ
    - ioctl
    - brpc::ParseResult::error
    - ASSERT_GT
    - get
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseHttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, reject_oversized_chunked_http_body)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:387,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:388,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:389,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 391
    functionName: AllocateFreePortOrDie
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - tcp_listen
    - EXPECT_EQ
    - butil::get_local_side
    - butil::my_ip
    - butil::EndPoint::EndPoint
    - EXPECT_GE
    linkageType: ''
    returnType: int
    signature: int AllocateFreePortOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:400,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:403,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 404
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - ASSERT_EQ
    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:408,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:411,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:411,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:411,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:414,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:416,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:416,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:417,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:417,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:418,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:421,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:423,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:423,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:425,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:426,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:429,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:430,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:430,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:433,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:434,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 437
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - EXPECT_EQ
    - endpoint2str
    - butil::ip2str
    - std::string
    - brpc::policy::ParseHttpServerAddress
    - butil::EndPoint::EndPoint
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:442,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:443,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:444,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:447,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:448,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:449,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:452,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:453,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:454,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:455,1
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:459,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:460,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:461,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:462,1
    - Dst: MakePostProtoJsonRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:466,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:467,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:468,1
    - Dst: MakePostProtoTextRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:472,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:473,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 476
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - MakePostProtoTextRequestMessage
    - MakePostProtoJsonRequestMessage
    - MakePostRequestMessage
    - brpc::policy::HttpContext*::Destroy
    - VerifyMessage
    - brpc::policy::HttpContext*::header
    - MakeGetRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, verify_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:481,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:482,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:483,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:486,1
    - Dst: VerifyMessageFromLocalPort
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:487,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 490
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext*::Destroy
    - VerifyMessage
    - MakeGetRequestMessage
    - VerifyMessageFromLocalPort
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, verify_builtin_request_on_internal_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:497,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:497,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:499,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:501,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:502,1
    - Dst: AllocateFreePortOrDie
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:505,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:506,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:506,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:511,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:517,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:518,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:519,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:521,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:522,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:522,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:523,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:523,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:527,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:533,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:534,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:535,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:536,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:537,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:537,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:538,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:538,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:543,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:544,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:550,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:551,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:551,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:553,1
    - Dst: CallVersion
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:554,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:555,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:556,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:556,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:557,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:557,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:559,1
    - Dst: CallHttpEcho
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:560,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:561,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:564,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:565,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 492
    functionDepth: 2
    functionLinenumber: 492
    functionLinenumberEnd: 567
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - CallHttpEcho
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - AllocateFreePortOrDie
    - MyAuthenticator::MyAuthenticator
    - CallVersion
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, builtin_auth_policy_on_public_and_internal_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:570,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:571,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:573,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:573,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 575
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - ProcessMessage
    - MakePostRequestMessage
    - CheckResponseCode
    - ASSERT_EQ
    - _nerror_bvar::get_value
    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:578,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:581,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:581,1
    - Dst: FindMethodPropertyByFullName
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:583,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:584,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:586,1
    - Dst: brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:586,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:587,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 588
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - CheckResponseCode
    - FindMethodPropertyByFullName
    - ASSERT_EQ
    - brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
    - _nerror_bvar::get_value
    - MakeGetRequestMessage
    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:591,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:594,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:594,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 596
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ProcessMessage
    - MakePostRequestMessage
    - CheckResponseCode
    - ASSERT_EQ
    - _nerror_bvar::get_value
    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:599,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:601,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:601,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:602,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 603
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ProcessMessage
    - MakePostRequestMessage
    - CheckResponseCode
    - ASSERT_EQ
    - _nerror_bvar::get_value
    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:607,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:610,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:611,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:611,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:613,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:614,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:614,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 615
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_correlation_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:619,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:620,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:620,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:622,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:624,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:625,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:625,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:628,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:629,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:629,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:631,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:633,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:634,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:635,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:638,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:639,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:639,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:641,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:643,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:644,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:645,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:648,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:649,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:649,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:650,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:652,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:652,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:653,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 655
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_correlation_id
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - brpc::Controller::http_response
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:659,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:660,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:669,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:670,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:671,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:671,1
    - Dst: brpc::policy::PackHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:672,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:675,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:675,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:679,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:679,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:680,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:680,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:681,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:682,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:683,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:686,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:687,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:691,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:692,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:694,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:694,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 696
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 696
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::policy::PackHttpRequest
    - test::EchoRequest::set_message
    - get
    - id
    - brpc::Controller::call_id
    - ProcessMessage
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - VerifyMessage
    - brpc::policy::ParseHttpMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - brpc::policy::SerializeHttpRequest
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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:700,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:708,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:711,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:712,1
    - Dst: system
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:712,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:712,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:716,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:718,1
    - Dst: fgets
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:718,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:719,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:719,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 698
    functionDepth: 1
    functionLinenumber: 698
    functionLinenumberEnd: 720
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - EXPECT_EQ
    - std::string::c_str
    - brpc::Server::AddService
    - brpc::Server::Start
    - ASSERT_TRUE
    - std::string
    - ASSERT_EQ
    - system
    - butil::string_printf
    - 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:732,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - seq_no
    argTypes:
    - char*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 734
    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: 744
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 744
    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:752,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:753,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:754,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:757,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:759,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:763,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:765,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:768,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:769,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:773,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:787,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:787,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:788,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:790,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: 792
      start: 746
    functionDepth: 1
    functionLinenumber: 746
    functionLinenumberEnd: 792
    functionName: DownloadServiceImpl::Download
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CreateProgressiveAttachment
    - bthread_usleep
    - brpc::Controller*::SetFailed
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::intrusive_ptr::reset
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::get
    - LOG
    - CopyPAPrefixedWithSeqNo
    - butil::intrusive_ptr::Write
    - LOG_EVERY_SECOND
    - ASSERT_GT
    - brpc::Controller*::http_response
    - brpc::ClosureGuard::reset
    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:800,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:801,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:802,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:805,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:807,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:812,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:814,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:814,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:815,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:826,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:827,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:832,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: 833
      start: 794
    functionDepth: 1
    functionLinenumber: 794
    functionLinenumberEnd: 833
    functionName: DownloadServiceImpl::DownloadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CreateProgressiveAttachment
    - bthread_usleep
    - brpc::Controller*::SetFailed
    - CHECK_LT
    - butil::BaseIteratorRangeToNumberTraits::max
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::Write
    - LOG_EVERY_SECOND
    - CHECK_EQ
    - brpc::Controller*::http_response
    - brpc::ClosureGuard::reset
    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: 835
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 835
    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: 836
      start: 836
    functionDepth: 0
    functionLinenumber: 836
    functionLinenumberEnd: 836
    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: 837
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 837
    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: 838
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 838
    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:850,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:851,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:852,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:852,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:853,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:853,1
    - Dst: DownloadServiceImpl::set_done_place
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:856,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:857,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:858,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:861,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:862,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:864,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:864,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:864,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:867,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:868,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:868,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 870
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 870
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - CopyPAPrefixedWithSeqNo
    - DownloadServiceImpl::set_done_place
    - brpc::ChannelOptions::ChannelOptions
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Server::AddService
    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:874,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:875,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:876,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:876,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:877,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:877,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:879,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:880,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:884,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:885,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:886,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:887,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:889,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:889,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:890,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:890,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:891,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:893,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:894,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:894,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 895
      start: 872
    functionDepth: 1
    functionLinenumber: 872
    functionLinenumberEnd: 895
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - EXPECT_TRUE
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Server::AddService
    - ASSERT_NE
    - brpc::Controller::response_will_be_read_progressively
    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:904,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 900
    functionDepth: 0
    functionLinenumber: 900
    functionLinenumberEnd: 905
    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:910,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:910,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:910,1
    - Dst: append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:911,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:914,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:920,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 907
    functionDepth: 1
    functionLinenumber: 907
    functionLinenumberEnd: 924
    functionName: ReadBody::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Status::OK
    - clear
    - std::min
    - CopyPAPrefixedWithSeqNo
    - append
    - data
    - memcmp
    - size
    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:926,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:927,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:931,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 925
    functionDepth: 1
    functionLinenumber: 925
    functionLinenumberEnd: 932
    functionName: ReadBody::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - ASSERT_LT
    - data
    - memcmp
    - size
    - butil::intrusive_ptr<ReadBody>
    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: 933
      start: 933
    functionDepth: 0
    functionLinenumber: 933
    functionLinenumberEnd: 933
    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: 934
      start: 934
    functionDepth: 0
    functionLinenumber: 934
    functionLinenumberEnd: 934
    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: 935
      start: 935
    functionDepth: 0
    functionLinenumber: 935
    functionLinenumberEnd: 935
    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:953,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:957,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:957,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:958,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:958,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:960,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:965,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:966,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:967,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:968,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:970,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:970,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:971,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:971,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:972,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:972,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:975,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:977,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:985,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:985,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:988,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:991,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:991,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:994,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:995,1
    - Dst: butil::intrusive_ptr::destroyed
      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:996,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:996,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 997
      start: 950
    functionDepth: 1
    functionLinenumber: 950
    functionLinenumberEnd: 997
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1000,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1002,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1006,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1006,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1008,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1013,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1014,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1015,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1016,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1017,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1017,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1017,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1020,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1020,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1023,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1025,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1029,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1029,1
    - Dst: ASSERT_EQ
      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:1032,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1035
      start: 999
    functionDepth: 1
    functionLinenumber: 999
    functionLinenumberEnd: 1035
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - DownloadServiceImpl::written_bytes
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1040,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1043,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1044,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1044,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1045,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1045,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1047,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1048,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1052,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1053,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1054,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1055,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1056,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1056,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1057,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1057,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1058,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1058,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1059,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1059,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1063,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1064,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1065,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1070,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1074,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1075,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1075,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1078,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1079,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1080,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1080,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1081
      start: 1037
    functionDepth: 1
    functionLinenumber: 1037
    functionLinenumberEnd: 1081
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1084,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1089,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1090,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1090,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1091,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1091,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1093,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1098,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1099,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1100,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1102,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1102,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1103,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1103,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1104,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1106,1
    - Dst: DownloadServiceImpl::ever_full
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1107,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1107,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1108,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1108,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1109,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1109,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1112,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1113,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1114,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1119,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1121,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1121,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1129,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1130,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1131
      start: 1083
    functionDepth: 1
    functionLinenumber: 1083
    functionLinenumberEnd: 1131
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - LOG
    - butil::intrusive_ptr::get
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - EXPECT_TRUE
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - DownloadServiceImpl::ever_full
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1138,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1139,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1139,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1140,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1145,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1146,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1147,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1148,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1150,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1150,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1152,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1153,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1154,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1156,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1156,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1157,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1160
      start: 1133
    functionDepth: 1
    functionLinenumber: 1133
    functionLinenumberEnd: 1160
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - DownloadServiceImpl::written_bytes
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1165
    functionDepth: 1
    functionLinenumber: 1165
    functionLinenumberEnd: 1167
    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:1169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1168
    functionDepth: 1
    functionLinenumber: 1168
    functionLinenumberEnd: 1171
    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:1176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1179,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1180,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1180,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1181,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1186,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1187,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1189,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1191,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1191,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1192,1
    - Dst: AlwaysFailRead::AlwaysFailRead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1192,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1194,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1195,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1196,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1197
      start: 1174
    functionDepth: 1
    functionLinenumber: 1174
    functionLinenumberEnd: 1197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - AlwaysFailRead::AlwaysFailRead
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_NE
    - brpc::Controller::response_will_be_read_progressively
    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:1200,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1205,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1206,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1206,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1208,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1213,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1214,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1215,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1218,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1218,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1219,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1219,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1220,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1220,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1223,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1224,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1225,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1230,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1233,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1234,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1235,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1236,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1240,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1241,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1241,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1242
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Stop
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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: 1252
      start: 1250
    functionDepth: 0
    functionLinenumber: 1250
    functionLinenumberEnd: 1252
    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:1256,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1262,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1264
      start: 1255
    functionDepth: 1
    functionLinenumber: 1255
    functionLinenumberEnd: 1264
    functionName: ServerProgressiveReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - response_attachment
    - ASSERT_LT
    - data
    - memcmp
    - size
    - butil::intrusive_ptr<ReadBody>
    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: 1274
      start: 1272
    functionDepth: 0
    functionLinenumber: 1272
    functionLinenumberEnd: 1274
    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:1278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1277
    functionDepth: 1
    functionLinenumber: 1277
    functionLinenumberEnd: 1279
    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:1283,1
    - Dst: error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1283,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1284,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1287
      start: 1281
    functionDepth: 1
    functionLinenumber: 1281
    functionLinenumberEnd: 1287
    functionName: ServerAlwaysFailReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - error_code
    - SetFailed
    - LOG
    - CHECK_EQ
    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:1299,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1300,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1301,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1302,1
    - Dst: ServerProgressiveReader::ServerProgressiveReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1302,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: 1303
      start: 1295
    functionDepth: 1
    functionLinenumber: 1295
    functionLinenumberEnd: 1303
    functionName: UploadServiceImpl::Upload
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ReadProgressiveAttachmentBy
    - static_cast<brpc::Controller*>
    - brpc::Controller*::request_will_be_read_progressively
    - ServerProgressiveReader::ServerProgressiveReader
    - UploadServiceImpl::check_header
    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:1309,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1310,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1311,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,1
    - Dst: ServerAlwaysFailReader::ServerAlwaysFailReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,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: 1313
      start: 1305
    functionDepth: 1
    functionLinenumber: 1305
    functionLinenumberEnd: 1313
    functionName: UploadServiceImpl::UploadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ReadProgressiveAttachmentBy
    - ServerAlwaysFailReader::ServerAlwaysFailReader
    - static_cast<brpc::Controller*>
    - brpc::Controller*::request_will_be_read_progressively
    - UploadServiceImpl::check_header
    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:1317,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1318,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1320
      start: 1316
    functionDepth: 1
    functionLinenumber: 1316
    functionLinenumberEnd: 1320
    functionName: UploadServiceImpl::check_header
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 2
    functionsReached:
    - brpc::Controller*::http_request
    - CHECK
    - CHECK_EQ
    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:1325,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1329,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1330,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1330,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1331,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1331,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1333,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1337,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1338,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1339,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1340,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1342,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1345,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1346,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1348,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1348,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1350,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1356,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1357,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1357,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1358
      start: 1323
    functionDepth: 1
    functionLinenumber: 1323
    functionLinenumberEnd: 1358
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - CopyPAPrefixedWithSeqNo
    - brpc::Controller::request_attachment
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    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:1364,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1368,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1370,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1370,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1372,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1376,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1377,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1378,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1379,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1381,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1384,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1385,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1387,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1387,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1389,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1395,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1396,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1396,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1397
      start: 1362
    functionDepth: 1
    functionLinenumber: 1362
    functionLinenumberEnd: 1397
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - CopyPAPrefixedWithSeqNo
    - brpc::Controller::request_attachment
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    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:1402,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1403,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1404,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1404,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1406,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1413,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1417,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1418,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1419,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1420,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1421,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1422,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1422,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1428,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1430,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1431,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1432,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1433,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1434,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1435,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1436,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1442,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1442,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1443,1
    - Dst: brpc::SocketUniquePtr::GetAgentSocket
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1443,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1444,1
    - Dst: brpc::SocketUniquePtr::parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1444,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: brpc::policy::H2Context*::_remote_window_left::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1447
      start: 1400
    functionDepth: 1
    functionLinenumber: 1400
    functionLinenumberEnd: 1447
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context*::_remote_window_left::load
    - brpc::SocketUniquePtr::GetAgentSocket
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - static_cast<brpc::policy::H2Context*>
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::SetTrackMeAddress
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - brpc::SocketUniquePtr::parsing_context
    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:1451,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1454,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1456,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1458,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1460,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1462,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1463,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1465,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1468,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1469,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1469,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1471,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1471,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1472,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1449
    functionDepth: 1
    functionLinenumber: 1449
    functionLinenumberEnd: 1473
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoRequestBuf
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - MakeH2EchoResponseBuf
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - brpc::policy::ParseH2Message
    - get
    - butil::IOBuf::IOBuf
    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: 1481
      start: 1475
    functionDepth: 0
    functionLinenumber: 1475
    functionLinenumberEnd: 1481
    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:1484,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1486,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1488,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1490,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1492,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1493,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1494,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1495,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1498,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1498,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1499,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1499,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1501,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1501,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1502,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1503,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1503,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1504,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1505
      start: 1483
    functionDepth: 1
    functionLinenumber: 1483
    functionLinenumberEnd: 1505
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoRequestBuf
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - MakeH2EchoResponseBuf
    - brpc::ParseResult::is_ok
    - SaveUint32
    - brpc::Controller::http_response
    - brpc::ParseResult::message
    - brpc::policy::ParseH2Message
    - get
    - butil::IOBuf::IOBuf
    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:1508,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1510,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1512,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1514,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1515,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1517,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1518,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1519,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1523,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1523,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1525,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1525,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1526,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1526,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1527,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1527,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1528
      start: 1507
    functionDepth: 1
    functionLinenumber: 1507
    functionLinenumberEnd: 1528
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoRequestBuf
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::Failed
    - MakeH2EchoResponseBuf
    - butil::IOBuf::append
    - brpc::ParseResult::is_ok
    - SaveUint32
    - brpc::Controller::http_response
    - brpc::ParseResult::message
    - brpc::policy::ParseH2Message
    - get
    - butil::IOBuf::IOBuf
    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:1531,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1532,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1535,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1536,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1537,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1538,1
    - Dst: brpc::H2Settings::H2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1541,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1542,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1543,1
    - Dst: butil::IOBuf::IOBuf
      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: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1546,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1546,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1548,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1550,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1553,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1553,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1555,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1556,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1556,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1559,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1559,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1560,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1560,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1561,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1561,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1561,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1563,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1563,1
    - Dst: brpc::policy::H2UnsentRequest*::DestroyStreamUserData
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1565,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1530
    functionDepth: 1
    functionLinenumber: 1530
    functionLinenumberEnd: 1567
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - brpc::policy::SerializeFrameHead
    - brpc::policy::PackH2Request
    - butil::Status::error_str
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - butil::Status::ok
    - test::EchoRequest::set_message
    - brpc::policy::ParseH2Message
    - butil::Status::error_code
    - brpc::H2Settings::H2Settings
    - get
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::Controller::call_id
    - brpc::Controller::http_request
    - butil::IOBuf::append
    - brpc::Controller::request_attachment
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::H2UnsentRequest*::DestroyStreamUserData
    - brpc::policy::SerializeHttpRequest
    - butil::IOBuf::IOBuf
    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:1571,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1575,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1576,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1577,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1578,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1580,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1580,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1582,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1585,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1585,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1587,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1588,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1588,1
    - Dst: brpc::policy::H2Context*::ConsumeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1592,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1593,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1594,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1595,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1596,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1597,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1599
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1599
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - brpc::policy::H2Context::H2Context
    - brpc::policy::SerializeH2Settings
    - brpc::policy::SerializeFrameHead
    - brpc::policy::H2Context*::Init
    - initialize_parsing_context
    - ASSERT_TRUE
    - butil::IOBuf::append
    - brpc::policy::ParseH2Message
    - CHECK_EQ
    - brpc::policy::H2Context*::ConsumeFrameHead
    - brpc::H2Settings::H2Settings
    - get
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1605,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1616,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1617,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1621,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1621,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1622,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1628,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1601
    functionDepth: 1
    functionLinenumber: 1601
    functionLinenumberEnd: 1629
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::H2Context
    - brpc::policy::SerializeFrameHead
    - brpc::policy::H2Context*::Init
    - initialize_parsing_context
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::policy::ParseH2Message
    - CHECK_EQ
    - get
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_goaway_with_debug_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1633,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1636,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1636,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1639,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1643,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1643,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1646,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1650,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1650,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1631
    functionDepth: 1
    functionLinenumber: 1631
    functionLinenumberEnd: 1652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::Start
    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:1656,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1657,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1657,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1658,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1658,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1659,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1660,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1666,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1669,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1670,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1671,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1672,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1673,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1674,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1679,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1682,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1684,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1685,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1686,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1687,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1687,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1690,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1691,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1697,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1698,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1699,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1700,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1701,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1701,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1703,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1704,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1706
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1706
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::_agent_socket_id::load
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::SetTrackMeAddress
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::set_timeout_ms
    - test::EchoResponse::message
    - brpc::Server::AddService
    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:1709,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1712,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1714,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1717,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1719,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1721,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1727,1
    - Dst: parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1727,1
    - Dst: brpc::policy::H2Context*::hpacker
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1728,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1729,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1735,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1739,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1739,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1740,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1744,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1748,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1752,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1754,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1755,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1758,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1758,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1761,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1764,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1764,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1767,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1768,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1768,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1770,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1773,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1777,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1779,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1780,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1782,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1782,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1786,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1787,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1787,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1791,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1791,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1792,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1792,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1794,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1794,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1795,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1795,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1798,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1798,1
    - Dst: GetHeader
      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:1801,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1803,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1804
      start: 1708
    functionDepth: 1
    functionLinenumber: 1708
    functionLinenumberEnd: 1804
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::set_message
    - brpc::policy::SerializeFrameHead
    - butil::IOBufAppender::move_to
    - ASSERT_EQ
    - brpc::ParseResult::message
    - butil::IOBuf::size
    - test::EchoResponse::SerializeToZeroCopyStream
    - butil::IOBufAppender::IOBufAppender
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::http_response
    - brpc::ParseResult::is_ok
    - EXPECT_TRUE
    - brpc::policy::ParseH2Message
    - get
    - content_type
    - MakeH2EchoRequestBuf
    - static_cast<brpc::policy::H2Context*>
    - brpc::policy::H2Context*::hpacker
    - ProcessMessage
    - parsing_context
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::Movable
    - brpc::HPackOptions::HPackOptions
    - Encode
    - GetHeader
    - butil::string_printf
    - butil::IOBuf::IOBuf
    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:1807,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1809,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1811,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1813,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1814,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1817,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1818,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1819,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1820,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1823,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1823,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1827,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1827,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1830,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1831,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1831,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1834,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1837,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1837,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1839,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1840,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1841,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1841,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1842,1
    - Dst: butil::Status::error_data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1842,1
    - Dst: brpc::policy::H2UnsentRequest*::DestroyStreamUserData
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1845,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1846
      start: 1806
    functionDepth: 2
    functionLinenumber: 1806
    functionLinenumberEnd: 1846
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoResponseBuf
    - ASSERT_EQ
    - brpc::ParseResult::message
    - brpc::policy::PackH2Request
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::ParseResult::is_ok
    - SaveUint32
    - brpc::policy::ParseH2Message
    - butil::Status::error_code
    - get
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::Controller::call_id
    - MakeH2EchoRequestBuf
    - ProcessMessage
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::Status::error_data
    - SnappyDecompressIOBuf
    - brpc::ParseResult::error
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::H2UnsentRequest*::DestroyStreamUserData
    - butil::IOBuf::IOBuf
    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:1851,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1853
      start: 1850
    functionDepth: 0
    functionLinenumber: 1850
    functionLinenumberEnd: 1853
    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:1860,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1862,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: AfterRecevingGoAway::AfterRecevingGoAway
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1870,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1872,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1872,1
    - Dst: set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1873,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1874,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1875,1
    - Dst: accept
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1878,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1879,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1881,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1883,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1884,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1886,1
    - Dst: need_shutdown_write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1886,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1890,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1892
      start: 1857
    functionDepth: 1
    functionLinenumber: 1857
    functionLinenumberEnd: 1892
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - AfterRecevingGoAway::AfterRecevingGoAway
    - bthread_usleep
    - std::vector::push_back
    - SerializeFrameHead
    - http_request
    - call_id
    - brpc::Join
    - brpc::Channel::CallMethod
    - need_shutdown_write
    - ASSERT_EQ
    - SaveUint32
    - brpc::Channel::Channel
    - ASSERT_GT
    - set_timeout_ms
    - brpc::ChannelOptions::ChannelOptions
    - accept
    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:1896,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1897,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1897,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1898,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1898,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1900,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1901,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1905,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1908,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1909,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1910,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1911,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1912,1
    - Dst: test::EchoRequest::SerializeAsString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1912,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1913,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1914,1
    - Dst: brpc::Controller::Failed
      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:1915,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1915,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: test::EchoResponse::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1917,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1917,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1919,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1921,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1922,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1923,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: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1925,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1926,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1926,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1927
      start: 1894
    functionDepth: 1
    functionLinenumber: 1894
    functionLinenumberEnd: 1927
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - test::EchoResponse::ParseFromString
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoRequest::SerializeAsString
    - test::EchoService_Stub::Echo
    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:1943,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1944,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1944,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1947,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1948,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1957,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1957,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1959,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1960,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1961,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1962,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1963,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1964,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1965,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1965,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1968,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1974,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1975,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1980,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1980,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1981,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1982,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1982,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1983,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1984,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1985,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1985,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1987,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1988,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1989,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1989,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1991,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1992,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1993,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1993,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1995,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1998,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1999,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1999,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2003,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2003,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2011
      start: 1929
    functionDepth: 1
    functionLinenumber: 1929
    functionLinenumberEnd: 2011
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::release
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - json2pb::ProtoMessageToJson
    - brpc::Channel::CallMethod
    - butil::DeleteFile
    - brpc::Channel::Init
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::reset_sampled_request
    - brpc::HttpMessage::body
    - brpc::HttpMessage::HttpMessage
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::SampleIterator::Next
    - brpc::Server::Start
    - butil::FilePath
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::HttpMessage::header
    - test::EchoResponse::message
    - brpc::Server::AddService
    - ASSERT_NE
    - brpc::SampledRequest*::meta::protocol_type
    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:2015,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2016,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2016,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2017,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2017,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2019,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2024,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2027,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2028,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2029,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2030,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2032,1
    - Dst: google::protobuf::TextFormat::PrintToString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2032,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2033,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2034,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2035,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2035,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: google::protobuf::TextFormat::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2038,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2039,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2039,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2042,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2043,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2044,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2045,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2047,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2047,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2048,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2048,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2049
      start: 2013
    functionDepth: 1
    functionLinenumber: 2013
    functionLinenumberEnd: 2049
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - google::protobuf::TextFormat::PrintToString
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - google::protobuf::TextFormat::ParseFromString
    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:2053,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2055,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2055,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2057,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2062,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2065,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2066,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2067,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2068,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2070,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2071,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2071,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2072,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2073,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2073,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2074,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2074,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2077,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2078,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2078,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2079,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2079,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2082,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2083,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2084,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2085,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2086,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2086,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2087,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2088,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2088,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2089
      start: 2051
    functionDepth: 1
    functionLinenumber: 2051
    functionLinenumberEnd: 2089
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - json2pb::ProtoMessageToProtoJson
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - json2pb::ProtoJsonToProtoMessage
    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:2098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2099,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2099,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2100,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2103,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2103,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2104,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2106,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2109,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: 2112
      start: 2093
    functionDepth: 1
    functionLinenumber: 2093
    functionLinenumberEnd: 2112
    functionName: HttpServiceImpl::Head
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_NE
    - static_cast<brpc::Controller*>
    - ASSERT_EQ
    - brpc::Controller*::http_request
    - brpc::Controller*::http_response
    - butil::StringToInt
    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:2119,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2123,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2123,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2124,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: 2125
      start: 2114
    functionDepth: 0
    functionLinenumber: 2114
    functionLinenumberEnd: 2125
    functionName: HttpServiceImpl::Expect
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - ASSERT_EQ
    - 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:2130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2132,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2133,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2133,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2135,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2140,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2141,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2142,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2143,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2143,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2144,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2149,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2151,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2154,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2156,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2159
      start: 2128
    functionDepth: 1
    functionLinenumber: 2128
    functionLinenumberEnd: 2159
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::IntToString
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_NE
    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:2166,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2167,1
    - Dst: brpc::HttpHeader*::method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2167,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2168,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2169,1
    - Dst: brpc::HttpHeader*::major_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2170,1
    - Dst: brpc::HttpHeader*::minor_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2171,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2181,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2183,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2184,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2185,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2186,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2193,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2194,1
    - Dst: brpc::HttpHeader*::HeaderBegin
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2197,1
    - Dst: brpc::HttpHeader*::HeaderEnd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2198,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2201,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2205,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2208,1
    - Dst: empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2215,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2219,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: 2220
      start: 2163
    functionDepth: 1
    functionLinenumber: 2163
    functionLinenumberEnd: 2220
    functionName: MakeHttpRequestHeaders
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpHeader*::GetHeader
    - brpc::HttpHeader*::minor_version
    - port
    - HttpMethod2Str
    - brpc::HttpHeader*::major_version
    - butil::Base64Encode
    - brpc::HttpHeader*::uri
    - butil::IOBufBuilder::move_to
    - host
    - brpc::HttpHeader*::HeaderBegin
    - brpc::HttpHeader*::method
    - PrintWithoutHost
    - empty
    - brpc::HttpHeader*::content_type
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::HttpHeader*::HeaderEnd
    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:2227,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2227,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2229,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2229,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2229,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2232,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2233,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2235,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2235,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2236,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2237,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2237,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2238,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2240,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2240,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2241,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2244,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2244,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2245,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2245,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2245,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2246,1
    - Dst: reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2247,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2247,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2251,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2251,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: 2252
      start: 2224
    functionDepth: 1
    functionLinenumber: 2224
    functionLinenumberEnd: 2252
    functionName: ReadOneResponse
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - bthread_fd_wait
    - LOG
    - ASSERT_EQ
    - brpc::ParseResult::message
    - ASSERT_TRUE
    - brpc::ParseResult::is_ok
    - get
    - static_cast<brpc::policy::HttpContext*>
    - butil::cpuwide_time_us
    - brpc::ParseResult::error
    - reset
    - brpc::policy::ParseHttpMessage
    - bthread_usleep
    - fd
    - butil::IOPortal::empty
    - butil::ToPrintableString
    - ASSERT_LT
    - butil::IOPortal::append_from_file_descriptor
    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:2256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2258,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2259,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2259,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2262,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2266,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2268,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2268,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2270,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2271,1
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2272,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2273,1
    - Dst: brpc::HttpHeader::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2274,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2275,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2276,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2276,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2276,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2277,1
    - Dst: MakeHttpRequestHeaders
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2278,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2279,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2279,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2283,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2283,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2284,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2285,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2286,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2287,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2287,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2292,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2294,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2294,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2297,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2299,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2299,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2302,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2302,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2303
      start: 2254
    functionDepth: 2
    functionLinenumber: 2254
    functionLinenumberEnd: 2303
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadOneResponse
    - LOG
    - ASSERT_EQ
    - butil::IOBuf::size
    - brpc::SocketUniquePtr::Write
    - Socket::Create
    - brpc::HttpHeader::uri
    - brpc::HttpHeader::set_method
    - MakeHttpRequestHeaders
    - std::to_string
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::SocketUniquePtr::fd
    - brpc::Server::Start
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - butil::EndPoint::EndPoint
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::HttpHeader
    - brpc::DestroyingPtr::header
    - bthread_usleep
    - brpc::Server::AddService
    - butil::ToPrintableString
    - butil::str2endpoint
    - ASSERT_LT
    - butil::IOBuf::IOBuf
    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:2326,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2327,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2327,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2328,1
    - Dst: brpc::policy::H2StreamContext::H2StreamContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2331,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2332,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2333,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2334,1
    - Dst: brpc::policy::H2StreamContext*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2337,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2341,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2346,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2347,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2351,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2352,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2356,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2356,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2360,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2361,1
    - Dst: std::string::length
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2361,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2367,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2368,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2368,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2369,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2369,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2370,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2370,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2371,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2371,1
    - Dst: brpc::policy::H2StreamContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2378
      start: 2306
    functionDepth: 1
    functionLinenumber: 2306
    functionLinenumberEnd: 2378
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - brpc::policy::H2Context*::Init
    - butil::IOPortal::to_string
    - ASSERT_EQ
    - std::string::length
    - ioctl
    - brpc::policy::H2Context::H2Context
    - brpc::policy::H2StreamContext*::header
    - EXPECT_GT
    - EXPECT_TRUE
    - get
    - EXPECT_FALSE
    - EXPECT_EQ
    - brpc::policy::VerifyHttpRequest
    - initialize_parsing_context
    - brpc::policy::H2StreamContext::H2StreamContext
    - ReAddress
    - brpc::policy::H2StreamContext*::Init
    - std::string::find
    - brpc::policy::H2StreamContext*::Destroy
    - butil::IOPortal::append_from_file_descriptor
    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: 2310
      start: 2310
    functionDepth: 0
    functionLinenumber: 2310
    functionLinenumberEnd: 2310
    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: 2313
      start: 2311
    functionDepth: 0
    functionLinenumber: 2311
    functionLinenumberEnd: 2313
    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: 2316
      start: 2314
    functionDepth: 0
    functionLinenumber: 2314
    functionLinenumberEnd: 2316
    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:2400,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2401,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2402,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2405,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2408,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2409,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2413,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2414,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2417,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2417,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2420,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2420,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2421,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2421,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2422,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2425,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2425,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2426,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2427,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2427,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2430,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2431,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2431,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2432,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2432,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2435,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2436,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2437,1
    - Dst: std::stoi
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2437,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2440,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2443,1
    - Dst: std::string*::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2443,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2446,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2447,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2452
      start: 2381
    functionDepth: 1
    functionLinenumber: 2381
    functionLinenumberEnd: 2452
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - MakePostRequestMessage
    - ioctl
    - brpc::ParseResult::message
    - brpc::policy::HttpContext*::header
    - EXPECT_GT
    - EXPECT_TRUE
    - get
    - EXPECT_FALSE
    - static_cast<brpc::policy::HttpContext*>
    - EXPECT_EQ
    - std::string*::find
    - brpc::policy::VerifyHttpRequest
    - brpc::policy::HttpContext*::body
    - brpc::ParseResult::error
    - brpc::policy::HttpContext*::Destroy
    - VerifyMessage
    - brpc::policy::ParseHttpMessage
    - std::string::find
    - std::stoi
    - butil::IOPortal::append_from_file_descriptor
    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: 2385
      start: 2385
    functionDepth: 0
    functionLinenumber: 2385
    functionLinenumberEnd: 2385
    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: 2388
      start: 2386
    functionDepth: 0
    functionLinenumber: 2386
    functionLinenumberEnd: 2388
    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: 2391
      start: 2389
    functionDepth: 0
    functionLinenumber: 2389
    functionLinenumberEnd: 2391
    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: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 5
    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: 98
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 98
    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:103,1
    - Dst: brpc::AuthContext*::set_user
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' auth_str'
    - ctx
    argTypes:
    - std::string
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 106
    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:117,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:119,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:121,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:121,1
    - Dst: std::string*::data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:121,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:123,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: 124
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - std::string*::data
    - static_cast<brpc::Controller*>
    - strtol
    - brpc::Controller*::http_request
    - ::test::EchoResponse*::set_message
    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:130,1
    - Dst: AddBuiltinServices
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:131,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:131,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:140,1
    - Dst: pipe
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:140,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:145,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:146,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:146,1
    - Dst: brpc::get_client_side_messenger
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:149,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 153
    functionName: HttpTest::HttpTest
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::get_client_side_messenger
    - brpc::SetTrackMeAddress
    - AddBuiltinServices
    - AddService
    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: 155
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 155
    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:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:164,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:164,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - msg
    - expect
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 165
    functionName: HttpTest::VerifyMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - EXPECT_EQ
    - brpc::policy::VerifyHttpRequest
    linkageType: ''
    returnType: void
    signature: void VerifyMessage(brpc::InputMessageBase* msg, bool expect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: dup
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:172,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:173,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:174,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:175,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:178,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:178,1
    - Dst: brpc::SocketUniquePtr::ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:181,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:181,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - msg
    - expect
    - local_port
    argTypes:
    - brpc::InputMessageBase*
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 182
    functionName: HttpTest::VerifyMessageFromLocalPort
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - EXPECT_EQ
    - Socket::Create
    - brpc::policy::VerifyHttpRequest
    - dup
    - butil::my_ip
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::ReAddress
    - EXPECT_GE
    linkageType: ''
    returnType: void
    signature: "void VerifyMessageFromLocalPort(brpc::InputMessageBase* msg,\n                                    bool
      expect,\n                                    int local_port)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:187,1
    - Dst: PostponeEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:190,1
    - Dst: SetEOF
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:192,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - msg
    - set_eof
    argTypes:
    - brpc::InputMessageBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: HttpTest::ProcessMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:198,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:199,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:200,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:201,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:204,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:206,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 208
    functionName: HttpTest::MakePostRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::body
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - json2pb::ProtoMessageToJson
    - brpc::policy::HttpContext*::header
    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:211,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:212,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:213,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:214,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:217,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:218,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:221,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:221,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 210
    functionDepth: 1
    functionLinenumber: 210
    functionLinenumberEnd: 223
    functionName: HttpTest::MakePostProtoJsonRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::body
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::HttpContext*::header
    - json2pb::ProtoMessageToProtoJson
    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:227,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:228,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:229,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:230,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:233,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:234,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:235,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:235,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 237
    functionName: HttpTest::MakePostProtoTextRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext::HttpContext
    - brpc::policy::HttpContext*::body
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::HttpContext*::header
    - brpc::URI::Print
    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:240,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:241,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:242,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' path'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 244
    functionName: HttpTest::MakeGetRequestMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext*::header
    - brpc::policy::HttpContext::HttpContext
    linkageType: ''
    returnType: brpc::policy::HttpContext
    signature: brpc::policy::HttpContext * MakeGetRequestMessage(const std::string&
      path)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - channel
    - ' ep'
    - ' connection_group'
    argTypes:
    - brpc::Channel*
    - butil::EndPoint
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 255
    functionName: HttpTest::InitHttpPooledChannel
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel*::Init
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: "void InitHttpPooledChannel(brpc::Channel* channel,\n                               const
      butil::EndPoint& ep,\n                               const std::string& connection_group)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:258,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:259,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - channel
    - cntl
    argTypes:
    - brpc::Channel*
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 261
    functionName: HttpTest::CallVersion
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    - brpc::Channel*::CallMethod
    linkageType: ''
    returnType: void
    signature: void CallVersion(brpc::Channel* channel, brpc::Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - 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::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:268,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:269,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - channel
    - cntl
    argTypes:
    - brpc::Channel*
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 271
    functionName: HttpTest::CallHttpEcho
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::http_request
    - brpc::Channel*::CallMethod
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void CallHttpEcho(brpc::Channel* channel, brpc::Controller* cntl)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::HttpContext::HttpContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:275,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:276,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:277,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:280,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:281,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:282,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 284
    functionName: HttpTest::MakeResponseMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::set_message
    - brpc::policy::HttpContext::HttpContext
    - EXPECT_TRUE
    - brpc::policy::HttpContext*::body
    - json2pb::ProtoMessageToJson
    - brpc::policy::HttpContext*::header
    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:288,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:290,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:294,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:296,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:297,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:299,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:299,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:300,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:300,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:302,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:302,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:304,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:304,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:305,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - expect_empty
    - expect_code
    argTypes:
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 306
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 306
    functionName: HttpTest::CheckResponseCode
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - static_cast<brpc::policy::HttpContext*>
    - EXPECT_EQ
    - EXPECT_GT
    - brpc::policy::HttpContext*::header
    - brpc::policy::ParseHttpMessage
    - ioctl
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - brpc::policy::HttpContext*::Destroy
    - get
    - 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:309,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:311,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:312,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:313,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:314,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:314,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:315,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:318,1
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:318,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:320,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:320,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:321,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: 323
      start: 308
    functionDepth: 1
    functionLinenumber: 308
    functionLinenumberEnd: 323
    functionName: HttpTest::MakeH2EchoRequestBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::Controller*::Failed
    - get
    - ASSERT_TRUE
    - butil::Status::ok
    - brpc::Controller*::call_id
    - test::EchoRequest::set_message
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::policy::PackH2Request
    - brpc::policy::SerializeHttpRequest
    - brpc::Controller*::http_request
    - butil::IOBuf::IOBuf
    - brpc::policy::H2UnsentRequest::New
    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:326,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:328,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:329,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:331,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:332,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:332,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:334,1
    - Dst: brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:335,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:335,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:336,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - out
    - h2_stream_id
    argTypes:
    - butil::IOBuf*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 337
    functionName: HttpTest::MakeH2EchoResponseBuf
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::set_message
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - brpc::Controller::http_request
    - butil::Status::ok
    - EXPECT_TRUE
    - brpc::policy::H2UnsentResponse::New
    - brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
    - get
    - test::EchoResponse::SerializeToZeroCopyStream
    linkageType: ''
    returnType: void
    signature: void MakeH2EchoResponseBuf(butil::IOBuf* out, int h2_stream_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:351,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:352,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:355,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:356,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:358,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:358,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:359,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:361,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:362,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:363,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 364
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - EXPECT_NE
    - butil::IOBuf::append
    - butil::IOPortal::append_from_file_descriptor
    - butil::IOPortal::to_string
    - ASSERT_EQ
    - ioctl
    - brpc::ParseResult::error
    - ASSERT_GT
    - get
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseHttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, reject_oversized_http_body)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:369,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:370,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:374,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:374,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:375,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:377,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:377,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:378,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:380,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:381,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:382,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:382,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 383
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - EXPECT_NE
    - butil::IOBuf::append
    - butil::IOPortal::append_from_file_descriptor
    - butil::IOPortal::to_string
    - ASSERT_EQ
    - ioctl
    - brpc::ParseResult::error
    - ASSERT_GT
    - get
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseHttpMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, reject_oversized_chunked_http_body)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:386,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:387,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:388,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:389,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 391
    functionName: AllocateFreePortOrDie
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::EndPoint
    - tcp_listen
    - EXPECT_EQ
    - butil::get_local_side
    - butil::my_ip
    - butil::EndPoint::EndPoint
    - EXPECT_GE
    linkageType: ''
    returnType: int
    signature: int AllocateFreePortOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:400,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:403,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 393
    functionDepth: 0
    functionLinenumber: 393
    functionLinenumberEnd: 404
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - ASSERT_EQ
    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:408,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:411,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:411,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:411,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:414,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:416,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:416,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:417,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:417,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:418,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:421,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:423,1
    - Dst: butil::ip2str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:423,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:424,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:425,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:426,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:429,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:430,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:430,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:433,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:434,1
    - Dst: brpc::policy::ParseHttpServerAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 437
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - EXPECT_EQ
    - endpoint2str
    - butil::ip2str
    - std::string
    - brpc::policy::ParseHttpServerAddress
    - butil::EndPoint::EndPoint
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:442,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:443,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:444,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:447,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:448,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:449,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:452,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:453,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:454,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:455,1
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:459,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:460,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:461,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:462,1
    - Dst: MakePostProtoJsonRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:466,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:467,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:468,1
    - Dst: MakePostProtoTextRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:472,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:473,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 476
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - MakePostProtoTextRequestMessage
    - MakePostProtoJsonRequestMessage
    - MakePostRequestMessage
    - brpc::policy::HttpContext*::Destroy
    - VerifyMessage
    - brpc::policy::HttpContext*::header
    - MakeGetRequestMessage
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, verify_request)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:481,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:482,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:483,1
    - Dst: MakeGetRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:486,1
    - Dst: VerifyMessageFromLocalPort
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:487,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:488,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 490
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HttpContext*::Destroy
    - VerifyMessage
    - MakeGetRequestMessage
    - VerifyMessageFromLocalPort
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, verify_builtin_request_on_internal_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:497,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:497,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:499,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:501,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:502,1
    - Dst: AllocateFreePortOrDie
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:505,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:506,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:506,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:507,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:511,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:515,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:517,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:518,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:519,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:521,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:522,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:522,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:523,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:523,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:527,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:531,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:533,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:534,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:535,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:536,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:537,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:537,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:538,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:538,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:543,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:544,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:550,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:551,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:551,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:553,1
    - Dst: CallVersion
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:554,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:555,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:555,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:556,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:556,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:557,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:557,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:559,1
    - Dst: CallHttpEcho
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:560,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:561,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:564,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:564,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:565,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 567
      start: 492
    functionDepth: 2
    functionLinenumber: 492
    functionLinenumberEnd: 567
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - CallHttpEcho
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - AllocateFreePortOrDie
    - MyAuthenticator::MyAuthenticator
    - CallVersion
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, builtin_auth_policy_on_public_and_internal_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MakePostRequestMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:570,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:571,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:573,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:573,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 575
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - ProcessMessage
    - MakePostRequestMessage
    - CheckResponseCode
    - ASSERT_EQ
    - _nerror_bvar::get_value
    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:578,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:581,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:581,1
    - Dst: FindMethodPropertyByFullName
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:583,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:584,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:585,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:586,1
    - Dst: brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:586,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:587,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 588
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ProcessMessage
    - CheckResponseCode
    - FindMethodPropertyByFullName
    - ASSERT_EQ
    - brpc::Server::MethodProperty*::status::_nerror_bvar::get_value
    - _nerror_bvar::get_value
    - MakeGetRequestMessage
    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:591,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:593,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:594,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:594,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 596
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ProcessMessage
    - MakePostRequestMessage
    - CheckResponseCode
    - ASSERT_EQ
    - _nerror_bvar::get_value
    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:599,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:601,1
    - Dst: _nerror_bvar::get_value
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:601,1
    - Dst: CheckResponseCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:602,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 603
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ProcessMessage
    - MakePostRequestMessage
    - CheckResponseCode
    - ASSERT_EQ
    - _nerror_bvar::get_value
    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:607,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:610,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:611,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:611,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:612,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:613,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:614,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:614,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 615
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_correlation_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:619,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:620,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:620,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:622,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:624,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:625,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:625,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:628,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:629,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:629,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:631,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:632,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:633,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:633,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:634,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:635,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:638,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:639,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:639,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:641,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:642,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:643,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:643,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:644,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:645,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:648,1
    - Dst: set_correlation_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:649,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:649,1
    - Dst: MakeResponseMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:650,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:651,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:652,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:652,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:653,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:653,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 655
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - set_correlation_id
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - brpc::Controller::http_response
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:659,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:660,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:665,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:666,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:669,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:670,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:671,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:671,1
    - Dst: brpc::policy::PackHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:672,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:673,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:675,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:675,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:679,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:679,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:680,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:680,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:681,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:682,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:683,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:686,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:687,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:690,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:691,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:692,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:694,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:694,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:695,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 696
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 696
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::policy::PackHttpRequest
    - test::EchoRequest::set_message
    - get
    - id
    - brpc::Controller::call_id
    - ProcessMessage
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - VerifyMessage
    - brpc::policy::ParseHttpMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - brpc::policy::SerializeHttpRequest
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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:700,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:701,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:702,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:708,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:711,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:711,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:712,1
    - Dst: system
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:712,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:712,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:716,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:718,1
    - Dst: fgets
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:718,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:719,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:719,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 720
      start: 698
    functionDepth: 1
    functionLinenumber: 698
    functionLinenumberEnd: 720
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - EXPECT_EQ
    - std::string::c_str
    - brpc::Server::AddService
    - brpc::Server::Start
    - ASSERT_TRUE
    - std::string
    - ASSERT_EQ
    - system
    - butil::string_printf
    - 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:732,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - seq_no
    argTypes:
    - char*
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 731
    functionDepth: 0
    functionLinenumber: 731
    functionLinenumberEnd: 734
    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: 744
      start: 738
    functionDepth: 0
    functionLinenumber: 738
    functionLinenumberEnd: 744
    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:752,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:753,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:754,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:757,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:759,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:763,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:765,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:768,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:769,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:771,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:773,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:787,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:787,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:788,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:790,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: 792
      start: 746
    functionDepth: 1
    functionLinenumber: 746
    functionLinenumberEnd: 792
    functionName: DownloadServiceImpl::Download
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CreateProgressiveAttachment
    - bthread_usleep
    - brpc::Controller*::SetFailed
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::intrusive_ptr::reset
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::get
    - LOG
    - CopyPAPrefixedWithSeqNo
    - butil::intrusive_ptr::Write
    - LOG_EVERY_SECOND
    - ASSERT_GT
    - brpc::Controller*::http_response
    - brpc::ClosureGuard::reset
    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:800,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:801,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:802,1
    - Dst: brpc::Controller*::CreateProgressiveAttachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:805,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:807,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:812,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:814,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:814,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:815,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:826,1
    - Dst: brpc::ClosureGuard::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:827,1
    - Dst: CHECK_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: butil::intrusive_ptr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:831,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:832,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: 833
      start: 794
    functionDepth: 1
    functionLinenumber: 794
    functionLinenumberEnd: 833
    functionName: DownloadServiceImpl::DownloadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::CreateProgressiveAttachment
    - bthread_usleep
    - brpc::Controller*::SetFailed
    - CHECK_LT
    - butil::BaseIteratorRangeToNumberTraits::max
    - static_cast<brpc::Controller*>
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::Write
    - LOG_EVERY_SECOND
    - CHECK_EQ
    - brpc::Controller*::http_response
    - brpc::ClosureGuard::reset
    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: 835
      start: 835
    functionDepth: 0
    functionLinenumber: 835
    functionLinenumberEnd: 835
    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: 836
      start: 836
    functionDepth: 0
    functionLinenumber: 836
    functionLinenumberEnd: 836
    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: 837
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 837
    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: 838
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 838
    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:850,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:851,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:852,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:852,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:853,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:853,1
    - Dst: DownloadServiceImpl::set_done_place
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:856,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:857,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:858,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:860,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:861,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:862,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:863,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:864,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:864,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:864,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:867,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:868,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:868,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 870
      start: 848
    functionDepth: 1
    functionLinenumber: 848
    functionLinenumberEnd: 870
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - CopyPAPrefixedWithSeqNo
    - DownloadServiceImpl::set_done_place
    - brpc::ChannelOptions::ChannelOptions
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Server::AddService
    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:874,1
    - Dst: DownloadServiceImpl::DownloadServiceImpl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:875,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:876,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:876,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:877,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:877,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:879,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:880,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:882,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:884,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:885,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:886,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:887,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:888,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:889,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:889,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:890,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:890,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:891,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:892,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:893,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:894,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:894,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 895
      start: 872
    functionDepth: 1
    functionLinenumber: 872
    functionLinenumberEnd: 895
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - EXPECT_TRUE
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - DownloadServiceImpl::DownloadServiceImpl
    - brpc::Server::AddService
    - ASSERT_NE
    - brpc::Controller::response_will_be_read_progressively
    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:904,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 900
    functionDepth: 0
    functionLinenumber: 900
    functionLinenumberEnd: 905
    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:910,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:910,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:910,1
    - Dst: append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:911,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:914,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:915,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:917,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:918,1
    - Dst: clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:920,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:923,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 907
    functionDepth: 1
    functionLinenumber: 907
    functionLinenumberEnd: 924
    functionName: ReadBody::OnReadOnePart
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::Status::OK
    - clear
    - std::min
    - CopyPAPrefixedWithSeqNo
    - append
    - data
    - memcmp
    - size
    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:926,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:927,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:928,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:931,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 932
      start: 925
    functionDepth: 1
    functionLinenumber: 925
    functionLinenumberEnd: 932
    functionName: ReadBody::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - ASSERT_LT
    - data
    - memcmp
    - size
    - butil::intrusive_ptr<ReadBody>
    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: 933
      start: 933
    functionDepth: 0
    functionLinenumber: 933
    functionLinenumberEnd: 933
    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: 934
      start: 934
    functionDepth: 0
    functionLinenumber: 934
    functionLinenumberEnd: 934
    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: 935
      start: 935
    functionDepth: 0
    functionLinenumber: 935
    functionLinenumberEnd: 935
    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:953,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:956,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:957,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:957,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:958,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:958,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:960,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:963,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:965,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:966,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:967,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:968,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:969,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:970,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:970,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:971,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:971,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:972,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:972,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:975,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:977,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:982,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:985,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:985,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:988,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:991,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:991,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:994,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:995,1
    - Dst: butil::intrusive_ptr::destroyed
      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:996,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:996,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 997
      start: 950
    functionDepth: 1
    functionLinenumber: 950
    functionLinenumberEnd: 997
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1000,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1002,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1005,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1006,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1006,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1008,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1009,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1011,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1013,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1014,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1015,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1016,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1017,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1017,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1017,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1018,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1019,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1020,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1020,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1023,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1024,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1025,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1029,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1029,1
    - Dst: ASSERT_EQ
      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:1032,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1032,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1033,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1035
      start: 999
    functionDepth: 1
    functionLinenumber: 999
    functionLinenumberEnd: 1035
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - DownloadServiceImpl::written_bytes
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1040,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1043,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1044,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1044,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1045,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1045,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1047,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1048,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1050,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1052,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1053,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1054,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1055,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1056,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1056,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1057,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1057,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1058,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1058,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1059,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1059,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1063,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1064,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1065,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1070,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1071,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1074,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1075,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1075,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1078,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1079,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1079,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1080,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1080,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1081
      start: 1037
    functionDepth: 1
    functionLinenumber: 1037
    functionLinenumberEnd: 1081
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1084,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1089,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1090,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1090,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1091,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1091,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1093,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1094,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1096,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1098,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1099,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1100,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1101,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1102,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1102,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1103,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1103,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1104,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1106,1
    - Dst: DownloadServiceImpl::ever_full
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1106,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1107,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1107,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1108,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1108,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1109,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1109,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1112,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1113,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1114,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1119,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1121,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1121,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1124,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1125,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1128,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1129,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1130,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1131
      start: 1083
    functionDepth: 1
    functionLinenumber: 1083
    functionLinenumberEnd: 1131
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - LOG
    - butil::intrusive_ptr::get
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - EXPECT_TRUE
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - DownloadServiceImpl::ever_full
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1137,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1138,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1139,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1139,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1140,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1143,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1145,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1146,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1147,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1148,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1150,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1150,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1152,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1153,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1154,1
    - Dst: DownloadServiceImpl::written_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1156,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1156,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1157,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1160
      start: 1133
    functionDepth: 1
    functionLinenumber: 1133
    functionLinenumberEnd: 1160
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - DownloadServiceImpl::written_bytes
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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:1166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1165
    functionDepth: 1
    functionLinenumber: 1165
    functionLinenumberEnd: 1167
    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:1169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1171
      start: 1168
    functionDepth: 1
    functionLinenumber: 1168
    functionLinenumberEnd: 1171
    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:1176,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1179,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1179,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1180,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1180,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1181,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1182,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1184,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1186,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1187,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1188,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1189,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1190,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1191,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1191,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1192,1
    - Dst: AlwaysFailRead::AlwaysFailRead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1192,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1194,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1195,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1196,1
    - Dst: DownloadServiceImpl::last_errno
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1197
      start: 1174
    functionDepth: 1
    functionLinenumber: 1174
    functionLinenumberEnd: 1197
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - AlwaysFailRead::AlwaysFailRead
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - DownloadServiceImpl::last_errno
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_NE
    - brpc::Controller::response_will_be_read_progressively
    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:1200,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1202,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1205,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1206,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1206,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1208,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1211,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1213,1
    - Dst: brpc::Controller::response_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1214,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1215,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1218,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1218,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1219,1
    - Dst: ReadBody::ReadBody
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1219,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1220,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1220,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1223,1
    - Dst: butil::intrusive_ptr::read_bytes
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1224,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1225,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1230,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1233,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1234,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1235,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1236,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1239,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1240,1
    - Dst: butil::intrusive_ptr::destroyed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1241,1
    - Dst: butil::intrusive_ptr::destroying_status
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1241,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1242
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadBody::ReadBody
    - butil::intrusive_ptr::get
    - LOG
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - usleep
    - brpc::Channel::CallMethod
    - brpc::Server::Join
    - butil::intrusive_ptr::destroying_status
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Channel::Channel
    - butil::intrusive_ptr::read_bytes
    - brpc::Server::Stop
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::intrusive_ptr::reset
    - ASSERT_GT
    - butil::intrusive_ptr::destroyed
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::Controller::response_will_be_read_progressively
    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: 1252
      start: 1250
    functionDepth: 0
    functionLinenumber: 1250
    functionLinenumberEnd: 1252
    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:1256,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1259,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1262,1
    - Dst: response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1264
      start: 1255
    functionDepth: 1
    functionLinenumber: 1255
    functionLinenumberEnd: 1264
    functionName: ServerProgressiveReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - response_attachment
    - ASSERT_LT
    - data
    - memcmp
    - size
    - butil::intrusive_ptr<ReadBody>
    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: 1274
      start: 1272
    functionDepth: 0
    functionLinenumber: 1272
    functionLinenumberEnd: 1274
    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:1278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1279
      start: 1277
    functionDepth: 1
    functionLinenumber: 1277
    functionLinenumberEnd: 1279
    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:1283,1
    - Dst: error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1283,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1284,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' st'
    argTypes:
    - butil::Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1287
      start: 1281
    functionDepth: 1
    functionLinenumber: 1281
    functionLinenumberEnd: 1287
    functionName: ServerAlwaysFailReader::OnEndOfMessage
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - error_code
    - SetFailed
    - LOG
    - CHECK_EQ
    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:1299,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1300,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1301,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1302,1
    - Dst: ServerProgressiveReader::ServerProgressiveReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1302,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: 1303
      start: 1295
    functionDepth: 2
    functionLinenumber: 1295
    functionLinenumberEnd: 1303
    functionName: UploadServiceImpl::Upload
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ReadProgressiveAttachmentBy
    - static_cast<brpc::Controller*>
    - brpc::Controller*::request_will_be_read_progressively
    - ServerProgressiveReader::ServerProgressiveReader
    - UploadServiceImpl::check_header
    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:1309,1
    - Dst: UploadServiceImpl::check_header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1310,1
    - Dst: brpc::Controller*::request_will_be_read_progressively
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1311,1
    - Dst: brpc::Controller*::ReadProgressiveAttachmentBy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,1
    - Dst: ServerAlwaysFailReader::ServerAlwaysFailReader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1312,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: 1313
      start: 1305
    functionDepth: 2
    functionLinenumber: 1305
    functionLinenumberEnd: 1313
    functionName: UploadServiceImpl::UploadFailed
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::ReadProgressiveAttachmentBy
    - ServerAlwaysFailReader::ServerAlwaysFailReader
    - static_cast<brpc::Controller*>
    - brpc::Controller*::request_will_be_read_progressively
    - UploadServiceImpl::check_header
    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:1317,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1318,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1319,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1320
      start: 1316
    functionDepth: 1
    functionLinenumber: 1316
    functionLinenumberEnd: 1320
    functionName: UploadServiceImpl::check_header
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 4
    functionsReached:
    - brpc::Controller*::http_request
    - CHECK
    - CHECK_EQ
    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:1325,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1329,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1330,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1330,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1331,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1331,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1333,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1336,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1337,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1338,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1339,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1340,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1342,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1345,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1346,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1348,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1348,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1350,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1356,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1357,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1357,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1358
      start: 1323
    functionDepth: 1
    functionLinenumber: 1323
    functionLinenumberEnd: 1358
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - CopyPAPrefixedWithSeqNo
    - brpc::Controller::request_attachment
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    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:1364,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1368,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1370,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1370,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1372,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1375,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1376,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1377,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1378,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1379,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1381,1
    - Dst: CopyPAPrefixedWithSeqNo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1384,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1385,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1387,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1387,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1389,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1395,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1396,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1396,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1397
      start: 1362
    functionDepth: 1
    functionLinenumber: 1362
    functionLinenumberEnd: 1397
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - CopyPAPrefixedWithSeqNo
    - brpc::Controller::request_attachment
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - brpc::ServiceOptions::ServiceOptions
    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:1402,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1403,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1403,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1404,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1404,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1406,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1409,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1413,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1417,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1418,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1419,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1420,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1421,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1422,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1422,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1428,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1430,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1431,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1432,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1433,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1434,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1435,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1436,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1436,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1442,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1442,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1443,1
    - Dst: brpc::SocketUniquePtr::GetAgentSocket
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1443,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1444,1
    - Dst: brpc::SocketUniquePtr::parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1444,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    - Dst: brpc::policy::H2Context*::_remote_window_left::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1445,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1447
      start: 1400
    functionDepth: 1
    functionLinenumber: 1400
    functionLinenumberEnd: 1447
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context*::_remote_window_left::load
    - brpc::SocketUniquePtr::GetAgentSocket
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - static_cast<brpc::policy::H2Context*>
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::SetTrackMeAddress
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - brpc::SocketUniquePtr::parsing_context
    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:1451,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1454,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1456,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1458,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1460,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1462,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1463,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1465,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1468,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1469,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1469,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1471,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1471,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1472,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1449
    functionDepth: 1
    functionLinenumber: 1449
    functionLinenumberEnd: 1473
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoRequestBuf
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - MakeH2EchoResponseBuf
    - brpc::ParseResult::is_ok
    - brpc::ParseResult::message
    - brpc::policy::ParseH2Message
    - get
    - butil::IOBuf::IOBuf
    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: 1481
      start: 1475
    functionDepth: 0
    functionLinenumber: 1475
    functionLinenumberEnd: 1481
    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:1484,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1486,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1488,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1490,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1492,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1493,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1494,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1495,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1498,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1498,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1499,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1499,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1501,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1501,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1502,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1503,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1503,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1504,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1505
      start: 1483
    functionDepth: 1
    functionLinenumber: 1483
    functionLinenumberEnd: 1505
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoRequestBuf
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - MakeH2EchoResponseBuf
    - brpc::ParseResult::is_ok
    - SaveUint32
    - brpc::Controller::http_response
    - brpc::ParseResult::message
    - brpc::policy::ParseH2Message
    - get
    - butil::IOBuf::IOBuf
    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:1508,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1510,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1512,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1514,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1515,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1517,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1518,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1519,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1522,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1523,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1523,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1525,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1525,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1526,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1526,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1527,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1527,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1528
      start: 1507
    functionDepth: 1
    functionLinenumber: 1507
    functionLinenumberEnd: 1528
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoRequestBuf
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - brpc::Controller::Failed
    - MakeH2EchoResponseBuf
    - butil::IOBuf::append
    - brpc::ParseResult::is_ok
    - SaveUint32
    - brpc::Controller::http_response
    - brpc::ParseResult::message
    - brpc::policy::ParseH2Message
    - get
    - butil::IOBuf::IOBuf
    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:1531,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1532,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1535,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1536,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1537,1
    - Dst: brpc::policy::SerializeHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1538,1
    - Dst: brpc::H2Settings::H2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1541,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1542,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1543,1
    - Dst: butil::IOBuf::IOBuf
      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: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1546,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1546,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1548,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1550,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1553,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1553,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1555,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1556,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1556,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1559,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1559,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1560,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1560,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1561,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1561,1
    - Dst: butil::Status::error_str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1561,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1563,1
    - Dst: butil::Status::ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1563,1
    - Dst: brpc::policy::H2UnsentRequest*::DestroyStreamUserData
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1565,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1530
    functionDepth: 1
    functionLinenumber: 1530
    functionLinenumberEnd: 1567
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeH2Settings
    - brpc::policy::SerializeFrameHead
    - brpc::policy::PackH2Request
    - butil::Status::error_str
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - butil::Status::ok
    - test::EchoRequest::set_message
    - brpc::policy::ParseH2Message
    - butil::Status::error_code
    - brpc::H2Settings::H2Settings
    - get
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::Controller::call_id
    - brpc::Controller::http_request
    - butil::IOBuf::append
    - brpc::Controller::request_attachment
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::H2UnsentRequest*::DestroyStreamUserData
    - brpc::policy::SerializeHttpRequest
    - butil::IOBuf::IOBuf
    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:1571,1
    - Dst: brpc::policy::SerializeH2Settings
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1575,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1576,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1577,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1578,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1580,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1580,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1581,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1582,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1585,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1585,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1587,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1588,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1588,1
    - Dst: brpc::policy::H2Context*::ConsumeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1592,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1593,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1594,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1595,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1596,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1597,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1598,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1599
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1599
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - brpc::policy::H2Context::H2Context
    - brpc::policy::SerializeH2Settings
    - brpc::policy::SerializeFrameHead
    - brpc::policy::H2Context*::Init
    - initialize_parsing_context
    - ASSERT_TRUE
    - butil::IOBuf::append
    - brpc::policy::ParseH2Message
    - CHECK_EQ
    - brpc::policy::H2Context*::ConsumeFrameHead
    - brpc::H2Settings::H2Settings
    - get
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_settings)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1605,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1616,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1617,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1620,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1621,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1621,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1622,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1624,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1628,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1629
      start: 1601
    functionDepth: 1
    functionLinenumber: 1601
    functionLinenumberEnd: 1629
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::H2Context
    - brpc::policy::SerializeFrameHead
    - brpc::policy::H2Context*::Init
    - initialize_parsing_context
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::policy::ParseH2Message
    - CHECK_EQ
    - get
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(HttpTest, http2_goaway_with_debug_data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1633,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1636,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1636,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1639,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1643,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1643,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1646,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1650,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1650,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1652
      start: 1631
    functionDepth: 1
    functionLinenumber: 1631
    functionLinenumberEnd: 1652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - ASSERT_EQ
    - brpc::ServerOptions::ServerOptions
    - brpc::Server::Start
    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:1656,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1657,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1657,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1658,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1658,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1659,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1660,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1662,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1666,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1669,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1670,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1671,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1672,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1673,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1673,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1674,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1674,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1678,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1679,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1682,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1683,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1684,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1685,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1686,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1687,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1687,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1690,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1691,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1696,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1697,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1698,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1699,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1700,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1700,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1701,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1701,1
    - Dst: brpc::SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1703,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1704,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1706
      start: 1654
    functionDepth: 1
    functionLinenumber: 1654
    functionLinenumberEnd: 1706
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::_agent_socket_id::load
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::SetTrackMeAddress
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::set_timeout_ms
    - test::EchoResponse::message
    - brpc::Server::AddService
    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:1709,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1712,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1714,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1717,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1719,1
    - Dst: test::EchoResponse::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1721,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: test::EchoResponse::SerializeToZeroCopyStream
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1724,1
    - Dst: static_cast<brpc::policy::H2Context*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1727,1
    - Dst: parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1727,1
    - Dst: brpc::policy::H2Context*::hpacker
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1728,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1729,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1730,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1735,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1739,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1739,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1740,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1744,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1748,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1752,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1754,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1755,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1758,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1758,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1761,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1762,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1764,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1764,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1767,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1768,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1768,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1770,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1773,1
    - Dst: Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1777,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1779,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1780,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1782,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1782,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1786,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1787,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1787,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1791,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1791,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1792,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1792,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1794,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1794,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1795,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1795,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1797,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1798,1
    - Dst: content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1798,1
    - Dst: GetHeader
      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:1801,1
    - Dst: GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1803,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1804
      start: 1708
    functionDepth: 1
    functionLinenumber: 1708
    functionLinenumberEnd: 1804
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::set_message
    - brpc::policy::SerializeFrameHead
    - butil::IOBufAppender::move_to
    - ASSERT_EQ
    - brpc::ParseResult::message
    - butil::IOBuf::size
    - test::EchoResponse::SerializeToZeroCopyStream
    - butil::IOBufAppender::IOBufAppender
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::http_response
    - brpc::ParseResult::is_ok
    - EXPECT_TRUE
    - brpc::policy::ParseH2Message
    - get
    - content_type
    - MakeH2EchoRequestBuf
    - static_cast<brpc::policy::H2Context*>
    - brpc::policy::H2Context*::hpacker
    - ProcessMessage
    - parsing_context
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::Movable
    - brpc::HPackOptions::HPackOptions
    - Encode
    - GetHeader
    - butil::string_printf
    - butil::IOBuf::IOBuf
    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:1807,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1809,1
    - Dst: MakeH2EchoRequestBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1811,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1813,1
    - Dst: MakeH2EchoResponseBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1814,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1817,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1818,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1819,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1820,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1823,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1823,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1824,1
    - Dst: ProcessMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1826,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1827,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1827,1
    - Dst: brpc::policy::ParseH2Message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1830,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1831,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1831,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1834,1
    - Dst: brpc::policy::PackH2Request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1837,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1837,1
    - Dst: SnappyDecompressIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1838,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1839,1
    - Dst: brpc::SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1840,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1841,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1841,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1842,1
    - Dst: butil::Status::error_data
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1842,1
    - Dst: brpc::policy::H2UnsentRequest*::DestroyStreamUserData
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1845,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1846
      start: 1806
    functionDepth: 2
    functionLinenumber: 1806
    functionLinenumberEnd: 1846
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SerializeFrameHead
    - MakeH2EchoResponseBuf
    - ASSERT_EQ
    - brpc::ParseResult::message
    - brpc::policy::PackH2Request
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::ParseResult::is_ok
    - SaveUint32
    - brpc::policy::ParseH2Message
    - butil::Status::error_code
    - get
    - brpc::SocketMessage*::AppendAndDestroySelf
    - brpc::Controller::call_id
    - MakeH2EchoRequestBuf
    - ProcessMessage
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::Status::error_data
    - SnappyDecompressIOBuf
    - brpc::ParseResult::error
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::H2UnsentRequest*::DestroyStreamUserData
    - butil::IOBuf::IOBuf
    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:1851,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1851,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1853
      start: 1850
    functionDepth: 0
    functionLinenumber: 1850
    functionLinenumberEnd: 1853
    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:1860,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1862,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1863,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1865,1
    - Dst: AfterRecevingGoAway::AfterRecevingGoAway
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1870,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1872,1
    - Dst: call_id
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1872,1
    - Dst: set_timeout_ms
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1873,1
    - Dst: http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1874,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1875,1
    - Dst: accept
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1878,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1879,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1881,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1883,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1884,1
    - Dst: SaveUint32
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1885,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1886,1
    - Dst: need_shutdown_write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1886,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1890,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1892
      start: 1857
    functionDepth: 1
    functionLinenumber: 1857
    functionLinenumberEnd: 1892
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - AfterRecevingGoAway::AfterRecevingGoAway
    - bthread_usleep
    - std::vector::push_back
    - SerializeFrameHead
    - http_request
    - call_id
    - brpc::Join
    - brpc::Channel::CallMethod
    - need_shutdown_write
    - ASSERT_EQ
    - SaveUint32
    - brpc::Channel::Channel
    - ASSERT_GT
    - set_timeout_ms
    - brpc::ChannelOptions::ChannelOptions
    - accept
    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:1896,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1897,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1897,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1898,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1898,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1900,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1901,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1903,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1905,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1908,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1909,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1910,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1911,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1912,1
    - Dst: test::EchoRequest::SerializeAsString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1912,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1913,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1914,1
    - Dst: brpc::Controller::Failed
      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:1915,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1915,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: test::EchoResponse::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1916,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1917,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1917,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1919,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1921,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1922,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1923,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: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1925,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1925,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1926,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1926,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1927
      start: 1894
    functionDepth: 1
    functionLinenumber: 1894
    functionLinenumberEnd: 1927
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - test::EchoResponse::ParseFromString
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoRequest::SerializeAsString
    - test::EchoService_Stub::Echo
    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:1943,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1944,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1944,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1945,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1947,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1948,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1950,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1957,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1957,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1959,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1960,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1961,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1962,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1963,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1964,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1965,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1965,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1968,1
    - Dst: brpc::SampleIterator::Next
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1974,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1975,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1980,1
    - Dst: brpc::SampledRequest*::meta::protocol_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1980,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1981,1
    - Dst: brpc::Controller::reset_sampled_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1982,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1982,1
    - Dst: brpc::HttpMessage::HttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1983,1
    - Dst: brpc::HttpMessage::ParseFromIOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1984,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1985,1
    - Dst: brpc::HttpMessage::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1985,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1987,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1988,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1989,1
    - Dst: brpc::HttpMessage::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1989,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1991,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1992,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1992,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1993,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1993,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1995,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1998,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1998,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1999,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:1999,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2003,1
    - Dst: butil::FilePath
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2003,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2011
      start: 1929
    functionDepth: 1
    functionLinenumber: 1929
    functionLinenumberEnd: 2011
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::release
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - json2pb::ProtoMessageToJson
    - brpc::Channel::CallMethod
    - butil::DeleteFile
    - brpc::Channel::Init
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - brpc::HttpMessage::ParseFromIOBuf
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::reset_sampled_request
    - brpc::HttpMessage::body
    - brpc::HttpMessage::HttpMessage
    - brpc::Server::Server
    - butil::EndPoint
    - sleep
    - EXPECT_EQ
    - brpc::SampleIterator::Next
    - brpc::Server::Start
    - butil::FilePath
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - brpc::HttpMessage::header
    - test::EchoResponse::message
    - brpc::Server::AddService
    - ASSERT_NE
    - brpc::SampledRequest*::meta::protocol_type
    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:2015,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2016,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2016,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2017,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2017,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2019,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2022,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2024,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2027,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2028,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2029,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2030,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2032,1
    - Dst: google::protobuf::TextFormat::PrintToString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2032,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2033,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2034,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2035,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2035,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2036,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: google::protobuf::TextFormat::ParseFromString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2037,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2038,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2039,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2039,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2042,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2043,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2044,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2045,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2046,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2047,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2047,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2048,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2048,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2049
      start: 2013
    functionDepth: 1
    functionLinenumber: 2013
    functionLinenumberEnd: 2049
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - google::protobuf::TextFormat::PrintToString
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - google::protobuf::TextFormat::ParseFromString
    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:2053,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2054,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2055,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2055,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2057,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2060,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2062,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2065,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2066,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2067,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2068,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2070,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2071,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2071,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2072,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2073,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2073,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2073,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2074,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2074,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2077,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2078,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2078,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2079,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2079,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2082,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2083,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2084,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2085,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2086,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2086,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2086,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2087,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2088,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2088,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2089
      start: 2051
    functionDepth: 1
    functionLinenumber: 2051
    functionLinenumberEnd: 2089
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - json2pb::ProtoMessageToProtoJson
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - json2pb::ProtoJsonToProtoMessage
    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:2098,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2099,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2099,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2100,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2101,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2103,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2103,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2104,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2106,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2109,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: 2112
      start: 2093
    functionDepth: 1
    functionLinenumber: 2093
    functionLinenumberEnd: 2112
    functionName: HttpServiceImpl::Head
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_NE
    - static_cast<brpc::Controller*>
    - ASSERT_EQ
    - brpc::Controller*::http_request
    - brpc::Controller*::http_response
    - butil::StringToInt
    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:2119,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2123,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2123,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2124,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: 2125
      start: 2114
    functionDepth: 0
    functionLinenumber: 2114
    functionLinenumberEnd: 2125
    functionName: HttpServiceImpl::Expect
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::Controller*::response_attachment
    - static_cast<brpc::Controller*>
    - ASSERT_EQ
    - 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:2130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2132,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2132,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2133,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2133,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2135,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2136,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: butil::my_ip
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2138,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2140,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2141,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2142,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2143,1
    - Dst: butil::IntToString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2143,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2144,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2146,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2149,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2151,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2154,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2155,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2156,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2159
      start: 2128
    functionDepth: 1
    functionLinenumber: 2128
    functionLinenumberEnd: 2159
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::http_response
    - brpc::Channel::Channel
    - brpc::Server::Server
    - butil::EndPoint
    - EXPECT_EQ
    - brpc::Server::Start
    - butil::my_ip
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - butil::IntToString
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Server::AddService
    - ASSERT_NE
    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:2166,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2167,1
    - Dst: brpc::HttpHeader*::method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2167,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2168,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2169,1
    - Dst: brpc::HttpHeader*::major_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2170,1
    - Dst: brpc::HttpHeader*::minor_version
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2171,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2181,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2183,1
    - Dst: host
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2184,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2185,1
    - Dst: port
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2186,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2193,1
    - Dst: brpc::HttpHeader*::content_type
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2194,1
    - Dst: brpc::HttpHeader*::HeaderBegin
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2197,1
    - Dst: brpc::HttpHeader*::HeaderEnd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2198,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2201,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2205,1
    - Dst: brpc::HttpHeader*::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2208,1
    - Dst: empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: brpc::HttpHeader*::GetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2209,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2215,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2219,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: 2220
      start: 2163
    functionDepth: 1
    functionLinenumber: 2163
    functionLinenumberEnd: 2220
    functionName: MakeHttpRequestHeaders
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::HttpHeader*::GetHeader
    - brpc::HttpHeader*::minor_version
    - port
    - HttpMethod2Str
    - brpc::HttpHeader*::major_version
    - butil::Base64Encode
    - brpc::HttpHeader*::uri
    - butil::IOBufBuilder::move_to
    - host
    - brpc::HttpHeader*::HeaderBegin
    - brpc::HttpHeader*::method
    - PrintWithoutHost
    - empty
    - brpc::HttpHeader*::content_type
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::HttpHeader*::HeaderEnd
    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:2227,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2227,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2229,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2229,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2229,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2232,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2233,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2235,1
    - Dst: fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2235,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2236,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2237,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2237,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2238,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2240,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2240,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2241,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2244,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2244,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2245,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2245,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2245,1
    - Dst: brpc::ParseResult::is_ok
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2246,1
    - Dst: reset
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2247,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2247,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2251,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2251,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: 2252
      start: 2224
    functionDepth: 1
    functionLinenumber: 2224
    functionLinenumberEnd: 2252
    functionName: ReadOneResponse
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::IOPortal::IOPortal
    - bthread_fd_wait
    - LOG
    - ASSERT_EQ
    - brpc::ParseResult::message
    - ASSERT_TRUE
    - brpc::ParseResult::is_ok
    - get
    - static_cast<brpc::policy::HttpContext*>
    - butil::cpuwide_time_us
    - brpc::ParseResult::error
    - reset
    - brpc::policy::ParseHttpMessage
    - bthread_usleep
    - fd
    - butil::IOPortal::empty
    - butil::ToPrintableString
    - ASSERT_LT
    - butil::IOPortal::append_from_file_descriptor
    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:2256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2258,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2258,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2259,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2259,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2262,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2262,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2266,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2268,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2268,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2270,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2271,1
    - Dst: brpc::HttpHeader::HttpHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2272,1
    - Dst: brpc::HttpHeader::set_method
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2273,1
    - Dst: brpc::HttpHeader::uri
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2274,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2275,1
    - Dst: brpc::HttpHeader::SetHeader
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2276,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2276,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2276,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2277,1
    - Dst: MakeHttpRequestHeaders
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2278,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2279,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2279,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2283,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2283,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2284,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2285,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2286,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2287,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2287,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2292,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2292,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2294,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2294,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2297,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2297,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2299,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2299,1
    - Dst: ReadOneResponse
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2302,1
    - Dst: brpc::DestroyingPtr::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2302,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2303
      start: 2254
    functionDepth: 2
    functionLinenumber: 2254
    functionLinenumberEnd: 2303
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - ReadOneResponse
    - LOG
    - ASSERT_EQ
    - butil::IOBuf::size
    - brpc::SocketUniquePtr::Write
    - Socket::Create
    - brpc::HttpHeader::uri
    - brpc::HttpHeader::set_method
    - MakeHttpRequestHeaders
    - std::to_string
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::SocketUniquePtr::fd
    - brpc::Server::Start
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - butil::EndPoint::EndPoint
    - brpc::HttpHeader::SetHeader
    - brpc::HttpHeader::HttpHeader
    - brpc::DestroyingPtr::header
    - bthread_usleep
    - brpc::Server::AddService
    - butil::ToPrintableString
    - butil::str2endpoint
    - ASSERT_LT
    - butil::IOBuf::IOBuf
    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:2326,1
    - Dst: brpc::policy::H2Context::H2Context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2327,1
    - Dst: brpc::policy::H2Context*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2327,1
    - Dst: initialize_parsing_context
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2328,1
    - Dst: brpc::policy::H2StreamContext::H2StreamContext
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2331,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2332,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2333,1
    - Dst: brpc::policy::H2StreamContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2334,1
    - Dst: brpc::policy::H2StreamContext*::Init
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2337,1
    - Dst: ReAddress
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2341,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2346,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2347,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2351,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2352,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2356,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2356,1
    - Dst: butil::IOPortal::to_string
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2360,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2361,1
    - Dst: std::string::length
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2361,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2367,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2368,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2368,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2369,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2369,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2370,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2370,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2371,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2371,1
    - Dst: brpc::policy::H2StreamContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2373,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2378
      start: 2306
    functionDepth: 1
    functionLinenumber: 2306
    functionLinenumberEnd: 2378
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - brpc::policy::H2Context*::Init
    - butil::IOPortal::to_string
    - ASSERT_EQ
    - std::string::length
    - ioctl
    - brpc::policy::H2Context::H2Context
    - brpc::policy::H2StreamContext*::header
    - EXPECT_GT
    - EXPECT_TRUE
    - get
    - EXPECT_FALSE
    - EXPECT_EQ
    - brpc::policy::VerifyHttpRequest
    - initialize_parsing_context
    - brpc::policy::H2StreamContext::H2StreamContext
    - ReAddress
    - brpc::policy::H2StreamContext*::Init
    - std::string::find
    - brpc::policy::H2StreamContext*::Destroy
    - butil::IOPortal::append_from_file_descriptor
    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: 2310
      start: 2310
    functionDepth: 0
    functionLinenumber: 2310
    functionLinenumberEnd: 2310
    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: 2313
      start: 2311
    functionDepth: 0
    functionLinenumber: 2311
    functionLinenumberEnd: 2313
    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: 2316
      start: 2314
    functionDepth: 0
    functionLinenumber: 2314
    functionLinenumberEnd: 2316
    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:2400,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2401,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2402,1
    - Dst: VerifyMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2405,1
    - Dst: brpc::policy::VerifyHttpRequest
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2408,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2409,1
    - Dst: ioctl
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2413,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2414,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2417,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2417,1
    - Dst: brpc::policy::ParseHttpMessage
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2420,1
    - Dst: get
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2420,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2421,1
    - Dst: brpc::ParseResult::error
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2421,1
    - Dst: static_cast<brpc::policy::HttpContext*>
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2422,1
    - Dst: brpc::ParseResult::message
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2422,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2425,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2425,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2426,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2427,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2427,1
    - Dst: brpc::policy::HttpContext*::body
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2430,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2431,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2431,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2432,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2432,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2435,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2436,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2437,1
    - Dst: std::stoi
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2437,1
    - Dst: brpc::policy::HttpContext*::header
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2440,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2443,1
    - Dst: std::string*::find
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2443,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2446,1
    - Dst: brpc::policy::HttpContext*::Destroy
      Src: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp:2447,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2452
      start: 2381
    functionDepth: 1
    functionLinenumber: 2381
    functionLinenumberEnd: 2452
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_http_rpc_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - MakePostRequestMessage
    - ioctl
    - brpc::ParseResult::message
    - brpc::policy::HttpContext*::header
    - EXPECT_GT
    - EXPECT_TRUE
    - get
    - EXPECT_FALSE
    - static_cast<brpc::policy::HttpContext*>
    - EXPECT_EQ
    - std::string*::find
    - brpc::policy::VerifyHttpRequest
    - brpc::policy::HttpContext*::body
    - brpc::ParseResult::error
    - brpc::policy::HttpContext*::Destroy
    - VerifyMessage
    - brpc::policy::ParseHttpMessage
    - std::string::find
    - std::stoi
    - butil::IOPortal::append_from_file_descriptor
    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: 2385
      start: 2385
    functionDepth: 0
    functionLinenumber: 2385
    functionLinenumberEnd: 2385
    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: 2388
      start: 2386
    functionDepth: 0
    functionLinenumber: 2386
    functionLinenumberEnd: 2388
    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: 2391
      start: 2389
    functionDepth: 0
    functionLinenumber: 2389
    functionLinenumberEnd: 2391
    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:34,1
    - Dst: FileDescriptor*::dependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:35,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:36,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:39,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:39,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:42,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:43,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - file_desc
    - pool
    argTypes:
    - FileDescriptor*
    - DescriptorPool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 44
    functionName: BuildDependency
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 1
    functionsReached:
    - DescriptorPool*::BuildFile
    - ASSERT_TRUE
    - FileDescriptor*::dependency_count
    - BuildDependency
    - FileDescriptor*::CopyTo
    - FileDescriptor*::dependency
    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:48,1
    - Dst: Descriptor*::file
      Src: /src/brpc/test/brpc_proto_unittest.cpp:49,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:52,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:54,1
    - Dst: DescriptorPool::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:55,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:56,1
    - Dst: FileDescriptor*::FindMessageTypeByName
      Src: /src/brpc/test/brpc_proto_unittest.cpp:57,1
    - Dst: Descriptor*::name
      Src: /src/brpc/test/brpc_proto_unittest.cpp:57,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:58,1
    - Dst: policy::RpcMeta::set_correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:59,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:61,1
    - Dst: policy::RpcMeta::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:61,1
    - Dst: DynamicMessageFactory::GetPrototype
      Src: /src/brpc/test/brpc_proto_unittest.cpp:62,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: std::unique_ptr::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:65,1
    - Dst: std::unique_ptr::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:65,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    - Dst: policy::RpcMeta::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:68,1
    - Dst: policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 46
    functionDepth: 2
    functionLinenumber: 46
    functionLinenumberEnd: 69
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - policy::RpcMeta::SerializeToString
    - ASSERT_TRUE
    - policy::RpcMeta::set_correlation_id
    - FileDescriptor*::FindMessageTypeByName
    - std::unique_ptr::ParseFromString
    - std::unique_ptr::SerializeToString
    - policy::RpcMeta::GetDescriptor
    - Descriptor*::file
    - policy::RpcMeta::correlation_id
    - Descriptor*::name
    - BuildDependency
    - DescriptorPool::BuildFile
    - DynamicMessageFactory::GetPrototype
    - ASSERT_EQ
    - FileDescriptor*::CopyTo
    - policy::RpcMeta::ParseFromString
    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:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:75,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:75,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: test::Message1::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: test::Message2::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: test::Message1::set_stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:81,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - test::Message1::stat
    - test::Message2::stat
    - test::Message2::ParseFromString
    - ASSERT_EQ
    - test::Message1::set_stat
    - test::Message1::SerializeToString
    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:34,1
    - Dst: FileDescriptor*::dependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:35,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:36,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:38,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:39,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:39,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:42,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:43,1
    - Dst: DescriptorPool*::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:43,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - file_desc
    - pool
    argTypes:
    - FileDescriptor*
    - DescriptorPool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 44
    functionName: BuildDependency
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 3
    functionsReached:
    - DescriptorPool*::BuildFile
    - ASSERT_TRUE
    - FileDescriptor*::dependency_count
    - BuildDependency
    - FileDescriptor*::CopyTo
    - FileDescriptor*::dependency
    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:48,1
    - Dst: Descriptor*::file
      Src: /src/brpc/test/brpc_proto_unittest.cpp:49,1
    - Dst: BuildDependency
      Src: /src/brpc/test/brpc_proto_unittest.cpp:52,1
    - Dst: FileDescriptor*::CopyTo
      Src: /src/brpc/test/brpc_proto_unittest.cpp:54,1
    - Dst: DescriptorPool::BuildFile
      Src: /src/brpc/test/brpc_proto_unittest.cpp:55,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:56,1
    - Dst: FileDescriptor*::FindMessageTypeByName
      Src: /src/brpc/test/brpc_proto_unittest.cpp:57,1
    - Dst: Descriptor*::name
      Src: /src/brpc/test/brpc_proto_unittest.cpp:57,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:58,1
    - Dst: policy::RpcMeta::set_correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:59,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:61,1
    - Dst: policy::RpcMeta::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:61,1
    - Dst: DynamicMessageFactory::GetPrototype
      Src: /src/brpc/test/brpc_proto_unittest.cpp:62,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:63,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: std::unique_ptr::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:64,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:65,1
    - Dst: std::unique_ptr::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:65,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    - Dst: policy::RpcMeta::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:67,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:68,1
    - Dst: policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_proto_unittest.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 46
    functionDepth: 2
    functionLinenumber: 46
    functionLinenumberEnd: 69
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - policy::RpcMeta::SerializeToString
    - ASSERT_TRUE
    - policy::RpcMeta::set_correlation_id
    - FileDescriptor*::FindMessageTypeByName
    - std::unique_ptr::ParseFromString
    - std::unique_ptr::SerializeToString
    - policy::RpcMeta::GetDescriptor
    - Descriptor*::file
    - policy::RpcMeta::correlation_id
    - Descriptor*::name
    - BuildDependency
    - DescriptorPool::BuildFile
    - DynamicMessageFactory::GetPrototype
    - ASSERT_EQ
    - FileDescriptor*::CopyTo
    - policy::RpcMeta::ParseFromString
    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:73,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:75,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:75,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: test::Message1::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: test::Message2::stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:78,1
    - Dst: test::Message1::set_stat
      Src: /src/brpc/test/brpc_proto_unittest.cpp:79,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    - Dst: test::Message1::SerializeToString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:80,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_proto_unittest.cpp:81,1
    - Dst: test::Message2::ParseFromString
      Src: /src/brpc/test/brpc_proto_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 82
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_proto_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - test::Message1::stat
    - test::Message2::stat
    - test::Message2::ParseFromString
    - ASSERT_EQ
    - test::Message1::set_stat
    - test::Message1::SerializeToString
    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:
    - srand
    - time
    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
    - butil::Status::OK
    - butil::Status::error_cstr
    - butil::Status::ok
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - butil::Status::Status
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - std::string
    - butil::Status::error_cstr
    - butil::Status::ok
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - ASSERT_TRUE
    - butil::Status::reset
    - butil::Status::error_cstr
    - butil::Status::ok
    - butil::Status::set_error
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - ASSERT_TRUE
    - butil::Status::error_cstr
    - butil::Status::ok
    - butil::Status::set_error
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - butil::Status::Status
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - butil::StringPiece::as_string
    - butil::Status::error_cstr
    - butil::Status::ok
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - std::ostringstream::str
    - butil::Status::error_str
    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:
    - srand
    - time
    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
    - butil::Status::OK
    - butil::Status::error_cstr
    - butil::Status::ok
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - butil::Status::Status
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - std::string
    - butil::Status::error_cstr
    - butil::Status::ok
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - ASSERT_TRUE
    - butil::Status::reset
    - butil::Status::error_cstr
    - butil::Status::ok
    - butil::Status::set_error
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - ASSERT_TRUE
    - butil::Status::error_cstr
    - butil::Status::ok
    - butil::Status::set_error
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - butil::Status::Status
    - std::ostringstream::str
    - butil::Status::error_str
    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_FALSE
    - butil::StringPiece::as_string
    - butil::Status::error_cstr
    - butil::Status::ok
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::Status::error_code
    - std::ostringstream::str
    - butil::Status::error_str
    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:77,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:82,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 83
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - RUN_ALL_TESTS
    - 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: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 30
    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: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    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:94,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:96,1
    - Dst: brpc::Controller*::log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:96,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:97,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:98,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:98,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:101,1
    - Dst: brpc::Controller*::trace_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:101,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:102,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: 103
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 103
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - brpc::Controller*::log_id
    - test::EchoRequest*::sleep_us
    - TRACEPRINTF
    - static_cast<brpc::Controller*>
    - snprintf
    - test::EchoResponse*::set_message
    - brpc::Controller*::trace_id
    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: 108
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 108
    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:109,1
    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: ~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: 113
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 113
    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:120,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 121
    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:124,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:125,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' cntl'
    - name
    argTypes:
    - brpc::Controller
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 127
    functionName: CheckContent
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - response_attachment
    - find
    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:130,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' cntl'
    - error
    argTypes:
    - brpc::Controller
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    functionName: CheckErrorText
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ErrorText
    - ASSERT_TRUE
    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:136,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:141,1
    - Dst: sscanf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:141,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:141,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - ' cntl'
    - name
    - expect
    argTypes:
    - brpc::Controller
    - char*
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 143
    functionName: CheckFieldInContent
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - sscanf
    - ASSERT_TRUE
    - find
    - strlen
    - ASSERT_EQ
    - response_attachment
    - c_str
    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:146,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:148,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' cntl'
    - expect
    argTypes:
    - brpc::Controller
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 151
    functionName: CheckAnnotation
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - response_attachment
    - find
    - butil::string_printf
    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:155,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:156,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:157,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' cntl'
    - ' expect_id_str'
    argTypes:
    - brpc::Controller
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 159
    functionName: CheckTraceId
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - ASSERT_TRUE
    - response_attachment
    - find
    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: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    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: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    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:165,1
    - Dst: AddBuiltinServices
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 165
    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:166,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 166
    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:169,1
    - Dst: Join
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:170,1
    - Dst: ClearServices
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 172
    functionName: BuiltinServiceTest::StopAndJoin
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 1
    functionsReached:
    - Join
    - Stop
    - ClearServices
    linkageType: ''
    returnType: void
    signature: void StopAndJoin()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - cntl
    - use_html
    argTypes:
    - brpc::Controller*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 180
    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:187,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:188,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:189,1
    - Dst: brpc::IndexService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:190,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:191,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:192,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 182
    functionDepth: 1
    functionLinenumber: 182
    functionLinenumberEnd: 193
    functionName: BuiltinServiceTest::TestIndex
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::Controller::http_response
    - BuiltinServiceTest::SetUpController
    - ClosureChecker::ClosureChecker
    - brpc::IndexService::default_method
    - EXPECT_FALSE
    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:200,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:201,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:202,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:204,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:204,1
    - Dst: brpc::StatusService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:206,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:207,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:207,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:208,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:209,1
    - Dst: RemoveService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:209,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 210
    functionName: BuiltinServiceTest::TestStatus
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 4
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::StatusService::default_method
    - brpc::Controller::Failed
    - brpc::Controller::http_response
    - RemoveService
    - ASSERT_EQ
    - EXPECT_FALSE
    - ClosureChecker::ClosureChecker
    - EchoServiceImpl::EchoServiceImpl
    - AddService
    - 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:218,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:219,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:220,1
    - Dst: MyVLogSite
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:221,1
    - Dst: brpc::VLogService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:222,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:223,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:223,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:224,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:224,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 227
    functionName: BuiltinServiceTest::TestVLog
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - CheckContent
    - brpc::Controller::Failed
    - brpc::Controller::http_response
    - MyVLogSite
    - 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:234,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:235,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:236,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:238,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:239,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:239,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:241,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:242,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:244,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:245,1
    - Dst: brpc::ConnectionsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:247,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:248,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:248,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:249,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:249,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:250,1
    - Dst: CheckFieldInContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:251,1
    - Dst: close
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:253,1
    - Dst: BuiltinServiceTest::StopAndJoin
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 255
    functionName: BuiltinServiceTest::TestConnections
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - tcp_connect
    - ASSERT_EQ
    - usleep
    - CheckFieldInContent
    - Start
    - brpc::Controller::Controller
    - brpc::Controller::http_response
    - snprintf
    - str2endpoint
    - EXPECT_FALSE
    - BuiltinServiceTest::SetUpController
    - BuiltinServiceTest::StopAndJoin
    - EXPECT_EQ
    - CheckContent
    - brpc::Controller::Failed
    - butil::EndPoint::EndPoint
    - ClosureChecker::ClosureChecker
    - ASSERT_GT
    - brpc::ConnectionsService::default_method
    - close
    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:262,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:263,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:264,1
    - Dst: brpc::BadMethodRequest::set_service_name
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:266,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:267,1
    - Dst: brpc::BadMethodService::no_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:268,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:269,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:269,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:270,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:270,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 273
    functionName: BuiltinServiceTest::TestBadMethod
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::http_response
    - brpc::BadMethodRequest::set_service_name
    - ClosureChecker::ClosureChecker
    - brpc::BadMethodService::no_method
    - CheckErrorText
    - 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:281,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:282,1
    - Dst: BuiltinServiceTest::SetUpController
      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::FlagsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:294,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:295,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:295,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:296,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:296,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:297,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:300,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:301,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:302,1
    - Dst: brpc::Controller::http_request
      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:306,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:307,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:307,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:308,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:308,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:311,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:312,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:313,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:314,1
    - Dst: brpc::FlagsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:315,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:316,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:316,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:317,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:317,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 1
    argNames:
    - use_html
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 320
    functionName: BuiltinServiceTest::TestFlags
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - CheckContent
    - brpc::FlagsService::default_method
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::http_response
    - BuiltinServiceTest::SetUpController
    - ClosureChecker::ClosureChecker
    - EXPECT_FALSE
    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:329,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:330,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:331,1
    - Dst: brpc::RpczService::disable
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:332,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:333,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:333,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:334,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:337,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:338,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:339,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:340,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:341,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:341,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:342,1
    - Dst: brpc::Controller::http_response
      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:349,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:350,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:351,1
    - Dst: brpc::RpczService::stats
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:352,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:353,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:353,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:355,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::enable
      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_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:367,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:367,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:368,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:372,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:373,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:374,1
    - Dst: brpc::RpczService::hex_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:375,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:376,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:376,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:377,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:379,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:380,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:381,1
    - Dst: brpc::RpczService::dec_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:382,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:383,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:383,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:387,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:387,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:387,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:389,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:390,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:391,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:391,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:393,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:393,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:402,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:403,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:404,1
    - Dst: test::EchoService_Stub::Echo
      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: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:409,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:410,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:411,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:412,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:413,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:414,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:415,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:416,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:416,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:417,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:417,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:425,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:426,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:427,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:428,1
    - Dst: test::EchoService_Stub::Echo
      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: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:433,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:434,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:435,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:436,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:437,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:439,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:440,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:440,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:440,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:441,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:441,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:449,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:451,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:452,1
    - Dst: test::EchoService_Stub::Echo
      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: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:457,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:458,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:459,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:460,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:461,1
    - Dst: brpc::RpczService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:463,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:464,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:464,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:464,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:465,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:465,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:473,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:474,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:475,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:476,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:477,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:477,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:480,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:481,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:482,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:483,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:484,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:485,1
    - Dst: brpc::RpczService::default_method
      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: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:488,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:489,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:489,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:494,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:495,1
    - Dst: BuiltinServiceTest::SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:496,1
    - Dst: brpc::RpczService::stats
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:497,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:498,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:498,1
    - Dst: BuiltinServiceTest::StopAndJoin
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:503,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 96
    argCount: 3
    argNames:
    - enable
    - hex
    - use_html
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 504
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 504
    functionName: BuiltinServiceTest::TestRpcz
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RpczService::stats
    - brpc::RpczService::enable
    - ASSERT_EQ
    - brpc::Controller::set_log_id
    - brpc::Controller::ErrorText
    - usleep
    - test::EchoRequest::set_sleep_us
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - Start
    - brpc::Controller::Controller
    - brpc::Controller::http_response
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - snprintf
    - str2endpoint
    - BuiltinServiceTest::SetUpController
    - EXPECT_FALSE
    - BuiltinServiceTest::StopAndJoin
    - brpc::RpczService::disable
    - EXPECT_EQ
    - CheckContent
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::RpczService::default_method
    - butil::EndPoint::EndPoint
    - brpc::RpczService::dec_log_id
    - ClosureChecker::ClosureChecker
    - brpc::RpczService::hex_log_id
    - test::EchoResponse::message
    - test::EchoService_Stub::Echo
    - AddService
    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:511,1
    - Dst: TestIndex
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp: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: 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:520,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:521,1
    - Dst: set_version
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:522,1
    - Dst: brpc::VersionService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:523,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:524,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:524,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:525,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:525,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 515
    functionDepth: 1
    functionLinenumber: 515
    functionLinenumberEnd: 526
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Controller::Failed
    - ClosureChecker::ClosureChecker
    - set_version
    - brpc::VersionService::default_method
    - EXPECT_FALSE
    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:533,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:534,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:535,1
    - Dst: brpc::HealthService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:536,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:537,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:537,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:538,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:538,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 539
      start: 528
    functionDepth: 1
    functionLinenumber: 528
    functionLinenumberEnd: 539
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HealthService::default_method
    - EXPECT_EQ
    - brpc::Controller::Controller
    - SetUpController
    - brpc::Controller::response_attachment
    - brpc::Controller::Failed
    - ClosureChecker::ClosureChecker
    - EXPECT_FALSE
    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:545,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 547
    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:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:554,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:554,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:557,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:560,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:560,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:561,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:562,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:563,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:564,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:564,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:564,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:565,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 566
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - Start
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::Channel::CallMethod
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_FALSE
    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:573,1
    - Dst: brpc::Controller*::response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:575,1
    - Dst: brpc::Controller*::response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:576,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:579,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:580,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:581,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:583,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - cntl
    - done
    argTypes:
    - brpc::Controller*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 570
    functionDepth: 1
    functionLinenumber: 570
    functionLinenumberEnd: 584
    functionName: MyGrpcHealthReporter::GenerateReport
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Closure*::Run
    - grpc::health::v1::HealthCheckResponse::set_status
    - brpc::Controller*::response_attachment
    - json2pb::ProtoMessageToJson
    - brpc::Controller*::response
    - brpc::Controller*::http_response
    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:588,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:589,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:589,1
    - Dst: grpc::health::v1::HealthCheckRequest::set_service
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:593,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:594,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:595,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:597,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:598,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:598,1
    - Dst: grpc::health::v1::Health_Stub::Check
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:600,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:601,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:601,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:601,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:602,1
    - Dst: grpc::health::v1::HealthCheckResponse::status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:602,1
    - Dst: grpc::health::v1::HealthCheckResponse::Clear
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:604,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:605,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:606,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:607,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:608,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:608,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:608,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:609,1
    - Dst: grpc::health::v1::HealthCheckResponse::status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 587
    functionDepth: 1
    functionLinenumber: 587
    functionLinenumberEnd: 610
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - Start
    - EXPECT_EQ
    - brpc::Controller::Controller
    - grpc::health::v1::HealthCheckRequest::set_service
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - grpc::health::v1::HealthCheckResponse::Clear
    - ASSERT_EQ
    - grpc::health::v1::Health_Stub::Check
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::Channel::CallMethod
    - grpc::health::v1::HealthCheckResponse::status
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_FALSE
    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:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:616,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:616,1
    - Dst: grpc::health::v1::HealthCheckRequest::set_service
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:620,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:621,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:623,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:626,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:626,1
    - Dst: grpc::health::v1::Health_Stub::Check
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:629,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:631,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:631,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:631,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:632,1
    - Dst: grpc::health::v1::HealthCheckResponse::status
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:632,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 633
      start: 612
    functionDepth: 1
    functionLinenumber: 612
    functionLinenumberEnd: 633
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - Start
    - EXPECT_EQ
    - brpc::Controller::Controller
    - grpc::health::v1::HealthCheckRequest::set_service
    - brpc::Controller::Failed
    - ASSERT_EQ
    - grpc::health::v1::Health_Stub::Check
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - grpc::health::v1::HealthCheckResponse::status
    - brpc::ServerOptions::ServerOptions
    - brpc::ChannelOptions::ChannelOptions
    - 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:636,1
    - Dst: TestStatus
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:637,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 635
    functionDepth: 0
    functionLinenumber: 635
    functionLinenumberEnd: 638
    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:644,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:645,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:646,1
    - Dst: AddService
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:646,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:646,1
    - Dst: brpc::ListService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:648,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:649,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:650,1
    - Dst: brpc::ListResponse::service_size
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:651,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:651,1
    - Dst: brpc::ListResponse::service
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:651,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 640
    functionDepth: 1
    functionLinenumber: 640
    functionLinenumberEnd: 652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::ListResponse::service_size
    - brpc::ListResponse::service
    - brpc::Controller::Failed
    - ASSERT_EQ
    - ClosureChecker::ClosureChecker
    - brpc::ListService::default_method
    - EchoServiceImpl::EchoServiceImpl
    - AddService
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:655,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 657
    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:663,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:666,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:666,1
    - Dst: brpc::ThreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:667,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:668,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:668,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:671,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 672
      start: 659
    functionDepth: 1
    functionLinenumber: 659
    functionLinenumberEnd: 672
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - brpc::ThreadsService::default_method
    - brpc::Controller::Controller
    - pthread_join
    - brpc::Controller::Failed
    - ASSERT_EQ
    - ClosureChecker::ClosureChecker
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, threads)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestVLog
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:675,1
    - Dst: TestVLog
      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:
    - 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:680,1
    - Dst: TestConnections
      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:
    - 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:685,1
    - Dst: TestFlags
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:686,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 687
    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:690,1
    - Dst: TestBadMethod
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:691,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 689
    functionDepth: 0
    functionLinenumber: 689
    functionLinenumberEnd: 692
    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:696,1
    - Dst: Start
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:696,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: bvar::Adder::Adder
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:703,1
    - Dst: bvar::Adder::expose
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:704,1
    - Dst: brpc::VarsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:706,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:707,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:707,1
    - Dst: CheckFieldInContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:708,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:711,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:712,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:713,1
    - Dst: brpc::VarsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:714,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:715,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:715,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:716,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 694
    functionDepth: 1
    functionLinenumber: 694
    functionLinenumberEnd: 718
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Adder::Adder
    - Start
    - CheckContent
    - brpc::Controller::Controller
    - brpc::VarsService::default_method
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - ASSERT_EQ
    - ClosureChecker::ClosureChecker
    - bvar::Adder::expose
    - CheckFieldInContent
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(BuiltinServiceTest, vars)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestRpcz
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:724,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 728
      start: 720
    functionDepth: 0
    functionLinenumber: 720
    functionLinenumberEnd: 728
    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:734,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:735,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:736,1
    - Dst: brpc::PProfService::profile
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:737,1
    - Dst: ProfilerFlush
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:739,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:740,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:740,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:740,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:741,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:741,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:744,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:745,1
    - Dst: brpc::PProfService::heap
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:746,1
    - Dst: getenv
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:748,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:748,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:748,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:751,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:752,1
    - Dst: brpc::PProfService::growth
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:753,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:755,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:755,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:755,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:758,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:759,1
    - Dst: brpc::PProfService::symbol
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:760,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:761,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:761,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:762,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:765,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:766,1
    - Dst: brpc::PProfService::cmdline
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:767,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:768,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:768,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:769,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 731
    functionDepth: 1
    functionLinenumber: 731
    functionLinenumberEnd: 771
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - brpc::PProfService::heap
    - CheckContent
    - brpc::PProfService::cmdline
    - brpc::Controller::ErrorCode
    - EXPECT_GT
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - ClosureChecker::ClosureChecker
    - brpc::PProfService::growth
    - ProfilerFlush
    - getenv
    - brpc::PProfService::profile
    - brpc::PProfService::symbol
    - EXPECT_FALSE
    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: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:786,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:790,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:791,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:792,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:793,1
    - Dst: brpc::DirService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:794,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:795,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:795,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:797,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:799,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:804,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:805,1
    - Dst: SetUpController
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:806,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:807,1
    - Dst: brpc::DirService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:808,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:809,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:809,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:810,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 774
    functionDepth: 1
    functionLinenumber: 774
    functionLinenumberEnd: 812
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - CheckContent
    - brpc::Controller::Controller
    - SetUpController
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::DirService::default_method
    - ClosureChecker::ClosureChecker
    - EXPECT_TRUE
    - CheckErrorText
    - EXPECT_FALSE
    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:819,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:820,1
    - Dst: brpc::IdsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:821,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:822,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:822,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:823,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: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:828,1
    - Dst: brpc::IdsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:829,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:830,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:830,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:831,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:835,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:835,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:836,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:837,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:839,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:840,1
    - Dst: brpc::IdsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:841,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:842,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:842,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:843,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 814
    functionDepth: 1
    functionLinenumber: 814
    functionLinenumberEnd: 845
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - CheckContent
    - brpc::Controller::Controller
    - EXPECT_EQ
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - EXPECT_TRUE
    - ClosureChecker::ClosureChecker
    - butil::string_printf
    - brpc::IdsService::default_method
    - CheckErrorText
    - bthread_id_create
    - EXPECT_FALSE
    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:848,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 850
      start: 847
    functionDepth: 1
    functionLinenumber: 847
    functionLinenumberEnd: 850
    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:859,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 862
      start: 856
    functionDepth: 1
    functionLinenumber: 856
    functionLinenumberEnd: 862
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:870,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:871,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:874,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:876,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:877,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:878,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:879,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:879,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:880,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:881,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:883,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:884,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:886,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:888,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 2
    argNames:
    - expected_th
    - enable_trace
    argTypes:
    - bthread_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 891
    functionName: check_all_bthreads
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - find
    - brpc::Controller::http_request
    - std::string::append
    - brpc::Controller::Failed
    - ClosureChecker::ClosureChecker
    - brpc::BthreadsService::default_method
    - butil::string_printf
    - EXPECT_FALSE
    linkageType: ''
    returnType: bool
    signature: bool check_all_bthreads(bthread_t expected_th, bool enable_trace)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:898,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:899,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:900,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:901,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:901,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:902,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:905,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:906,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:907,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:908,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:909,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:909,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:910,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:913,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:914,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:915,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:916,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:917,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:917,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:918,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:922,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:922,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:923,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:924,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:926,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:927,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:928,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:929,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:929,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:930,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:937,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:937,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:939,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:941,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:942,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:943,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:945,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:946,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:947,1
    - Dst: brpc::BthreadsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:948,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:949,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:949,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:950,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:951,1
    - Dst: find
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:952,1
    - Dst: check_all_bthreads
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:953,1
    - Dst: check_all_bthreads
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:953,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:955,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:957,1
    - Dst: check_all_bthreads
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:957,1
    - Dst: check_all_bthreads
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:957,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:962,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 893
    functionDepth: 2
    functionLinenumber: 893
    functionLinenumberEnd: 964
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - LOG
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::BthreadsService::default_method
    - CheckErrorText
    - EXPECT_FALSE
    - CheckContent
    - EXPECT_EQ
    - find
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - ClosureChecker::ClosureChecker
    - bthread_usleep
    - butil::string_printf
    - check_all_bthreads
    - bthread_start_background
    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:971,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:972,1
    - Dst: brpc::SocketsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:973,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:974,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:974,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:975,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:978,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:979,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:980,1
    - Dst: brpc::SocketsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:981,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:982,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:982,1
    - Dst: CheckErrorText
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:983,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:988,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:988,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:989,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:990,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:992,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:993,1
    - Dst: brpc::SocketsService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:994,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:995,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:995,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:996,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 998
      start: 966
    functionDepth: 1
    functionLinenumber: 966
    functionLinenumberEnd: 998
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - CheckContent
    - brpc::Controller::Controller
    - EXPECT_EQ
    - Socket::Create
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - brpc::SocketsService::default_method
    - EXPECT_TRUE
    - ClosureChecker::ClosureChecker
    - butil::string_printf
    - CheckErrorText
    - EXPECT_FALSE
    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:1005,1
    - Dst: ClosureChecker::ClosureChecker
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1006,1
    - Dst: brpc::MemoryService::default_method
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1007,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1008,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1008,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1009,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1010,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1011,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1012,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1013,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1014,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1015,1
    - Dst: CheckContent
      Src: /src/brpc/test/brpc_builtin_service_unittest.cpp:1016,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1017
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1017
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_builtin_service_unittest.cpp
    functionUses: 0
    functionsReached:
    - CheckContent
    - brpc::MemoryService::default_method
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - ClosureChecker::ClosureChecker
    - EXPECT_FALSE
    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:
    - srand
    - time
    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:
    - printf
    - erase
    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:
    - ARRAY_SIZE
    - ASSERT_EQ
    - describe_resources<MyObject>
    - return_resource
    - printf
    - get_resource<MyObject>
    - memcmp
    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:
    - clear_resources<YellObj>
    - ASSERT_TRUE
    - clear
    - address_resource
    - ASSERT_EQ
    - get_resource
    - get_resource<NonDefaultCtorObject>
    - return_resource
    - empty
    - printf
    - size
    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:
    - butil::Timer::stop
    - printf
    - address_resource
    - int::int
    - describe_resources<int>
    - return_resource
    - ASSERT_EQ
    - get_resource
    - butil::Timer::start
    - butil::unsafe_address_resource
    - butil::Timer::n_elapsed
    - clear_resources<int>
    - 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:
    - SilentObj::SilentObj
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::push_back
    - std::vector::clear
    - printf
    - start
    - describe_resources<SilentObj>
    - return_resource
    - get_resource
    - butil::Timer::start
    - stop
    - std::vector::size
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - n_elapsed
    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:
    - D
    - std::vector::clear
    - get_resource
    - butil::Timer::start
    - std::vector::size
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::end
    - stop
    - printf
    - butil::Timer::Timer
    - std::vector::push_back
    - start
    - std::random_shuffle
    - std::vector::begin
    - butil::Timer::n_elapsed
    - pthread_self
    - return_resource
    - n_elapsed
    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:
    - n_elapsed
    - std::vector::reserve
    - D
    - std::vector::push_back
    - D::D
    - std::vector::clear
    - printf
    - std::vector::end
    - start
    - std::random_shuffle
    - std::vector::begin
    - std::vector::size
    - stop
    - butil::Timer::Timer
    - pthread_self
    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:
    - ARRAY_SIZE
    - pthread_create
    - describe_resources<D>
    - pthread_join
    - ASSERT_EQ
    - memcmp
    - 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:
    - std::vector::reserve
    - std::vector::push_back
    - describe_resources<int>
    - ASSERT_EQ
    - get_resource
    - std::vector::size
    - clear_resources<int>
    - std::vector::capacity
    - std::make_pair
    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:
    - srand
    - time
    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:
    - printf
    - erase
    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:
    - ARRAY_SIZE
    - ASSERT_EQ
    - describe_resources<MyObject>
    - return_resource
    - printf
    - get_resource<MyObject>
    - memcmp
    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:
    - clear_resources<YellObj>
    - ASSERT_TRUE
    - clear
    - address_resource
    - ASSERT_EQ
    - get_resource
    - get_resource<NonDefaultCtorObject>
    - return_resource
    - empty
    - printf
    - size
    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:
    - butil::Timer::stop
    - printf
    - address_resource
    - int::int
    - describe_resources<int>
    - return_resource
    - ASSERT_EQ
    - get_resource
    - butil::Timer::start
    - butil::unsafe_address_resource
    - butil::Timer::n_elapsed
    - clear_resources<int>
    - 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:
    - SilentObj::SilentObj
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::push_back
    - std::vector::clear
    - printf
    - start
    - describe_resources<SilentObj>
    - return_resource
    - get_resource
    - butil::Timer::start
    - stop
    - std::vector::size
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - n_elapsed
    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:
    - D
    - std::vector::clear
    - get_resource
    - butil::Timer::start
    - std::vector::size
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::end
    - stop
    - printf
    - butil::Timer::Timer
    - std::vector::push_back
    - start
    - std::random_shuffle
    - std::vector::begin
    - butil::Timer::n_elapsed
    - pthread_self
    - return_resource
    - n_elapsed
    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:
    - n_elapsed
    - std::vector::reserve
    - D
    - std::vector::push_back
    - D::D
    - std::vector::clear
    - printf
    - std::vector::end
    - start
    - std::random_shuffle
    - std::vector::begin
    - std::vector::size
    - stop
    - butil::Timer::Timer
    - pthread_self
    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:
    - ARRAY_SIZE
    - pthread_create
    - describe_resources<D>
    - pthread_join
    - ASSERT_EQ
    - memcmp
    - 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:
    - std::vector::reserve
    - std::vector::push_back
    - describe_resources<int>
    - ASSERT_EQ
    - get_resource
    - std::vector::size
    - clear_resources<int>
    - std::vector::capacity
    - std::make_pair
    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:
    - butil::Bind
    - EXPECT_EQ
    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:
    - butil::Bind
    - EXPECT_EQ
    - butil::ScopedClosureRunner::Release
    - butil::Closure::Run
    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:
    - butil::ScopedClosureRunner::Reset
    - butil::Bind
    - EXPECT_EQ
    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:
    - butil::Bind
    - EXPECT_EQ
    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:
    - butil::Bind
    - EXPECT_EQ
    - butil::ScopedClosureRunner::Release
    - butil::Closure::Run
    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:
    - butil::ScopedClosureRunner::Reset
    - butil::Bind
    - EXPECT_EQ
    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:
    - Signal
    - EXPECT_TRUE
    - 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:
    - GetNext
    - Signal
    - Wait
    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:
    - Signal
    - EXPECT_TRUE
    - 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:
    - GetNext
    - Signal
    - Wait
    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:
    - DelegateSimpleThread::HasBeenStarted
    - EXPECT_EQ
    - DelegateSimpleThread::HasBeenJoined
    - EXPECT_TRUE
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::Join
    - EXPECT_FALSE
    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:
    - WaitableEvent::Wait
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::Join
    - EXPECT_FALSE
    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:
    - WaitableEvent::Wait
    - EXPECT_EQ
    - DelegateSimpleThread::tid
    - std::string
    - DelegateSimpleThread::name_prefix
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::name
    - butil::IntToString
    - DelegateSimpleThread::Join
    - EXPECT_FALSE
    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
    - EXPECT_EQ
    - DelegateSimpleThreadPool::AddWork
    - DelegateSimpleThreadPool::Start
    - 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:
    - Signal
    - EXPECT_TRUE
    - 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:
    - GetNext
    - Signal
    - Wait
    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:
    - Signal
    - EXPECT_TRUE
    - 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:
    - GetNext
    - Signal
    - Wait
    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:
    - DelegateSimpleThread::HasBeenStarted
    - EXPECT_EQ
    - DelegateSimpleThread::HasBeenJoined
    - EXPECT_TRUE
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::Join
    - EXPECT_FALSE
    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:
    - WaitableEvent::Wait
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::Join
    - EXPECT_FALSE
    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:
    - WaitableEvent::Wait
    - EXPECT_EQ
    - DelegateSimpleThread::tid
    - std::string
    - DelegateSimpleThread::name_prefix
    - WaitableEvent::IsSignaled
    - EXPECT_TRUE
    - DelegateSimpleThread::Start
    - DelegateSimpleThread::name
    - butil::IntToString
    - DelegateSimpleThread::Join
    - EXPECT_FALSE
    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
    - EXPECT_EQ
    - DelegateSimpleThreadPool::AddWork
    - DelegateSimpleThreadPool::Start
    - 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:
    - c_str
    - EXPECT_TRUE
    - setlocale
    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:
    - c_str
    - setlocale
    - 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:
    - c_str
    - EXPECT_TRUE
    - setlocale
    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:
    - c_str
    - setlocale
    - 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: 67
    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: 0
    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:
    - generate_foo
    - ASSERT_EQ
    - 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: 68
    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: 1
    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:
    - generate_foo
    - ASSERT_EQ
    - 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:
    - srand
    - time
    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:
    - CallableObj
    - DBD::Read
    - ASSERT_EQ
    - Read
    - DBD::Modify
    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
    - bthread_usleep
    - static_cast<DBD*>
    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::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:177,1
    - Dst: butil::cpuwide_time_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:
    - ARRAY_SIZE
    - bthread_join
    - DBD::Read
    - butil::cpuwide_time_ms
    - ASSERT_EQ
    - usleep
    - DBD::Modify
    - bthread_start_urgent
    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
    - butil::Timer::Timer
    - auto::dbd::Read
    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::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:280,1
    - Dst: butil::cpuwide_time_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:
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - LOG
    - butil::cpuwide_time_ms
    - ProfilerStart
    - ASSERT_EQ
    - ProfilerStop
    - usleep
    - snprintf
    - butil::class_name<DBD>
    - DBD::Modify
    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:
    - weight::volatile_value
    - left::load
    - ASSERT_EQ
    - std::vector::size
    - std::vector::resize
    - size
    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:
    - weight::volatile_value
    - server_map::seek
    - server_map::size
    - weight_tree::size
    - ASSERT_TRUE
    - _left_weights::size
    - ASSERT_EQ
    - ValidateWeightTree
    - _total::load
    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:
    - Socket::SetFailed
    - LALB::AddServer
    - std::vector::push_back
    - Socket::Create
    - ASSERT_TRUE
    - LALB::_total::load
    - std::vector::end
    - ValidateLALB
    - LALB::RemoveServer
    - std::random_shuffle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - std::vector::size
    - snprintf
    - std::vector::pop_back
    - str2endpoint
    - std::vector::back
    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:
    - SelectArg*::hash
    - brpc::SocketUniquePtr::id
    - berror
    - CountMap::CountMap
    - pthread_self
    - brpc::LoadBalancer*::SelectServer
    - rand
    - LOG_IF
    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:
    - butil::Timer::u_elapsed
    - std::vector::assign
    - pthread_join
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - std::vector::size
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - std::vector::pop_back
    - brpc::LoadBalancer*::AddServer
    - pthread_create
    - butil::Timer::stop
    - ASSERT_TRUE
    - Socket::Create
    - CountMap::size
    - brpc::LoadBalancer*::RemoveServersInBatch
    - std::vector::end
    - brpc::LoadBalancer*::AddServersInBatch
    - snprintf
    - butil::Timer::Timer
    - str2endpoint
    - LALB::LALB
    - std::vector::push_back
    - CountMap*::begin
    - brpc::SocketUniquePtr::SetLogOff
    - brpc::SetTrackMeAddress
    - std::random_shuffle
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - ASSERT_GT
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - brpc::LoadBalancer*::SelectServer
    - Socket::SetFailed
    - ARRAY_SIZE
    - CountMap*::end
    - CountMap::erase
    - ASSERT_NE
    - ValidateLALB
    - SaveRecycle::SaveRecycle
    - butil::class_name_str
    - LALB*::_total::load
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    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:
    - pthread_join
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - ASSERT_EQ
    - std::vector::size
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - brpc::LoadBalancer*::AddServer
    - std::string::substr
    - pthread_create
    - ASSERT_TRUE
    - Socket::Create
    - CountMap::size
    - std::string::find_last_of
    - snprintf
    - std::to_string
    - ProfilerStart
    - c_str
    - str2endpoint
    - LALB::LALB
    - std::vector::push_back
    - CountMap*::begin
    - butil::fast_rand_less_than
    - sqrt
    - ProfilerStop
    - butil::EndPoint::EndPoint
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - std::ostringstream::str
    - brpc::LoadBalancer*::Describe
    - Socket::SetFailed
    - ARRAY_SIZE
    - CountMap*::end
    - static_cast<double>
    - bthread_usleep
    - CountMap::erase
    - ASSERT_NE
    - SaveRecycle::SaveRecycle
    - butil::class_name_str
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    - std::stoi
    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:
    - Socket::SetFailed
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::remote_side
    - std::vector::push_back
    - Socket::Create
    - brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - brpc::policy::ConsistentHashingLoadBalancer::AddServer
    - sqrt
    - SaveRecycle::SaveRecycle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - std::vector::size
    - brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    - brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    - std::map::size
    - str2endpoint
    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:
    - std::vector::emplace_back
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::remote_side
    - EXPECT_EQ
    - ASSERT_TRUE
    - Socket::Create
    - brpc::SocketUniquePtr::SetLogOff
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::SetTrackMeAddress
    - SaveRecycle::SaveRecycle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - EXPECT_TRUE
    - butil::StringToInt
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    - std::map::size
    - str2endpoint
    - EXPECT_FALSE
    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:918,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:921,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:921,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:927,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:927,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:928,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:936,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:936,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:937,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 938
      start: 897
    functionDepth: 1
    functionLinenumber: 897
    functionLinenumberEnd: 938
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ExcludedServers::Destroy
    - ARRAY_SIZE
    - EXPECT_EQ
    - Socket::Create
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::SocketUniquePtr::SetLogOff
    - brpc::SetTrackMeAddress
    - SaveRecycle::SaveRecycle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - EXPECT_TRUE
    - brpc::ExcludedServers*::Add
    - brpc::ExcludedServers::Create
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    - str2endpoint
    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:958,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:961,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:961,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:966,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:966,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:967,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:971,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:974,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:974,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:976,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:991,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:991,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:992,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:992,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:993,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1002,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1002,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1013,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1015,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1018,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1019,1
    - Dst: std::map::clear
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1021,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 940
    functionDepth: 1
    functionLinenumber: 940
    functionLinenumberEnd: 1027
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::size
    - butil::StringToInt
    - brpc::SocketUniquePtr::remote_side
    - ASSERT_TRUE
    - Socket::Create
    - EXPECT_TRUE
    - butil::endpoint2str
    - ASSERT_STREQ
    - brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    - str2endpoint
    - EXPECT_FALSE
    - std::vector::emplace_back
    - EXPECT_EQ
    - butil::EndPoint::EndPoint
    - std::map::clear
    - brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    - Socket::SetFailed
    - ARRAY_SIZE
    - ASSERT_GE
    - SaveRecycle::SaveRecycle
    - ASSERT_LE
    - std::map::size
    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:1035,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1035,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1036,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1036,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1037,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1037,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1039,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1042,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1044,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1048,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1048,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1050,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1051,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1059,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1059,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1063,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1063,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1069,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1071,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1074,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1074,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1075,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: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1084,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1084,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1086,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1086,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1095,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1095,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1096,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1102,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1029
    functionDepth: 1
    functionLinenumber: 1029
    functionLinenumberEnd: 1105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::_ninflight_app_health_check::store
    - brpc::SocketUniquePtr::remote_side
    - std::vector::push_back
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::LoadBalancer*::AddServer
    - std::vector::size
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - brpc::LoadBalancer*::SelectServer
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, health_check_no_valid_server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1112,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1113,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: brpc::policy::RandomizedLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1119,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1119,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1122,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1124,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1130,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1130,1
    - Dst: std::unique_ptr::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1136,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1136,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1138,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1140,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1143,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: brpc::SocketUniquePtr::Revive
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1148,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1150,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1168,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1171,1
    - Dst: abs
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1171,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1176,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1176,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1178
      start: 1107
    functionDepth: 1
    functionLinenumber: 1107
    functionLinenumberEnd: 1178
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetFailed
    - ASSERT_TRUE
    - Socket::Create
    - brpc::policy::RoundRobinLoadBalancer::New
    - abs
    - std::unique_ptr::unique_ptr
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - id
    - std::unique_ptr::SelectServer
    - str2endpoint
    - brpc::SocketUniquePtr::Revive
    - butil::fast_rand_less_than
    - std::unique_ptr::reset
    - brpc::SetTrackMeAddress
    - butil::EndPoint::EndPoint
    - ARRAY_SIZE
    - bthread_usleep
    - brpc::policy::RandomizedLoadBalancer::New
    - std::unique_ptr::AddServer
    - ASSERT_LT
    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: 1184
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1184
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 33
    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: 1185
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1185
    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:1193,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1196,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1197,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1198,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1200,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1201,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: 1204
      start: 1186
    functionDepth: 1
    functionLinenumber: 1186
    functionLinenumberEnd: 1204
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - fetch_add
    - bthread_usleep
    - test::EchoResponse*::set_message
    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:1215,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1216,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1217,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1218,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1222
      start: 1214
    functionDepth: 0
    functionLinenumber: 1214
    functionLinenumberEnd: 1222
    functionName: Done::Run
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - Failed
    - ErrorCode
    - 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:1231,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1232,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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1237
      start: 1228
    functionDepth: 1
    functionLinenumber: 1228
    functionLinenumberEnd: 1237
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ARRAY_SIZE
    - butil::fast_rand_less_than
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    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:1240,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1243,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1244,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1248,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1255,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1255,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1256,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1256,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1259,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1264,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1265,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1269,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1272,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1273,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1277,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1279,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1280,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1280,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1283,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1285,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1286,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1286,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1288,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1289,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1290,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1291,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1292,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1293,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1299,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1299,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1300,1
    - Dst: store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1301,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1305,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1306,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1307,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1308,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1311,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1311,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1239
    functionDepth: 1
    functionLinenumber: 1239
    functionLinenumberEnd: 1312
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - store
    - ASSERT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - Done::Done
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - Done*::req::set_message
    - brpc::Server::Server
    - brpc::Server::Start
    - butil::fast_rand_less_than
    - brpc::ChannelOptions::ChannelOptions
    - ARRAY_SIZE
    - load
    - bthread_usleep
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - butil::cpuwide_time_ms
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, revived_from_all_failed_intergrated)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1351,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1355,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1356,1
    - Dst: LALB::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1356,1
    - Dst: LALB::Describe
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1362,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1363,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1364,1
    - Dst: strtoll
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1366,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1366,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1366,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1377,1
    - Dst: LALB::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1377,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1378,1
    - Dst: LALB::Feedback
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1380,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1387,1
    - Dst: avg_latency
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1389,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1389,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1390
      start: 1347
    functionDepth: 1
    functionLinenumber: 1347
    functionLinenumberEnd: 1390
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - strlen
    - butil::gettimeofday_us
    - LALB::Describe
    - ASSERT_EQ
    - LALB::Feedback
    - avg_latency
    - strtoll
    - ASSERT_TRUE
    - Socket::Create
    - LALB::SelectServer
    - EXPECT_GT
    - str2endpoint
    - std::string::c_str
    - butil::EndPoint::EndPoint
    - std::ostringstream::str
    - Socket::SetFailed
    - LALB::AddServer
    - std::string::find
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, la_records_latency_with_consistent_time_source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1393,1
    - Dst: brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1394,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1395,1
    - Dst: brpc::LoadBalancerWithNaming::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1398,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1400,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1400,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1401,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1405,1
    - Dst: brpc::LoadBalancerWithNaming::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1406
      start: 1392
    functionDepth: 1
    functionLinenumber: 1392
    functionLinenumberEnd: 1406
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - brpc::SocketMapKey
    - brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
    - brpc::GlobalInitializeOrDie
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::SocketMapFind
    - brpc::LoadBalancerWithNaming::SelectServer
    - CHECK_EQ
    - brpc::LoadBalancerWithNaming::Init
    - str2endpoint
    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:
    - srand
    - time
    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:
    - CallableObj
    - DBD::Read
    - ASSERT_EQ
    - Read
    - DBD::Modify
    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
    - bthread_usleep
    - static_cast<DBD*>
    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::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:177,1
    - Dst: butil::cpuwide_time_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:
    - ARRAY_SIZE
    - bthread_join
    - DBD::Read
    - butil::cpuwide_time_ms
    - ASSERT_EQ
    - usleep
    - DBD::Modify
    - bthread_start_urgent
    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
    - butil::Timer::Timer
    - auto::dbd::Read
    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::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:280,1
    - Dst: butil::cpuwide_time_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:
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - LOG
    - butil::cpuwide_time_ms
    - ProfilerStart
    - ASSERT_EQ
    - ProfilerStop
    - usleep
    - snprintf
    - butil::class_name<DBD>
    - DBD::Modify
    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:
    - weight::volatile_value
    - left::load
    - ASSERT_EQ
    - std::vector::size
    - std::vector::resize
    - size
    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:
    - weight::volatile_value
    - server_map::seek
    - server_map::size
    - weight_tree::size
    - ASSERT_TRUE
    - _left_weights::size
    - ASSERT_EQ
    - ValidateWeightTree
    - _total::load
    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:
    - Socket::SetFailed
    - LALB::AddServer
    - std::vector::push_back
    - Socket::Create
    - ASSERT_TRUE
    - LALB::_total::load
    - std::vector::end
    - ValidateLALB
    - LALB::RemoveServer
    - std::random_shuffle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - std::vector::size
    - snprintf
    - std::vector::pop_back
    - str2endpoint
    - std::vector::back
    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:
    - SelectArg*::hash
    - brpc::SocketUniquePtr::id
    - berror
    - CountMap::CountMap
    - pthread_self
    - brpc::LoadBalancer*::SelectServer
    - rand
    - LOG_IF
    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:
    - butil::Timer::u_elapsed
    - std::vector::assign
    - pthread_join
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - std::vector::size
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - std::vector::pop_back
    - brpc::LoadBalancer*::AddServer
    - pthread_create
    - butil::Timer::stop
    - ASSERT_TRUE
    - Socket::Create
    - CountMap::size
    - brpc::LoadBalancer*::RemoveServersInBatch
    - std::vector::end
    - brpc::LoadBalancer*::AddServersInBatch
    - snprintf
    - butil::Timer::Timer
    - str2endpoint
    - LALB::LALB
    - std::vector::push_back
    - CountMap*::begin
    - brpc::SocketUniquePtr::SetLogOff
    - brpc::SetTrackMeAddress
    - std::random_shuffle
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - ASSERT_GT
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - brpc::LoadBalancer*::SelectServer
    - Socket::SetFailed
    - ARRAY_SIZE
    - CountMap*::end
    - CountMap::erase
    - ASSERT_NE
    - ValidateLALB
    - SaveRecycle::SaveRecycle
    - butil::class_name_str
    - LALB*::_total::load
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    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:
    - pthread_join
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - ASSERT_EQ
    - std::vector::size
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - brpc::LoadBalancer*::AddServer
    - std::string::substr
    - pthread_create
    - ASSERT_TRUE
    - Socket::Create
    - CountMap::size
    - std::string::find_last_of
    - snprintf
    - std::to_string
    - ProfilerStart
    - c_str
    - str2endpoint
    - LALB::LALB
    - std::vector::push_back
    - CountMap*::begin
    - butil::fast_rand_less_than
    - sqrt
    - ProfilerStop
    - butil::EndPoint::EndPoint
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - std::ostringstream::str
    - brpc::LoadBalancer*::Describe
    - Socket::SetFailed
    - ARRAY_SIZE
    - CountMap*::end
    - static_cast<double>
    - bthread_usleep
    - CountMap::erase
    - ASSERT_NE
    - SaveRecycle::SaveRecycle
    - butil::class_name_str
    - brpc::policy::ConsistentHashingLoadBalancer::ConsistentHashingLoadBalancer
    - std::stoi
    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:
    - Socket::SetFailed
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::remote_side
    - std::vector::push_back
    - Socket::Create
    - brpc::policy::ConsistentHashingLoadBalancer::RemoveServersInBatch
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - brpc::policy::ConsistentHashingLoadBalancer::AddServer
    - sqrt
    - SaveRecycle::SaveRecycle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - std::vector::size
    - brpc::policy::ConsistentHashingLoadBalancer::SelectServer
    - brpc::policy::ConsistentHashingLoadBalancer::AddServersInBatch
    - std::map::size
    - str2endpoint
    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:
    - std::vector::emplace_back
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::remote_side
    - EXPECT_EQ
    - ASSERT_TRUE
    - Socket::Create
    - brpc::SocketUniquePtr::SetLogOff
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::SetTrackMeAddress
    - SaveRecycle::SaveRecycle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - EXPECT_TRUE
    - butil::StringToInt
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    - std::map::size
    - str2endpoint
    - EXPECT_FALSE
    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:918,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:919,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:921,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:921,1
    - Dst: brpc::ExcludedServers*::Add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:927,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:927,1
    - Dst: brpc::SocketUniquePtr::SetLogOff
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:928,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:936,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:936,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:937,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 938
      start: 897
    functionDepth: 1
    functionLinenumber: 897
    functionLinenumberEnd: 938
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ExcludedServers::Destroy
    - ARRAY_SIZE
    - EXPECT_EQ
    - Socket::Create
    - brpc::policy::WeightedRoundRobinLoadBalancer::AddServer
    - brpc::SocketUniquePtr::SetLogOff
    - brpc::SetTrackMeAddress
    - SaveRecycle::SaveRecycle
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - EXPECT_TRUE
    - brpc::ExcludedServers*::Add
    - brpc::ExcludedServers::Create
    - brpc::policy::WeightedRoundRobinLoadBalancer::SelectServer
    - str2endpoint
    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:958,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:961,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:961,1
    - Dst: SaveRecycle::SaveRecycle
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:965,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:966,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:966,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:967,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:971,1
    - Dst: butil::StringToInt
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:971,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:974,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:974,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:976,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:991,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:991,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:992,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:992,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:993,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1002,1
    - Dst: std::map::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1002,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1013,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1015,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1018,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1019,1
    - Dst: std::map::clear
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1021,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1023,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1025,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1027
      start: 940
    functionDepth: 1
    functionLinenumber: 940
    functionLinenumberEnd: 1027
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - std::vector::size
    - butil::StringToInt
    - brpc::SocketUniquePtr::remote_side
    - ASSERT_TRUE
    - Socket::Create
    - EXPECT_TRUE
    - butil::endpoint2str
    - ASSERT_STREQ
    - brpc::policy::WeightedRandomizedLoadBalancer::AddServer
    - str2endpoint
    - EXPECT_FALSE
    - std::vector::emplace_back
    - EXPECT_EQ
    - butil::EndPoint::EndPoint
    - std::map::clear
    - brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    - Socket::SetFailed
    - ARRAY_SIZE
    - ASSERT_GE
    - SaveRecycle::SaveRecycle
    - ASSERT_LE
    - std::map::size
    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:1035,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1035,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1036,1
    - Dst: brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1036,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1037,1
    - Dst: brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1037,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1039,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1042,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1043,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1044,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1044,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1048,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1048,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1050,1
    - Dst: brpc::LoadBalancer*::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1051,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1059,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1059,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1063,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1063,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1064,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1069,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1069,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1071,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1071,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1074,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1074,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1075,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: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1084,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1084,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1085,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1086,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1086,1
    - Dst: brpc::SocketUniquePtr::_ninflight_app_health_check::store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1087,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1095,1
    - Dst: brpc::LoadBalancer*::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1095,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1096,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1102,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1029
    functionDepth: 1
    functionLinenumber: 1029
    functionLinenumberEnd: 1105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::_ninflight_app_health_check::store
    - brpc::SocketUniquePtr::remote_side
    - std::vector::push_back
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - brpc::policy::RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::LoadBalancer*::AddServer
    - std::vector::size
    - brpc::policy::WeightedRoundRobinLoadBalancer::WeightedRoundRobinLoadBalancer
    - brpc::policy::RandomizedLoadBalancer::RandomizedLoadBalancer
    - brpc::LoadBalancer*::SelectServer
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, health_check_no_valid_server)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1112,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1113,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: brpc::policy::RandomizedLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1116,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1119,1
    - Dst: brpc::policy::RoundRobinLoadBalancer::New
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1119,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1122,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1124,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1130,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1130,1
    - Dst: std::unique_ptr::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1136,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1136,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1138,1
    - Dst: SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1140,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1143,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: id
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1147,1
    - Dst: brpc::SocketUniquePtr::Revive
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1148,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1150,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1162,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1168,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1171,1
    - Dst: abs
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1171,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1176,1
    - Dst: std::unique_ptr::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1176,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1178
      start: 1107
    functionDepth: 1
    functionLinenumber: 1107
    functionLinenumberEnd: 1178
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - SetFailed
    - ASSERT_TRUE
    - Socket::Create
    - brpc::policy::RoundRobinLoadBalancer::New
    - abs
    - std::unique_ptr::unique_ptr
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - id
    - std::unique_ptr::SelectServer
    - str2endpoint
    - brpc::SocketUniquePtr::Revive
    - butil::fast_rand_less_than
    - std::unique_ptr::reset
    - brpc::SetTrackMeAddress
    - butil::EndPoint::EndPoint
    - ARRAY_SIZE
    - bthread_usleep
    - brpc::policy::RandomizedLoadBalancer::New
    - std::unique_ptr::AddServer
    - ASSERT_LT
    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: 1184
      start: 1183
    functionDepth: 0
    functionLinenumber: 1183
    functionLinenumberEnd: 1184
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 34
    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: 1185
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1185
    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:1193,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1196,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1197,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1198,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1200,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1201,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: 1204
      start: 1186
    functionDepth: 1
    functionLinenumber: 1186
    functionLinenumberEnd: 1204
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - fetch_add
    - bthread_usleep
    - test::EchoResponse*::set_message
    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:1215,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1216,1
    - Dst: ErrorCode
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1217,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1218,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1222
      start: 1214
    functionDepth: 0
    functionLinenumber: 1214
    functionLinenumberEnd: 1222
    functionName: Done::Run
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - Failed
    - ErrorCode
    - 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:1231,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1232,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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1237
      start: 1228
    functionDepth: 1
    functionLinenumber: 1228
    functionLinenumberEnd: 1237
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ARRAY_SIZE
    - butil::fast_rand_less_than
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    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:1240,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1241,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1243,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1244,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1248,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1249,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1255,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1255,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1256,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1256,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1259,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1264,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1265,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1269,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1272,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1273,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1277,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1279,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1280,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1280,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1283,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1284,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1285,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1285,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1286,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1286,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1288,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1289,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1290,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1291,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1292,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1293,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1299,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1299,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1300,1
    - Dst: store
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1301,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1305,1
    - Dst: Done*::req::set_message
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1306,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1307,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1308,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1311,1
    - Dst: load
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1311,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 34
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1239
    functionDepth: 1
    functionLinenumber: 1239
    functionLinenumberEnd: 1312
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - store
    - ASSERT_EQ
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - Done::Done
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - Done*::req::set_message
    - brpc::Server::Server
    - brpc::Server::Start
    - butil::fast_rand_less_than
    - brpc::ChannelOptions::ChannelOptions
    - ARRAY_SIZE
    - load
    - bthread_usleep
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - butil::cpuwide_time_ms
    - GFLAGS_NAMESPACE::SetCommandLineOption
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, revived_from_all_failed_intergrated)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1351,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1351,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1355,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1356,1
    - Dst: LALB::AddServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1356,1
    - Dst: LALB::Describe
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1362,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1363,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1364,1
    - Dst: strtoll
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1366,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1366,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1366,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1377,1
    - Dst: LALB::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1377,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1378,1
    - Dst: LALB::Feedback
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1380,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1387,1
    - Dst: avg_latency
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1389,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1389,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1390
      start: 1347
    functionDepth: 1
    functionLinenumber: 1347
    functionLinenumberEnd: 1390
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - strlen
    - butil::gettimeofday_us
    - LALB::Describe
    - ASSERT_EQ
    - LALB::Feedback
    - avg_latency
    - strtoll
    - ASSERT_TRUE
    - Socket::Create
    - LALB::SelectServer
    - EXPECT_GT
    - str2endpoint
    - std::string::c_str
    - butil::EndPoint::EndPoint
    - std::ostringstream::str
    - Socket::SetFailed
    - LALB::AddServer
    - std::string::find
    - bthread_usleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(LoadBalancerTest, la_records_latency_with_consistent_time_source)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1393,1
    - Dst: brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1394,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1395,1
    - Dst: brpc::LoadBalancerWithNaming::Init
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1395,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1398,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1400,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1400,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1401,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1405,1
    - Dst: brpc::LoadBalancerWithNaming::SelectServer
      Src: /src/brpc/test/brpc_load_balancer_unittest.cpp:1405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1406
      start: 1392
    functionDepth: 1
    functionLinenumber: 1392
    functionLinenumberEnd: 1406
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_load_balancer_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - brpc::SocketMapKey
    - brpc::LoadBalancerWithNaming::LoadBalancerWithNaming
    - brpc::GlobalInitializeOrDie
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - brpc::SocketMapFind
    - brpc::LoadBalancerWithNaming::SelectServer
    - CHECK_EQ
    - brpc::LoadBalancerWithNaming::Init
    - str2endpoint
    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::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - EXPECT_TRUE
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    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::Unretained
    - EXPECT_EQ
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - CancelableClosure::IsCancelled
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - EXPECT_TRUE
    - CancelableClosure::Cancel
    - TestRefCounted::TestRefCounted
    - EXPECT_FALSE
    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::IsCancelled
    - ASSERT_FALSE
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Reset
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    - EXPECT_FALSE
    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::IsCancelled
    - butil::Unretained
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Bind
    - CancelableClosure::Cancel
    - EXPECT_FALSE
    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::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - EXPECT_TRUE
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    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::Unretained
    - EXPECT_EQ
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - CancelableClosure::IsCancelled
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - EXPECT_TRUE
    - CancelableClosure::Cancel
    - TestRefCounted::TestRefCounted
    - EXPECT_FALSE
    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::IsCancelled
    - ASSERT_FALSE
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Reset
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    - EXPECT_FALSE
    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::IsCancelled
    - butil::Unretained
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Bind
    - CancelableClosure::Cancel
    - EXPECT_FALSE
    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::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - EXPECT_TRUE
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    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::Unretained
    - EXPECT_EQ
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - CancelableClosure::IsCancelled
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - EXPECT_TRUE
    - CancelableClosure::Cancel
    - TestRefCounted::TestRefCounted
    - EXPECT_FALSE
    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::IsCancelled
    - ASSERT_FALSE
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Reset
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    - EXPECT_FALSE
    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::IsCancelled
    - butil::Unretained
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Bind
    - CancelableClosure::Cancel
    - EXPECT_FALSE
    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::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Cancel
    - EXPECT_TRUE
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    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::Unretained
    - EXPECT_EQ
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    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:
    - CancelableClosure::IsCancelled
    - scoped_refptr::HasOneRef
    - scoped_refptr::get
    - EXPECT_TRUE
    - CancelableClosure::Cancel
    - TestRefCounted::TestRefCounted
    - EXPECT_FALSE
    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::IsCancelled
    - ASSERT_FALSE
    - butil::Unretained
    - EXPECT_EQ
    - CancelableClosure::Reset
    - butil::Bind
    - butil::Closure::Run
    - CancelableClosure::callback
    - butil::Closure::is_null
    - EXPECT_FALSE
    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::IsCancelled
    - butil::Unretained
    - CancelableClosure::Reset
    - EXPECT_TRUE
    - butil::Bind
    - CancelableClosure::Cancel
    - EXPECT_FALSE
    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:
    - bvar::MultiDimension::hide
    - bvar::MultiDimension::expose_as
    - ASSERT_TRUE
    - std::vector::push_back
    - std::vector::clear
    - bvar::MultiDimension::count_stats
    - bvar::MultiDimension::name
    - ASSERT_EQ
    - bvar::MultiDimension::get_stats
    - ASSERT_STREQ
    - bvar::MVariableBase::list_exposed
    - std::vector::size
    - bvar::MultiDimension::expose
    - std::vector::pop_back
    - bvar::MVariableBase::count_exposed
    linkageType: ''
    returnType: void
    signature: void TEST_F(MVariableTest, expose)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:126,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:127,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:128,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:129,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:131,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:132,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:133,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:134,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:138,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:139,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:144,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:148,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:149,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:153,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:154,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:157,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:158,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:162,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:166,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:167,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:171,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:174,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:175,1
    - Dst: bvar::MultiDimension::get_stats
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:179,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:180,1
    - Dst: sleep
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:184,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:186,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:187,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:187,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:188,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:188,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:189,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 190
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    - ASSERT_TRUE
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - bvar::MultiDimension::get_stats
    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:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:199,1
    - Dst: bvar::MVariableBase::describe_exposed
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:199,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:200,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:200,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/bvar_mvariable_unittest.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 201
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_mvariable_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - bvar::MVariableBase::describe_exposed
    - ASSERT_EQ
    - ASSERT_STREQ
    - std::ostringstream::str
    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:
    - RUN_ALL_TESTS
    - testing::InitGoogleTest
    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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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::H2Context*::Init
    - LOG
    - CHECK_EQ
    - brpc::policy::H2UnsentResponse::New
    - butil::IOBuf::size
    - brpc::policy::H2Context::H2Context
    - brpc::Controller::Controller
    - brpc::get_client_side_messenger
    - Socket::Create
    - brpc::SocketUniquePtr::get
    - brpc::Controller::response_attachment
    - brpc::Controller::http_response
    - ProfilerStart
    - EXPECT_EQ
    - brpc::SetTrackMeAddress
    - brpc::Controller::http_request
    - butil::cpuwide_time_us
    - ProfilerStop
    - brpc::SocketUniquePtr::initialize_parsing_context
    - butil::IOBuf::clear
    - brpc::policy::H2UnsentResponse*::AppendAndDestroySelf
    - brpc::policy::H2UnsentRequest::New
    - brpc::policy::SerializeHttpRequest
    - butil::IOBuf::IOBuf
    - brpc::policy::H2UnsentRequest*::AppendAndDestroySelf
    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_sse3
    - ASSERT_TRUE
    - butil::CPU::has_sse42
    - butil::CPU::has_sse41
    - butil::CPU::has_ssse3
    - butil::CPU::has_sse2
    - butil::CPU::CPU
    - butil::CPU::has_mmx
    - butil::CPU::has_sse
    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: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: vec2string
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - empty
    - size
    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:
    - bvar::Variable::count_exposed
    - ASSERT_EQ
    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:
    - bvar::Variable::count_exposed
    - bvar::Status::get_value
    - ASSERT_FALSE
    - boost::any_cast<void*>
    - ASSERT_TRUE
    - bvar::Status::set_value
    - bvar::Status::is_hidden
    - bvar::Status::expose
    - LOG
    - bvar::Status::get_description
    - ASSERT_EQ
    - bvar::Status::name
    - bvar::Status::Status
    - std::vector::size
    - boost::any_cast<int>
    - bvar::Status::hide
    - bvar::Variable::describe_exposed
    - bvar::Variable::list_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::Variable::count_exposed
    - bvar::Status::expose
    - ASSERT_EQ
    - bvar::Status::Status
    - bvar::Status::expose_as
    - bvar::Status::name
    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:
    - MyDumper::_list::empty
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::Variable::dump_exposed
    - MyDumper::_list::clear
    - MyDumper::_list::size
    - bvar::DumpOptions::DumpOptions
    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: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:333,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:335,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:336,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:340,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:340,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:342,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:344,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:344,1
    - Dst: vec2string
      Src: /src/brpc/test/bvar_variable_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      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:357,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:357,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:358,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:360,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      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:373,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:373,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:374,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:376,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:387,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:389,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:389,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:390,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:390,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:391,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 392
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    - std::vector::end
    - bvar::LatencyRecorder::count
    - bvar::LatencyRecorder::LatencyRecorder
    - vec2string
    - ASSERT_EQ
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - bvar::LatencyRecorder::expose
    - std::vector::begin
    - std::vector::size
    - std::sort
    - bvar::Variable::list_exposed
    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:396,1
    - Dst: pthread_mutexattr_settype
      Src: /src/brpc/test/bvar_variable_unittest.cpp:397,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bvar_variable_unittest.cpp:399,1
    - Dst: pthread_mutexattr_destroy
      Src: /src/brpc/test/bvar_variable_unittest.cpp:400,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_variable_unittest.cpp:401,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_variable_unittest.cpp:403,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_variable_unittest.cpp:405,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_variable_unittest.cpp:407,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_variable_unittest.cpp:408,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:409,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 410
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_init
    - LOG
    - pthread_mutexattr_settype
    - butil::Timer::start
    - pthread_mutexattr_destroy
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - pthread_mutexattr_init
    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: 0
    functionLinenumber: 42
    functionLinenumberEnd: 53
    functionName: vec2string
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - empty
    - size
    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:
    - bvar::Variable::count_exposed
    - ASSERT_EQ
    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:
    - bvar::Variable::count_exposed
    - bvar::Status::get_value
    - ASSERT_FALSE
    - boost::any_cast<void*>
    - ASSERT_TRUE
    - bvar::Status::set_value
    - bvar::Status::is_hidden
    - bvar::Status::expose
    - LOG
    - bvar::Status::get_description
    - ASSERT_EQ
    - bvar::Status::name
    - bvar::Status::Status
    - std::vector::size
    - boost::any_cast<int>
    - bvar::Status::hide
    - bvar::Variable::describe_exposed
    - bvar::Variable::list_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::Variable::count_exposed
    - bvar::Status::expose
    - ASSERT_EQ
    - bvar::Status::Status
    - bvar::Status::expose_as
    - bvar::Status::name
    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:
    - MyDumper::_list::empty
    - ASSERT_TRUE
    - ASSERT_EQ
    - bvar::Variable::dump_exposed
    - MyDumper::_list::clear
    - MyDumper::_list::size
    - bvar::DumpOptions::DumpOptions
    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: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:331,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:332,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:333,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:335,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:336,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:340,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:340,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:342,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:344,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:344,1
    - Dst: vec2string
      Src: /src/brpc/test/bvar_variable_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:345,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      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:357,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:357,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:358,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:360,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:360,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      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:373,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_variable_unittest.cpp:373,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:374,1
    - Dst: std::sort
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    - Dst: std::vector::end
      Src: /src/brpc/test/bvar_variable_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:376,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_variable_unittest.cpp:376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:378,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:379,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:380,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:384,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_variable_unittest.cpp:387,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:389,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:389,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:390,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:390,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bvar_variable_unittest.cpp:391,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/bvar_variable_unittest.cpp:391,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 392
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    - std::vector::end
    - bvar::LatencyRecorder::count
    - bvar::LatencyRecorder::LatencyRecorder
    - vec2string
    - ASSERT_EQ
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - bvar::LatencyRecorder::expose
    - std::vector::begin
    - std::vector::size
    - std::sort
    - bvar::Variable::list_exposed
    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:396,1
    - Dst: pthread_mutexattr_settype
      Src: /src/brpc/test/bvar_variable_unittest.cpp:397,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/test/bvar_variable_unittest.cpp:399,1
    - Dst: pthread_mutexattr_destroy
      Src: /src/brpc/test/bvar_variable_unittest.cpp:400,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bvar_variable_unittest.cpp:401,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_variable_unittest.cpp:403,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_variable_unittest.cpp:405,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_variable_unittest.cpp:407,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_variable_unittest.cpp:408,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_variable_unittest.cpp:409,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 410
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_variable_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - BAIDU_SCOPED_LOCK
    - pthread_mutex_init
    - LOG
    - pthread_mutexattr_settype
    - butil::Timer::start
    - pthread_mutexattr_destroy
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - pthread_mutexattr_init
    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:414,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/bvar_variable_unittest.cpp:415,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/bvar_variable_unittest.cpp:416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 413
    functionDepth: 0
    functionLinenumber: 413
    functionLinenumberEnd: 417
    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: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: 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: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    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: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: 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: 36
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 36
    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: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    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: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    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: 51
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 51
    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: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    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: 67
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 67
    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: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    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:70,1
    - Dst: time
      Src: /src/brpc/test/object_pool_unittest.cpp:70,1
    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: ObjectPoolTest::SetUp
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - srand
    - time
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/object_pool_unittest.cpp:82,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    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:87,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    - erase
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:95,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:95,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:99,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:99,1
    - Dst: get_object<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:101,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:102,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:103,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - return_object
    - get_object<MyObject>
    - ASSERT_EQ
    - describe_objects<MyObject>
    - printf
    - memcmp
    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: 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)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - value
    - dummy
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    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:115,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:117,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:119,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:121,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:126,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:130,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:132,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:136,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:140,1
    - Dst: return_object
      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:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:146,1
    - Dst: clear_objects<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:150,1
    - Dst: empty
      Src: /src/brpc/test/object_pool_unittest.cpp:150,1
    - Dst: size
      Src: /src/brpc/test/object_pool_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - return_object
    - ASSERT_TRUE
    - clear_objects<YellObj>
    - clear
    - get_object<NonDefaultCtorObject>
    - get_object<YellObj>
    - ASSERT_EQ
    - empty
    - printf
    - size
    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:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:164,1
    - Dst: describe_objects<Foo>
      Src: /src/brpc/test/object_pool_unittest.cpp:164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 165
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_objects<Foo>
    - ASSERT_EQ
    - get_object<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:168,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:173,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:176,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:178,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:179,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:181,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:183,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:185,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:186,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:186,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:189,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:190,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:192,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/object_pool_unittest.cpp:194,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:196,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:197,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:197,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:199,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:200,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_object<int>
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::emplace_back
    - return_object
    - describe_objects<int>
    - printf
    - int::int
    - clear_objects<int>
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    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:212,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:214,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:217,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:217,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:218,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:223,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:225,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:227,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:231,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:233,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:233,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:235,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:236,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:236,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:237,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:240,1
    - Dst: describe_objects<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 244
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - SilentObj::SilentObj
    - std::vector::reserve
    - get_object<SilentObj>
    - return_object
    - butil::Timer::stop
    - std::vector::push_back
    - std::vector::clear
    - printf
    - describe_objects<SilentObj>
    - start
    - butil::Timer::start
    - stop
    - std::vector::size
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - n_elapsed
    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:252,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:253,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:254,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:258,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:259,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:259,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:260,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:262,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:262,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:262,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:265,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:268,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:270,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:272,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:274,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:276,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:276,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:276,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:278,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:279,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:280,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:282,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:285,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:288,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:289,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:289,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:290,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 293
    functionName: get_and_return_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 2
    functionsReached:
    - D
    - std::vector::clear
    - butil::Timer::start
    - std::vector::size
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::end
    - stop
    - printf
    - butil::Timer::Timer
    - std::vector::push_back
    - start
    - std::random_shuffle
    - std::vector::begin
    - butil::Timer::n_elapsed
    - pthread_self
    - return_object
    - get_object<D>
    - n_elapsed
    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:298,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:299,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:300,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:303,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:306,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:308,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:310,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:312,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:314,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:316,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:316,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:316,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:318,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:319,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:322,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:324,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:325,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:325,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 295
    functionDepth: 1
    functionLinenumber: 295
    functionLinenumberEnd: 330
    functionName: new_and_delete_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 2
    functionsReached:
    - n_elapsed
    - std::vector::reserve
    - D
    - std::vector::push_back
    - D::D
    - std::vector::clear
    - printf
    - std::vector::end
    - start
    - std::random_shuffle
    - std::vector::begin
    - std::vector::size
    - stop
    - butil::Timer::Timer
    - pthread_self
    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:333,1
    - Dst: new_and_delete_int
      Src: /src/brpc/test/object_pool_unittest.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 335
    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:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:340,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:340,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:342,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:343,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:348,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:348,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:350,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:351,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:354,1
    - Dst: clear_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:355,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:359,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:359,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 360
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - clear_objects<D>
    - ASSERT_EQ
    - describe_objects<D>
    - memcmp
    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:363,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:364,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:367,1
    - Dst: std::vector::capacity
      Src: /src/brpc/test/object_pool_unittest.cpp:368,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:369,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:371,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:375,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:375,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 362
    functionDepth: 0
    functionLinenumber: 362
    functionLinenumberEnd: 378
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_object<int>
    - std::vector::reserve
    - std::vector::push_back
    - describe_objects<int>
    - ASSERT_EQ
    - clear_objects<int>
    - std::vector::size
    - std::vector::capacity
    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: 67
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 67
    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: 68
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 68
    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:70,1
    - Dst: time
      Src: /src/brpc/test/object_pool_unittest.cpp:70,1
    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: ObjectPoolTest::SetUp
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - srand
    - time
    linkageType: ''
    returnType: void
    signature: void SetUp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/test/object_pool_unittest.cpp:82,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    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:87,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 89
    functionName: ~YellObj()
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - printf
    - erase
    linkageType: ''
    returnType: void
    signature: void ~YellObj()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:95,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:95,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:97,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:99,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:99,1
    - Dst: get_object<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:101,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:102,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:103,1
    - Dst: describe_objects<MyObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - return_object
    - get_object<MyObject>
    - ASSERT_EQ
    - describe_objects<MyObject>
    - printf
    - memcmp
    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: 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)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - value
    - dummy
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 109
    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:115,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:116,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:117,1
    - Dst: get_object<NonDefaultCtorObject>
      Src: /src/brpc/test/object_pool_unittest.cpp:118,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:119,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:121,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:126,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:129,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:130,1
    - Dst: get_object<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:132,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:135,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:136,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:140,1
    - Dst: return_object
      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:144,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:146,1
    - Dst: clear_objects<YellObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:149,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/object_pool_unittest.cpp:150,1
    - Dst: empty
      Src: /src/brpc/test/object_pool_unittest.cpp:150,1
    - Dst: size
      Src: /src/brpc/test/object_pool_unittest.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 151
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - return_object
    - ASSERT_TRUE
    - clear_objects<YellObj>
    - clear
    - get_object<NonDefaultCtorObject>
    - get_object<YellObj>
    - ASSERT_EQ
    - empty
    - printf
    - size
    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:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:159,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:164,1
    - Dst: describe_objects<Foo>
      Src: /src/brpc/test/object_pool_unittest.cpp:164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 165
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - describe_objects<Foo>
    - ASSERT_EQ
    - get_object<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:168,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:173,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:176,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:178,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:179,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:181,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:183,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:185,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:186,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:186,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:189,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:190,1
    - Dst: int::int
      Src: /src/brpc/test/object_pool_unittest.cpp:192,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/object_pool_unittest.cpp:194,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:196,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:197,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:197,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:199,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:200,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:201,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 202
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_object<int>
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::emplace_back
    - return_object
    - describe_objects<int>
    - printf
    - int::int
    - clear_objects<int>
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    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:212,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:214,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:217,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:217,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:218,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:223,1
    - Dst: get_object<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:225,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:227,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:228,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:231,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:233,1
    - Dst: SilentObj::SilentObj
      Src: /src/brpc/test/object_pool_unittest.cpp:233,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:235,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:236,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:236,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:237,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:240,1
    - Dst: describe_objects<SilentObj>
      Src: /src/brpc/test/object_pool_unittest.cpp:243,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 244
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - SilentObj::SilentObj
    - std::vector::reserve
    - get_object<SilentObj>
    - return_object
    - butil::Timer::stop
    - std::vector::push_back
    - std::vector::clear
    - printf
    - describe_objects<SilentObj>
    - start
    - butil::Timer::start
    - stop
    - std::vector::size
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - n_elapsed
    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:252,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:253,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:254,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/object_pool_unittest.cpp:258,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:259,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:259,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/object_pool_unittest.cpp:260,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:262,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:262,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:262,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:265,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:268,1
    - Dst: get_object<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:270,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:272,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:274,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:276,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:276,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:276,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:278,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:279,1
    - Dst: return_object
      Src: /src/brpc/test/object_pool_unittest.cpp:280,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:282,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:285,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:288,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:289,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:289,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:290,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 293
    functionName: get_and_return_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 3
    functionsReached:
    - D
    - std::vector::clear
    - butil::Timer::start
    - std::vector::size
    - std::vector::reserve
    - butil::Timer::stop
    - std::vector::end
    - stop
    - printf
    - butil::Timer::Timer
    - std::vector::push_back
    - start
    - std::random_shuffle
    - std::vector::begin
    - butil::Timer::n_elapsed
    - pthread_self
    - return_object
    - get_object<D>
    - n_elapsed
    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:298,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/object_pool_unittest.cpp:299,1
    - Dst: D
      Src: /src/brpc/test/object_pool_unittest.cpp:300,1
    - Dst: std::vector::clear
      Src: /src/brpc/test/object_pool_unittest.cpp:303,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:306,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:308,1
    - Dst: D::D
      Src: /src/brpc/test/object_pool_unittest.cpp:310,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:312,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:314,1
    - Dst: std::random_shuffle
      Src: /src/brpc/test/object_pool_unittest.cpp:316,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/object_pool_unittest.cpp:316,1
    - Dst: std::vector::end
      Src: /src/brpc/test/object_pool_unittest.cpp:316,1
    - Dst: start
      Src: /src/brpc/test/object_pool_unittest.cpp:318,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:319,1
    - Dst: stop
      Src: /src/brpc/test/object_pool_unittest.cpp:322,1
    - Dst: printf
      Src: /src/brpc/test/object_pool_unittest.cpp:324,1
    - Dst: pthread_self
      Src: /src/brpc/test/object_pool_unittest.cpp:325,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:325,1
    - Dst: n_elapsed
      Src: /src/brpc/test/object_pool_unittest.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 295
    functionDepth: 1
    functionLinenumber: 295
    functionLinenumberEnd: 330
    functionName: new_and_delete_int
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 3
    functionsReached:
    - n_elapsed
    - std::vector::reserve
    - D
    - std::vector::push_back
    - D::D
    - std::vector::clear
    - printf
    - std::vector::end
    - start
    - std::random_shuffle
    - std::vector::begin
    - std::vector::size
    - stop
    - butil::Timer::Timer
    - pthread_self
    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:333,1
    - Dst: new_and_delete_int
      Src: /src/brpc/test/object_pool_unittest.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 335
    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:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:340,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:340,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:342,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:343,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:348,1
    - Dst: pthread_create
      Src: /src/brpc/test/object_pool_unittest.cpp:348,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/object_pool_unittest.cpp:350,1
    - Dst: pthread_join
      Src: /src/brpc/test/object_pool_unittest.cpp:351,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:354,1
    - Dst: clear_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:355,1
    - Dst: describe_objects<D>
      Src: /src/brpc/test/object_pool_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:359,1
    - Dst: memcmp
      Src: /src/brpc/test/object_pool_unittest.cpp:359,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 337
    functionDepth: 0
    functionLinenumber: 337
    functionLinenumberEnd: 360
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - clear_objects<D>
    - ASSERT_EQ
    - describe_objects<D>
    - memcmp
    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:363,1
    - Dst: describe_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:364,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/object_pool_unittest.cpp:367,1
    - Dst: std::vector::capacity
      Src: /src/brpc/test/object_pool_unittest.cpp:368,1
    - Dst: get_object<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:369,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/object_pool_unittest.cpp:371,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/object_pool_unittest.cpp:375,1
    - Dst: std::vector::size
      Src: /src/brpc/test/object_pool_unittest.cpp:375,1
    - Dst: clear_objects<int>
      Src: /src/brpc/test/object_pool_unittest.cpp:377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 362
    functionDepth: 0
    functionLinenumber: 362
    functionLinenumberEnd: 378
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/object_pool_unittest.cpp
    functionUses: 0
    functionsReached:
    - get_object<int>
    - std::vector::reserve
    - std::vector::push_back
    - describe_objects<int>
    - ASSERT_EQ
    - clear_objects<int>
    - std::vector::size
    - std::vector::capacity
    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:
    - usleep
    - loop_count::load
    - LOG
    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:
    - wait_for
    - bthread_stopped
    - loop_count::fetch_add
    - LOG
    - usleep
    - bthread_self
    - push_back
    - size
    - 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
    - LOG
    - pop_front
    - empty
    - LOG_EVERY_SECOND
    - usleep
    - bthread_self
    - size
    - 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:
    - bthread_join
    - print_func
    - ASSERT_EQ
    - bthread_stop
    - bthread_start_background
    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
    - bthread_join
    - bthread_usleep
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - ASSERT_GT
    - bthread_start_background
    - concurrency
    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_EQ
    - ASSERT_NE
    - 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:
    - bthread_join
    - bthread_usleep
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - ASSERT_GT
    - get_bthread_singleton
    - bthread_start_background
    - concurrency
    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
    - bthread_join
    - bthread_usleep
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - ASSERT_GT
    - bthread_start_background
    - concurrency
    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_EQ
    - ASSERT_NE
    - 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:
    - bthread_join
    - bthread_usleep
    - ASSERT_NE
    - LOG
    - ASSERT_EQ
    - ASSERT_GT
    - get_bthread_singleton
    - bthread_start_background
    - concurrency
    linkageType: ''
    returnType: void
    signature: void TEST(BthreadOnceTest, singleton)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_channel_unittest.cpp:65,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_channel_unittest.cpp:66,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_channel_unittest.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    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:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    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: 2
    argCount: 1
    argNames:
    - called
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: MarkCalled
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MarkCalled(bool* called)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 84
    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:86,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 88
    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: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    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:109,1
    - Dst: brpc::AuthContext*::set_group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:110,1
    - Dst: brpc::AuthContext*::set_roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:111,1
    - Dst: brpc::AuthContext*::set_starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:112,1
    - Dst: brpc::AuthContext*::set_is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 115
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AuthContext*::set_group
    - brpc::AuthContext*::set_starter
    - brpc::AuthContext*::set_is_service
    - brpc::AuthContext*::set_user
    - brpc::AuthContext*::set_roles
    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:121,1
    - Dst: brpc::policy::MostCommonMessage*::socket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:122,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:126,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:126,1
    - Dst: brpc::policy::RpcMeta::has_authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:128,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:130,1
    - Dst: brpc::Socket*::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:131,1
    - Dst: brpc::policy::RpcMeta::authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:131,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:132,1
    - Dst: MyAuthenticator::VerifyCredential
      Src: /src/brpc/test/brpc_channel_unittest.cpp:133,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:134,1
    - Dst: brpc::Socket*::mutable_auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 137
    functionName: VerifyMyRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - brpc::policy::RpcMeta::authentication_data
    - brpc::Socket*::mutable_auth_context
    - EXPECT_EQ
    - static_cast<const brpc::policy::MostCommonMessage*>
    - brpc::Socket*::auth_context
    - brpc::policy::RpcMeta::has_authentication_data
    - MyAuthenticator::VerifyCredential
    - EXPECT_TRUE
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - MyAuthenticator::MyAuthenticator
    - brpc::policy::MostCommonMessage*::socket
    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: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    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: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: ~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:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 149
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:161,1
    - Dst: CallAfterRpcObject::CallAfterRpcObject
      Src: /src/brpc/test/brpc_channel_unittest.cpp:162,1
    - Dst: brpc::Controller*::set_after_rpc_resp_fn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:163,1
    - Dst: std::bind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:163,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:166,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:167,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:167,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:168,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:168,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:171,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:172,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_channel_unittest.cpp:173,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:177,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:177,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:180,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:180,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:181,1
    - Dst: ::test::EchoResponse*::add_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:182,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:182,1
    - Dst: ::test::EchoResponse*::set_receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:184,1
    - Dst: brpc::Controller*::_current_call::sending_sock::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:184,1
    - Dst: mockfunc_
      Src: /src/brpc/test/brpc_channel_unittest.cpp:185,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_channel_unittest.cpp:187,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:189,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:190,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:190,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:191,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:192,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:193,1
    - Dst: std::string*::empty
      Src: /src/brpc/test/brpc_channel_unittest.cpp:193,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:194,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:194,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 196
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - mockfunc_
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - LOG
    - brpc::Controller*::_current_call::sending_sock::id
    - brpc::Controller*::request_protocol
    - std::string*::empty
    - brpc::Controller*::http_request
    - ::test::EchoResponse*::set_message
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ::test::EchoRequest*::sleep_us
    - ::test::EchoResponse*::add_code_list
    - ::test::EchoRequest*::server_fail
    - CallAfterRpcObject::CallAfterRpcObject
    - ::test::EchoRequest*::http_header
    - brpc::Controller*::SetFailed
    - ::test::EchoRequest*::code
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_receiving_socket_id
    - brpc::Controller*::set_after_rpc_resp_fn
    - bthread_usleep
    - std::bind
    - brpc::Controller*::CloseConnection
    - brpc::Controller*::http_response
    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:201,1
    - Dst: static_cast<const test::EchoResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:202,1
    - Dst: std::shared_ptr<CallAfterRpcObject>::Append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:206,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: 207
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 207
    functionName: MyEchoService::CallAfterRpc
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::shared_ptr<CallAfterRpcObject>::Append
    - static_cast<const test::EchoRequest*>
    - static_cast<const test::EchoResponse*>
    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: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_channel_unittest.cpp:214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' mockfunc'
    argTypes:
    - std::function<MockFuncType>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 215
    functionName: MyEchoService::SetMockFunc
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void SetMockFunc(std::function<MockFuncType>&& mockfunc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:228,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:229,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:229,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - cntl_base
    - req
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 233
    functionName: DelayedCloseEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::sleep_us
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse*,\n              google::protobuf::Closure*
      done) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:243,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_channel_unittest.cpp:244,1
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_channel_unittest.cpp:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:252,1
    - Dst: AddHandler
      Src: /src/brpc/test/brpc_channel_unittest.cpp:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:255,1
    - Dst: fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:255,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 256
    functionName: ChannelTest::ChannelTest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - EXPECT_EQ
    - pthread_once
    - options
    - std::string
    - fname
    - butil::endpoint2str
    - save
    - AddHandler
    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: 258
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 258
    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:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 263
    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:273,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_channel_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 274
    functionName: ChannelTest::register_protocol
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - RegisterProtocol
    linkageType: ''
    returnType: void
    signature: void register_protocol()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DestroyingPtr::ReleaseSocket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:279,1
    - Dst: brpc::SocketUniquePtr::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:282,1
    - Dst: brpc::AuthContext*::user
      Src: /src/brpc/test/brpc_channel_unittest.cpp:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:283,1
    - Dst: brpc::AuthContext*::group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:284,1
    - Dst: brpc::AuthContext*::roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:285,1
    - Dst: brpc::AuthContext*::starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:285,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:286,1
    - Dst: brpc::AuthContext*::is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:286,1
    - Dst: brpc::InputMessageBase*::arg
      Src: /src/brpc/test/brpc_channel_unittest.cpp:288,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:291,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:297,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:297,1
    - Dst: brpc::policy::RpcMeta::request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:299,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:299,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:299,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:301,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:301,1
    - Dst: ChannelTest*::_dummy::options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:303,1
    - Dst: Get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:303,1
    - Dst: brpc::RpcPBMessages*::Request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:304,1
    - Dst: brpc::RpcPBMessages*::Response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:305,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:306,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:307,1
    - Dst: brpc::DestroyingPtr::payload::cutn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:308,1
    - Dst: brpc::DestroyingPtr::payload::size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:308,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:308,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:310,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:310,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:313,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:313,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:315,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:316,1
    - Dst: brpc::Controller*::_current_call::sending_sock::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:317,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_channel_unittest.cpp:317,1
    - Dst: "brpc::NewCallback<\n            int64_t, brpc::Controller*, brpc::RpcPBMessages*,
        const brpc::Server*,\n            brpc::MethodStatus*, int64_t, std::shared_ptr<brpc::Span>>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:320,1
    - Dst: brpc::policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:323,1
    - Dst: ChannelTest*::_svc::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:325,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 326
    functionName: ChannelTest::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - Get
    - brpc::DestroyingPtr::payload::size
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::AuthContext*::user
    - ASSERT_EQ
    - brpc::AuthContext*::roles
    - service_name
    - brpc::AuthContext*::is_service
    - brpc::DestroyingPtr::payload::cutn
    - brpc::Controller::Controller
    - method_name
    - brpc::policy::RpcMeta::correlation_id
    - EXPECT_TRUE
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - ChannelTest*::_svc::descriptor
    - brpc::SocketUniquePtr::auth_context
    - "brpc::NewCallback<\n            int64_t, brpc::Controller*, brpc::RpcPBMessages*,
      const brpc::Server*,\n            brpc::MethodStatus*, int64_t, std::shared_ptr<brpc::Span>>"
    - brpc::SocketUniquePtr::release
    - EXPECT_EQ
    - brpc::SocketUniquePtr::id
    - brpc::DestroyingPtr::ReleaseSocket
    - brpc::SocketUniquePtr::SetFailed
    - brpc::AuthContext*::group
    - brpc::RpcPBMessages*::Response
    - brpc::AuthContext*::starter
    - brpc::InputMessageBase*::arg
    - brpc::RpcPBMessages*::Request
    - ChannelTest*::_svc::CallMethod
    - brpc::policy::RpcMeta::request
    - ChannelTest*::_dummy::options
    - brpc::policy::RpcMeta::attachment_size
    - brpc::Controller*::_current_call::sending_sock::reset
    - butil::IOBuf::IOBuf
    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:330,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:332,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:337,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ep
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 341
    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:344,1
    - Dst: Join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 346
    functionName: ChannelTest::StopAndJoin
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - Join
    - StopAccept
    linkageType: ''
    returnType: void
    signature: void StopAndJoin()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:352,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:367,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:367,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:369,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:369,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:369,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - channel
    - single_server
    - short_connection
    argTypes:
    - brpc::Channel*
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 371
    functionName: ChannelTest::SetUpChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string
    - brpc::Channel*::Init
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    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,\n
      \                     brpc::ProtocolType protocol = brpc::PROTOCOL_BAIDU_STD)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:380,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:381,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:383,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:389,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: 391
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 391
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::call_id
    - bthread_id_join
    - brpc::ThriftStub::ThriftStub
    - 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:400,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:401,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:403,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:409,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: 411
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 411
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller*::call_id
    - bthread_id_join
    - brpc::ThriftStub::ThriftStub
    - 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:419,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:420,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:422,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:425,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 413
    functionDepth: 2
    functionLinenumber: 413
    functionLinenumberEnd: 429
    functionName: ChannelTest::TestConnectionFailed
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    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:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:442,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:442,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:447,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:450,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:451,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:453,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:453,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:454,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:454,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:455,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:455,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 456
    functionName: ChannelTest::TestConnectionFailedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    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:465,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:470,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:472,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:472,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:475,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:478,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:479,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:482,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:482,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:483,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:483,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:484,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:485,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 458
    functionDepth: 2
    functionLinenumber: 458
    functionLinenumberEnd: 486
    functionName: ChannelTest::TestConnectionFailedSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::SelectiveChannel::AddChannel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - brpc::ChannelOptions::ChannelOptions
    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:493,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:493,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:494,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:495,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:497,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:500,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:501,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:503,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:503,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:506,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:506,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:507,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:507,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:508,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:508,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:509,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:509,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:510,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:510,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:510,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:513,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:514,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:515,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:515,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:516,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:519,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:519,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:523,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:524,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:525,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:526,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:527,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:528,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:529,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:530,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:535,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:536,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:538,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:539,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:540,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:541,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:542,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:543,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:543,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:545,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:546,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:550,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:551,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:553,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:554,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:555,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:556,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:557,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:558,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:560,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:560,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:562,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 47
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 488
    functionDepth: 2
    functionLinenumber: 488
    functionLinenumberEnd: 563
    functionName: ChannelTest::TestSuccess
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - test::EchoRequest::Clear
    - brpc::Controller::sub_count
    - brpc::Controller::Reset
    - brpc::Controller::Controller
    - std::string
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - test::EchoResponse::receiving_socket_id
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_NE
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:572,1
    - Dst: test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:573,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:574,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:574,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: 576
      start: 567
    functionDepth: 1
    functionLinenumber: 567
    functionLinenumberEnd: 576
    functionName: ChannelTest::SetCode::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - test::EchoRequest*::set_code
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Skip
      Src: /src/brpc/test/brpc_channel_unittest.cpp:587,1
    - Dst: ChannelTest::SetCode::Map
      Src: /src/brpc/test/brpc_channel_unittest.cpp:589,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: 590
      start: 581
    functionDepth: 2
    functionLinenumber: 581
    functionLinenumberEnd: 590
    functionName: ChannelTest::SetCodeOnEven::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::SetCode::Map
    - brpc::Skip
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<const test::ComboRequest*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:601,1
    - Dst: dynamic_cast<test::ComboResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:602,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:603,1
    - Dst: test::ComboRequest*::requests_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:605,1
    - Dst: brpc::Bad
      Src: /src/brpc/test/brpc_channel_unittest.cpp:606,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:609,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:610,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: 611
      start: 595
    functionDepth: 1
    functionLinenumber: 595
    functionLinenumberEnd: 611
    functionName: ChannelTest::GetReqAndAddRes::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::ComboRequest*::requests
    - dynamic_cast<const test::ComboRequest*>
    - brpc::Bad
    - test::ComboRequest*::requests_size
    - google::protobuf::MethodDescriptor*::name
    - dynamic_cast<test::ComboResponse*>
    - test::ComboResponse*::add_responses
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:620,1
    - Dst: auto::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:621,1
    - Dst: auto::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:623,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,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: 627
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 627
    functionName: ChannelTest::SuccessLimitCallMapper::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - auto::set_code
    - brpc::Clone<test::EchoRequest>
    - auto::set_sleep_us
    - google::protobuf::Message*::New
    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: 636
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 636
    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:644,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:644,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:650,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:650,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:652,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:654,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:657,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:658,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:661,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:661,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:662,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:662,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:663,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:666,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:666,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:667,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:669,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:669,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:673,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:675,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:675,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:681,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 639
    functionDepth: 2
    functionLinenumber: 639
    functionLinenumberEnd: 682
    functionName: ChannelTest::TestSuccessParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - SetCode::SetCode
    - ChannelTest::StopAndJoin
    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:690,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:690,1
    - Dst: DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:692,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:693,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:699,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:705,1
    - Dst: SetCode*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:705,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:706,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:709,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:710,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:711,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:714,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:714,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:715,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:716,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:716,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:716,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:725,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:726,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:727,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:727,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:728,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:731,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:731,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:733,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 684
    functionDepth: 2
    functionLinenumber: 684
    functionLinenumberEnd: 734
    functionName: ChannelTest::TestSuccessDuplicatedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - SetCode*::ref_count
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - SetCode::SetCode
    - ChannelTest::StopAndJoin
    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:742,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:742,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:743,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:744,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:746,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:746,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:748,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:749,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:750,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:750,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:752,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:755,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:756,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:759,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:759,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:759,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:763,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:764,1
    - Dst: test::EchoRequest::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:764,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:764,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:769,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:770,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:771,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:771,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:772,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:775,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:775,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 736
    functionDepth: 2
    functionLinenumber: 736
    functionLinenumberEnd: 778
    functionName: ChannelTest::TestSuccessSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::sub_count
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::code
    - test::EchoRequest::set_code
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - brpc::Controller::remote_side
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - brpc::SelectiveChannel::AddChannel
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - ChannelTest::StopAndJoin
    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:785,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:785,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:791,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:791,1
    - Dst: SetCodeOnEven::SetCodeOnEven
      Src: /src/brpc/test/brpc_channel_unittest.cpp:793,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:795,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:798,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:799,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:800,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:803,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:803,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:803,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:804,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:804,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:805,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:809,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:809,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:809,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:812,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:812,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:814,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:814,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:818,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:821,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:824,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:824,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 780
    functionDepth: 2
    functionLinenumber: 780
    functionLinenumberEnd: 827
    functionName: ChannelTest::TestSkipParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - SetCodeOnEven::SetCodeOnEven
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - ChannelTest::StopAndJoin
    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:834,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:834,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:840,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:840,1
    - Dst: GetReqAndAddRes::GetReqAndAddRes
      Src: /src/brpc/test/brpc_channel_unittest.cpp:842,1
    - Dst: MergeNothing::MergeNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:842,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:844,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:847,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:848,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:849,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:849,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:852,1
    - Dst: ::test::EchoRequest*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: ::test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:854,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:858,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:859,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:860,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:860,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:862,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_channel_unittest.cpp:862,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:862,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:865,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:866,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:868,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:868,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:868,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:869,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:869,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:870,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:870,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:871,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:872,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:872,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:873,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:879,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:880,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:882,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:887,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 829
    functionDepth: 2
    functionLinenumber: 829
    functionLinenumberEnd: 888
    functionName: ChannelTest::TestSuccessParallel2
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::ComboResponse::responses_size
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::Reset
    - test::ComboResponse::responses
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    - MergeNothing::MergeNothing
    - brpc::Controller::Failed
    - butil::cpuwide_time_us
    - ::test::EchoRequest*::set_code
    - brpc::Controller::latency_us
    - EXPECT_LT
    - GetReqAndAddRes::GetReqAndAddRes
    - ASSERT_GT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - test::ComboRequest::add_requests
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ::test::EchoRequest*::set_message
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - butil::string_printf
    - ChannelTest::StopAndJoin
    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:895,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:895,1
    - Dst: brpc::ParallelChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:902,1
    - Dst: SuccessLimitCallMapper::SuccessLimitCallMapper
      Src: /src/brpc/test/brpc_channel_unittest.cpp:903,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:905,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:906,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:906,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:909,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:912,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:913,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:914,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:916,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:916,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:916,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:917,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:917,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:918,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:919,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:919,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:921,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:921,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:924,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:924,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:928,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:928,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:929,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:929,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:932,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:933,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:934,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:934,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:938,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:938,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:940,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 35
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 890
    functionDepth: 2
    functionLinenumber: 890
    functionLinenumberEnd: 941
    functionName: ChannelTest::TestSuccessLimitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - SuccessLimitCallMapper::SuccessLimitCallMapper
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::ParallelChannel::Init
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - ChannelTest::StopAndJoin
    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:949,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:951,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:953,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:954,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 956
      start: 948
    functionDepth: 1
    functionLinenumber: 948
    functionLinenumberEnd: 956
    functionName: ChannelTest::Canceler
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CancelerArg*>
    - bthread_usleep
    - brpc::StartCancel
    - LOG
    linkageType: ''
    returnType: void
    signature: void * Canceler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:966,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:967,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:969,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:972,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:973,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:974,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:975,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:977,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:977,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:977,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:978,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 959
    functionDepth: 2
    functionLinenumber: 959
    functionLinenumberEnd: 979
    functionName: ChannelTest::CancelBeforeCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::ErrorCode
    - brpc::StartCancel
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    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:987,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:987,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:993,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:994,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:994,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:999,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1002,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1003,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1004,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1005,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1006,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1008,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1008,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1009,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1009,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1010,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1010,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1011,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1012
      start: 981
    functionDepth: 2
    functionLinenumber: 981
    functionLinenumberEnd: 1012
    functionName: ChannelTest::CancelBeforeCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::sub
    - brpc::Controller::ErrorCode
    - brpc::StartCancel
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - EXPECT_TRUE
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1020,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1020,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1023,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1024,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1024,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1026,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1027,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1031,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1034,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1035,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1036,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1037,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1038,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1039,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1039,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1039,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1040,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1041
      start: 1014
    functionDepth: 2
    functionLinenumber: 1014
    functionLinenumberEnd: 1041
    functionName: ChannelTest::CancelBeforeCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::StartCancel
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::Controller::call_id
    - brpc::SelectiveChannel::AddChannel
    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:1049,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1049,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1050,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1051,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1053,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1056,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1057,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1061,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1061,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1062,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1063,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1064,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1065,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1068,1
    - Dst: pthread_join
      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::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1069,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1070,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1070,1
    - Dst: EXPECT_TRUE
      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_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1072,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1072,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1074
      start: 1043
    functionDepth: 2
    functionLinenumber: 1043
    functionLinenumberEnd: 1074
    functionName: ChannelTest::CancelDuringCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Controller::sub_count
    - pthread_create
    - butil::Timer::stop
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - brpc::Controller::call_id
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1082,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1082,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1089,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1089,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: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1113,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1113,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1115,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1115,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1115,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1117
      start: 1076
    functionDepth: 2
    functionLinenumber: 1076
    functionLinenumberEnd: 1117
    functionName: ChannelTest::CancelDuringCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - pthread_create
    - butil::Timer::stop
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - brpc::Controller::call_id
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - brpc::Controller::latency_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1125,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1125,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1129,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1129,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1131,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1136,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1139,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1144,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1144,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1145,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1146,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1147,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1148,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1149,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1150,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1150,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1151,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1153,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1154,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1154,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1156
      start: 1119
    functionDepth: 2
    functionLinenumber: 1119
    functionLinenumberEnd: 1156
    functionName: ChannelTest::CancelDuringCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::SelectiveChannel::SelectiveChannel
    - butil::Timer::start
    - brpc::Controller::sub_count
    - pthread_create
    - butil::Timer::stop
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - brpc::Controller::call_id
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1164,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1164,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1165,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1166,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1168,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1171,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1173,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1175,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1176,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1177,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1177,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1179
      start: 1158
    functionDepth: 2
    functionLinenumber: 1158
    functionLinenumberEnd: 1179
    functionName: ChannelTest::CancelAfterCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - bthread_id_error
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    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:1187,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1187,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1194,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1194,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1199,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1202,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1204,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1206,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1211,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1211,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1212,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1213
      start: 1181
    functionDepth: 2
    functionLinenumber: 1181
    functionLinenumberEnd: 1213
    functionName: ChannelTest::CancelAfterCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::sub
    - bthread_id_error
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1216,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1216,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1217,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1218,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1220,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1221,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1224,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1227,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1228,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1233,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1234,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1235,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1235,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1236,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1239,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1239,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1241,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1215
    functionDepth: 2
    functionLinenumber: 1215
    functionLinenumberEnd: 1242
    functionName: ChannelTest::TestAttachment
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::Controller
    - std::string
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::cpuwide_time_us
    - EXPECT_LT
    - brpc::Controller::request_attachment
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1249,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1249,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1250,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1251,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1253,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1259
      start: 1244
    functionDepth: 2
    functionLinenumber: 1244
    functionLinenumberEnd: 1259
    functionName: ChannelTest::TestRequestNotInit
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    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:1266,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1266,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1273,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1273,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1278,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1282,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1282,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1282,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1283,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1283,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1285
      start: 1261
    functionDepth: 2
    functionLinenumber: 1261
    functionLinenumberEnd: 1285
    functionName: ChannelTest::TestRequestNotInitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1292,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1292,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1296,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1296,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1298,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1303,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1308,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1309,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1310,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1310,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1311,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1287
    functionDepth: 2
    functionLinenumber: 1287
    functionLinenumberEnd: 1312
    functionName: ChannelTest::TestRequestNotInitSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::SelectiveChannel::AddChannel
    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:1318,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1318,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1319,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1320,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1325,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1326,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1328,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1329,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1330,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1332,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1332,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1332,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1335
      start: 1314
    functionDepth: 2
    functionLinenumber: 1314
    functionLinenumberEnd: 1335
    functionName: ChannelTest::TestRPCTimeout
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - butil::Timer::start
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - EXPECT_LT
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1342,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1342,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1349,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1349,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1354,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1357,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1358,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1359,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1360,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1361,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1362,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1363,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1364,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1364,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1364,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1365,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1365,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1366,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1367,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1367,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1370,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1371
      start: 1337
    functionDepth: 2
    functionLinenumber: 1337
    functionLinenumberEnd: 1371
    functionName: ChannelTest::TestRPCTimeoutParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - butil::Timer::start
    - brpc::Controller::sub_count
    - butil::Timer::m_elapsed
    - brpc::ParallelChannel::AddChannel
    - butil::Timer::stop
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1380,1
    - Dst: test::EchoRequest*::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1381,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1382,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1382,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: 1384
      start: 1375
    functionDepth: 1
    functionLinenumber: 1375
    functionLinenumberEnd: 1384
    functionName: ChannelTest::MakeTheRequestTimeout::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoRequest*::set_sleep_us
    - brpc::SubCall
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1392,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1392,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1399,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1399,1
    - Dst: MakeTheRequestTimeout::MakeTheRequestTimeout
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1401,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1404,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1407,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1408,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1409,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1411,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: brpc::Controller::ErrorText
      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_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1414,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1415,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1417,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1419,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1419,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1423,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1424
      start: 1387
    functionDepth: 2
    functionLinenumber: 1387
    functionLinenumberEnd: 1424
    functionName: ChannelTest::TimeoutStillChecksSubChannelsParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - butil::Timer::start
    - brpc::Controller::sub_count
    - butil::Timer::m_elapsed
    - brpc::ParallelChannel::AddChannel
    - butil::Timer::stop
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - MakeTheRequestTimeout::MakeTheRequestTimeout
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1431,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1431,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1437,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1439,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1439,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1442,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1445,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1446,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1447,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1448,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1449,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1450,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1451,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1452,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1452,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1452,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1453,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1454,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1454,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1456,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1456,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1457,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1457,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1459
      start: 1426
    functionDepth: 2
    functionLinenumber: 1426
    functionLinenumberEnd: 1459
    functionName: ChannelTest::TestRPCTimeoutSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - butil::Timer::start
    - brpc::Controller::sub_count
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::Controller::set_timeout_ms
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: "void TestRPCTimeoutSelective(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1466,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1466,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1470,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1470,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1472,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1477,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1480,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1481,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1482,1
    - Dst: SetMockFunc
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1484,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1488,1
    - Dst: std::atomic::fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1489,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1491,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1492,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1495,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1496,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1497,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1500,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1501,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1502,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1503,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1504,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1505,1
    - Dst: std::atomic::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1507,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 28
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1508
      start: 1461
    functionDepth: 2
    functionLinenumber: 1461
    functionLinenumberEnd: 1508
    functionName: ChannelTest::TestBackupRequestSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<brpc::Controller*>
    - LOG
    - ASSERT_EQ
    - brpc::SelectiveChannel::SelectiveChannel
    - butil::Timer::start
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - std::atomic::load
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::IOBuf::append
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::Controller::set_timeout_ms
    - brpc::Controller*::Failed
    - bthread_usleep
    - brpc::SelectiveChannel::Init
    - brpc::Controller*::response_attachment
    - ChannelTest::SetUpChannel
    - std::atomic::fetch_add
    - ChannelTest::CallMethod
    - SetMockFunc
    - butil::IOBuf::IOBuf
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: "void TestBackupRequestSelective(\n        bool single_server, bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1511,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1511,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1515,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1515,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1519,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1519,1
    - Dst: SetMockFunc
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1525,1
    - Dst: std::atomic::fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1529,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1532,1
    - Dst: clear_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1534,1
    - Dst: add_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1537,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1539,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1543,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1546,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1547,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1548,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1549,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1550,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1550,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1552,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1553,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1553,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1553,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1557,1
    - Dst: std::atomic::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1557,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1558,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1510
    functionDepth: 2
    functionLinenumber: 1510
    functionLinenumberEnd: 1559
    functionName: ChannelTest::TestBackupRequestSelectiveResponseRace
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - ASSERT_TRUE
    - std::atomic::load
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - clear_code_list
    - EXPECT_EQ
    - brpc::Controller::Failed
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::Controller::set_timeout_ms
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::SelectiveChannel::Init
    - add_code_list
    - ChannelTest::SetUpChannel
    - std::atomic::fetch_add
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - SetMockFunc
    - set_message
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: void TestBackupRequestSelectiveResponseRace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1566,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1566,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1567,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1568,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1570,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1574,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1577,1
    - Dst: brpc::Controller::ErrorCode
      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: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1579
      start: 1561
    functionDepth: 2
    functionLinenumber: 1561
    functionLinenumberEnd: 1579
    functionName: ChannelTest::TestCloseFD
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - ChannelTest::StopAndJoin
    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:1586,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1586,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1593,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1593,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1598,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1601,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1602,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1603,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1605,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1605,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1606,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1607,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1608,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1608,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1609,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1610
      start: 1581
    functionDepth: 2
    functionLinenumber: 1581
    functionLinenumberEnd: 1610
    functionName: ChannelTest::TestCloseFDParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1617,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1617,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1620,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1623,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1623,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1625,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1627,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1627,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1633,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1634,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1635,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1638,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1639,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1639,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1641,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1612
    functionDepth: 2
    functionLinenumber: 1612
    functionLinenumberEnd: 1642
    functionName: ChannelTest::TestCloseFDSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::AddChannel
    - test::EchoRequest::set_message
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - brpc::Controller::ErrorText
    - ChannelTest::StopAndJoin
    - brpc::ChannelOptions::ChannelOptions
    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:1649,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1649,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1650,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1651,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1653,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1656,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1657,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1658,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1660,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1660,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1660,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1662
      start: 1644
    functionDepth: 2
    functionLinenumber: 1644
    functionLinenumberEnd: 1662
    functionName: ChannelTest::TestServerFail
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_server_fail
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    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:1669,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1669,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1676,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1676,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1681,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1685,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1686,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1689,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1689,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1690,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1664
    functionDepth: 2
    functionLinenumber: 1664
    functionLinenumberEnd: 1691
    functionName: ChannelTest::TestServerFailParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_server_fail
    - ChannelTest::CallMethod
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1698,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1698,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1702,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1702,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1704,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1706,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1706,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1709,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1714,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1716,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1716,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1717,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1717,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1718,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1718,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1720,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1720,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1721,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1722
      start: 1693
    functionDepth: 2
    functionLinenumber: 1693
    functionLinenumberEnd: 1722
    functionName: ChannelTest::TestServerFailSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_server_fail
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    - ChannelTest::CallMethod
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::StopAndJoin
    - brpc::SelectiveChannel::AddChannel
    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:1728,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1728,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1729,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1730,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1732,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1735,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1736,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1737,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1740,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1740,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1740,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1742,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1743,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1744,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1744,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1745,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1749
      start: 1724
    functionDepth: 2
    functionLinenumber: 1724
    functionLinenumberEnd: 1749
    functionName: ChannelTest::TestDestroyChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - bthread_usleep
    - std::string
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - butil::cpuwide_time_us
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - EXPECT_LT
    - ChannelTest::StopAndJoin
    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:1756,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1756,1
    - Dst: brpc::ParallelChannel::ParallelChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1757,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1759,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1760,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1761,1
    - Dst: brpc::ParallelChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1761,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1765,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1768,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1769,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1770,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1772,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1772,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1775,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1776,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1777,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1777,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1778,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1780,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1781
      start: 1751
    functionDepth: 2
    functionLinenumber: 1751
    functionLinenumberEnd: 1781
    functionName: ChannelTest::TestDestroyChannelParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::Controller
    - std::string
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::ParallelChannel*::AddChannel
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::ParallelChannel::ParallelChannel
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1788,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1788,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1789,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1790,1
    - Dst: brpc::SelectiveChannel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1790,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1792,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1793,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1794,1
    - Dst: brpc::SelectiveChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1794,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1797,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1800,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1801,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1802,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1806,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1807,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1808,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1808,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1811,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1812,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1813,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1813,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1814,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1816,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1817
      start: 1783
    functionDepth: 2
    functionLinenumber: 1783
    functionLinenumberEnd: 1817
    functionName: ChannelTest::TestDestroyChannelSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::sub_count
    - brpc::Controller::Controller
    - std::string
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::SelectiveChannel*::AddChannel
    - EXPECT_EQ
    - brpc::Controller::sub
    - brpc::Controller::remote_side
    - butil::cpuwide_time_us
    - EXPECT_LT
    - brpc::SelectiveChannel*::Init
    - ChannelTest::StartAccept
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1820,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1823,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1827,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1827,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1827,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - channel
    - async
    argTypes:
    - brpc::ChannelBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1828
      start: 1819
    functionDepth: 2
    functionLinenumber: 1819
    functionLinenumberEnd: 1828
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - 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:1831,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1835,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1838,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1838,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1839,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1839,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1839,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1840,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - channel
    - async
    - count
    argTypes:
    - brpc::ChannelBase*
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1842
      start: 1830
    functionDepth: 2
    functionLinenumber: 1830
    functionLinenumberEnd: 1842
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - test::EchoRequest::set_message
    - brpc::Controller::Reset
    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:1846,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1847,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1848,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1852,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1853,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1856,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1856,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1856,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1857,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: 1859
      start: 1844
    functionDepth: 2
    functionLinenumber: 1844
    functionLinenumberEnd: 1859
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - brpc::Controller::Reset
    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:1867,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1867,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1868,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1869,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1870,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1876,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1878,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1878,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1882,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1888,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1888,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1890,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1891
      start: 1861
    functionDepth: 2
    functionLinenumber: 1861
    functionLinenumberEnd: 1891
    functionName: ChannelTest::TestAuthentication
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - MyAuthenticator::count::load
    - pthread_join
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - brpc::Channel::Channel
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    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:1899,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1899,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1900,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1907,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1907,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1916,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1918,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1918,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1922,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1926,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1928,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1928,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1930,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1931
      start: 1893
    functionDepth: 2
    functionLinenumber: 1893
    functionLinenumberEnd: 1931
    functionName: ChannelTest::TestAuthenticationParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - MyAuthenticator::count::load
    - pthread_join
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1939,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1939,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1940,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1943,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1944,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1944,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1946,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1947,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1948,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1948,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1955,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1957,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1957,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1961,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1965,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1965,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1967,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1967,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1969,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1970
      start: 1933
    functionDepth: 2
    functionLinenumber: 1933
    functionLinenumberEnd: 1970
    functionName: ChannelTest::TestAuthenticationSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - brpc::SelectiveChannel::Init
    - MyAuthenticator::count::load
    - pthread_join
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::StopAndJoin
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Channel::Channel
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    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:1977,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1978,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1979,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1984,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1985,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1988,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1989,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1990,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1991,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1993,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1993,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1994,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1997,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1998,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2000,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2001,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2005,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2005,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2005,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2006,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2006,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2008,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2009,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2010,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2010,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2011,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2015,1
    - Dst: EXPECT_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: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2019,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2019,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2022,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2023,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2026,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2027,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2028,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2030,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2030,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 39
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 1972
    functionDepth: 2
    functionLinenumber: 1972
    functionLinenumberEnd: 2031
    functionName: ChannelTest::TestRetry
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::Reset
    - brpc::Controller::Controller
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - butil::cpuwide_time_us
    - brpc::Controller::Failed
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:2034,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2034,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2036,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2037,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2042,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2043,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2043,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2046,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2047,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2048,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2049,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2049,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2049,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2054,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2055,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2056,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2057,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2059,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2059,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2060,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2061
      start: 2033
    functionDepth: 2
    functionLinenumber: 2033
    functionLinenumberEnd: 2061
    functionName: ChannelTest::TestRetryOtherServer
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - EXPECT_EQ
    - std::string::c_str
    - butil::TempFile::save_format
    - endpoint2str
    - brpc::Controller::Controller
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - butil::TempFile::fname
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::TempFile::TempFile
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::ChannelOptions::ChannelOptions
    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: 2071
      start: 2064
    functionDepth: 0
    functionLinenumber: 2064
    functionLinenumberEnd: 2071
    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:2080,1
    - Dst: auto::channel_test::TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2081,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2084
      start: 2079
    functionDepth: 0
    functionLinenumber: 2079
    functionLinenumberEnd: 2084
    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:2088,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2088,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2092,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2094,1
    - Dst: brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2095,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2099,1
    - Dst: brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2100,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2106,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2107,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2109,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2114,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2114,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2117,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2118,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2120,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2120,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2120,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2125,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2126,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2127,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2128,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2129,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2131,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2135,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: 2136
      start: 2086
    functionDepth: 2
    functionLinenumber: 2086
    functionLinenumberEnd: 2136
    functionName: ChannelTest::TestRetryBackoff
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - butil::TempFile::save_format
    - ASSERT_EQ
    - butil::TempFile::fname
    - brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - std::string
    - EXPECT_GT
    - std::unique_ptr::unique_ptr
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::TempFile::TempFile
    - EXPECT_EQ
    - std::string::c_str
    - std::unique_ptr::reset
    - brpc::Controller::latency_us
    - brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::retried_count
    - endpoint2str
    - brpc::Controller::ErrorCode
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:2144,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2144,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2145,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2146,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2151,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2152,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2154,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2155,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2156,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2157,1
    - Dst: ChannelTest::CallMethod
      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::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2159,1
    - Dst: brpc::Controller::ErrorText
      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::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2161,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2161,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2162,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2166,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2167,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2168,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2168,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2169,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2172,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2172,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2175
      start: 2138
    functionDepth: 2
    functionLinenumber: 2138
    functionLinenumberEnd: 2175
    functionName: ChannelTest::TestBackupRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::has_backup_request
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - brpc::Controller::set_max_retry
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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: 2181
      start: 2179
    functionDepth: 0
    functionLinenumber: 2179
    functionLinenumberEnd: 2181
    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: 2186
      start: 2184
    functionDepth: 0
    functionLinenumber: 2184
    functionLinenumberEnd: 2186
    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: 2188
      start: 2188
    functionDepth: 0
    functionLinenumber: 2188
    functionLinenumberEnd: 2188
    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:2196,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2196,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2205,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2206,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2211,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2212,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2215,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2217,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2219,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2219,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2221,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2221,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2222,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2226,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2227,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2228,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2228,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2232,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2232,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2237
      start: 2194
    functionDepth: 2
    functionLinenumber: 2194
    functionLinenumberEnd: 2237
    functionName: ChannelTest::TestBackupRequestPolicy
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::has_backup_request
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::cpuwide_time_us
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ASSERT_GE
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ASSERT_LT
    - ChannelTest::StopAndJoin
    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: 2256
      start: 2256
    functionDepth: 0
    functionLinenumber: 2256
    functionLinenumberEnd: 2256
    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: 2257
      start: 2257
    functionDepth: 0
    functionLinenumber: 2257
    functionLinenumberEnd: 2257
    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: 2258
      start: 2258
    functionDepth: 0
    functionLinenumber: 2258
    functionLinenumberEnd: 2258
    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:2270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2271,1
    - Dst: MyShared*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2273,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2277,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2279,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2279,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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2283
      start: 2266
    functionDepth: 1
    functionLinenumber: 2266
    functionLinenumberEnd: 2283
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MyShared::MyShared
    - MyShared*::ref_count
    - butil::intrusive_ptr::ref_count
    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:2287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2288,1
    - Dst: brpc::Channel::Init
      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: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2290,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2294,1
    - Dst: brpc::Channel::Init
      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: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2296,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2299,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2301,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2302,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2303,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2307,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2307,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2317
      start: 2285
    functionDepth: 1
    functionLinenumber: 2285
    functionLinenumberEnd: 2317
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_TRUE
    - brpc::SocketMapKey
    - Init
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::SocketMapFind
    - brpc::Channel::Channel
    - brpc::Channel::SingleServer
    - 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:2320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2321,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2322
      start: 2319
    functionDepth: 1
    functionLinenumber: 2319
    functionLinenumberEnd: 2322
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_EQ
    - brpc::Channel::Channel
    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:2325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2326,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2327
      start: 2324
    functionDepth: 1
    functionLinenumber: 2324
    functionLinenumberEnd: 2327
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_EQ
    - brpc::Channel::Channel
    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:2330,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2332,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2334,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2334,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2335,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2337,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2337,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2339,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2342
      start: 2329
    functionDepth: 1
    functionLinenumber: 2329
    functionLinenumberEnd: 2342
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - std::string::c_str
    - butil::TempFile::save
    - std::string
    - ASSERT_EQ
    - butil::TempFile::fname
    - brpc::Channel::Channel
    - butil::TempFile::TempFile
    - brpc::ChannelOptions::ChannelOptions
    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:2345,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2348,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2349,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2350,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2351
      start: 2344
    functionDepth: 1
    functionLinenumber: 2344
    functionLinenumberEnd: 2351
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    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:2354,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2356,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2356,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2357,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2359,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2359,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2359,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2360,1
    - Dst: brpc::Channel*::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2360,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2363,1
    - Dst: brpc::Channel*::_lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2363,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2364,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2374,1
    - Dst: _lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2376,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2385,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2386,1
    - Dst: butil::intrusive_ptr::_nref::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2388
      start: 2353
    functionDepth: 1
    functionLinenumber: 2353
    functionLinenumberEnd: 2388
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - dynamic_cast<brpc::LoadBalancerWithNaming*>
    - ASSERT_FALSE
    - std::string::c_str
    - ASSERT_TRUE
    - butil::TempFile::save
    - std::string
    - Init
    - butil::intrusive_ptr::get
    - ASSERT_EQ
    - butil::TempFile::fname
    - brpc::Channel*::Init
    - brpc::Channel::Channel
    - brpc::Channel*::_lb::get
    - butil::intrusive_ptr::_nref::load
    - butil::TempFile::TempFile
    - _lb::get
    - brpc::Channel*::SingleServer
    - brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
    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:2391,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2396,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2396,1
    - Dst: ASSERT_EQ
      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::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2401,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2403,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2406,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2413,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2415,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2417,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2419,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2421,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2423,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2425,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2426,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2428,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2429,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2431,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2432,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2435,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2435,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2437,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2440,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2444,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2444,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2446,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2449,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2451,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2453,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2455,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2457,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2459,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2460,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2469,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2471,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2471,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2473,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2473,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2475,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2477,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2478,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2480,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2480,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2481
      start: 2390
    functionDepth: 1
    functionLinenumber: 2390
    functionLinenumberEnd: 2481
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ARRAY_SIZE
    - std::string::c_str
    - ASSERT_TRUE
    - butil::TempFile::TempFile
    - fprintf
    - brpc::Channel::_options::ssl_options
    - fclose
    - std::string
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - brpc::Channel::Channel
    - brpc::ChannelOptions::mutable_ssl_options
    - expected_peer_name::empty
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, parse_hostname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2491
      start: 2483
    functionDepth: 0
    functionLinenumber: 2483
    functionLinenumberEnd: 2491
    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:2496,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2499,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2501,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2501,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2502
      start: 2493
    functionDepth: 1
    functionLinenumber: 2493
    functionLinenumberEnd: 2502
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    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:2505,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2508,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2510,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2511,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2512,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2512,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2512,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2514,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2517,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2518,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2519,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2520,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2520,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2520,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2521
      start: 2504
    functionDepth: 1
    functionLinenumber: 2504
    functionLinenumberEnd: 2521
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - brpc::NewCallback
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, uninitialized_selective_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2525,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2525,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2527,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2530,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2531,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2532,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2532,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2533
      start: 2523
    functionDepth: 1
    functionLinenumber: 2523
    functionLinenumberEnd: 2533
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    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:2540,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2541
      start: 2536
    functionDepth: 1
    functionLinenumber: 2536
    functionLinenumberEnd: 2541
    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*)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2548,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2550,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2550,1
    - Dst: BadCall::BadCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2551,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2554,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2557,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2560
      start: 2544
    functionDepth: 1
    functionLinenumber: 2544
    functionLinenumberEnd: 2560
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - SetUpChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - BadCall::BadCall
    - brpc::ParallelChannel::AddChannel
    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:2567,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2568
      start: 2563
    functionDepth: 1
    functionLinenumber: 2563
    functionLinenumberEnd: 2568
    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*)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2575,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2577,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2577,1
    - Dst: SkipCall::SkipCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2578,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2581,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2584,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2585,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2587,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2587,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2587,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2588,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2588,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2589,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2590,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2590,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2592
      start: 2571
    functionDepth: 1
    functionLinenumber: 2571
    functionLinenumberEnd: 2592
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::Controller::ErrorCode
    - SkipCall::SkipCall
    - SetUpChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, skip_all_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2602,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2602,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: 2603
      start: 2598
    functionDepth: 1
    functionLinenumber: 2598
    functionLinenumberEnd: 2603
    functionName: EchoHttpHeader::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - google::protobuf::Message*::New
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int channel_index, int channel_count,\n                      const
      google::protobuf::MethodDescriptor* method,\n                      const google::protobuf::Message*
      request,\n                      google::protobuf::Message* response) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2608,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - channel_index
    - main_cntl
    - sub_cntl
    argTypes:
    - int
    - brpc::Controller*
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2609
      start: 2605
    functionDepth: 0
    functionLinenumber: 2605
    functionLinenumberEnd: 2609
    functionName: EchoHttpHeader::MapController
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::to_string
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void MapController(int channel_index, int,\n                       const
      brpc::Controller* main_cntl,\n                       brpc::Controller* sub_cntl)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2615,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2615,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2617,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2617,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2622,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2624,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2624,1
    - Dst: EchoHttpHeader::EchoHttpHeader
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2624,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2627,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2630,1
    - Dst: test::EchoRequest::mutable_http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2631,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2632,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2634,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2634,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2635,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2635,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2636,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2637,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2641
      start: 2612
    functionDepth: 1
    functionLinenumber: 2612
    functionLinenumberEnd: 2641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - ASSERT_FALSE
    - test::EchoRequest::mutable_http_header
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - SetUpChannel
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - std::to_string
    - brpc::Server::Server
    - CallMethod
    - brpc::Controller::sub
    - brpc::Server::Start
    - brpc::Controller::Failed
    - brpc::Server::AddService
    - EchoHttpHeader::EchoHttpHeader
    - brpc::Controller*::http_response
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, http_header_parallel_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailedParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2647,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2651
      start: 2643
    functionDepth: 0
    functionLinenumber: 2643
    functionLinenumberEnd: 2651
    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:2657,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2661
      start: 2653
    functionDepth: 0
    functionLinenumber: 2653
    functionLinenumberEnd: 2661
    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:2667,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2671
      start: 2663
    functionDepth: 0
    functionLinenumber: 2663
    functionLinenumberEnd: 2671
    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:2677,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2681
      start: 2673
    functionDepth: 0
    functionLinenumber: 2673
    functionLinenumberEnd: 2681
    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:2687,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2691
      start: 2683
    functionDepth: 0
    functionLinenumber: 2683
    functionLinenumberEnd: 2691
    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:2697,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2701
      start: 2693
    functionDepth: 0
    functionLinenumber: 2693
    functionLinenumberEnd: 2701
    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:2707,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2711
      start: 2703
    functionDepth: 0
    functionLinenumber: 2703
    functionLinenumberEnd: 2711
    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:2717,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2721
      start: 2713
    functionDepth: 0
    functionLinenumber: 2713
    functionLinenumberEnd: 2721
    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:2727,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2731
      start: 2723
    functionDepth: 0
    functionLinenumber: 2723
    functionLinenumberEnd: 2731
    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:2737,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2741
      start: 2733
    functionDepth: 0
    functionLinenumber: 2733
    functionLinenumberEnd: 2741
    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:2747,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2751
      start: 2743
    functionDepth: 0
    functionLinenumber: 2743
    functionLinenumberEnd: 2751
    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:2757,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2761
      start: 2753
    functionDepth: 0
    functionLinenumber: 2753
    functionLinenumberEnd: 2761
    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:2767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2771
      start: 2763
    functionDepth: 0
    functionLinenumber: 2763
    functionLinenumberEnd: 2771
    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:2777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2781
      start: 2773
    functionDepth: 0
    functionLinenumber: 2773
    functionLinenumberEnd: 2781
    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:2787,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2791
      start: 2783
    functionDepth: 0
    functionLinenumber: 2783
    functionLinenumberEnd: 2791
    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:2797,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2801
      start: 2793
    functionDepth: 0
    functionLinenumber: 2793
    functionLinenumberEnd: 2801
    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:2807,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2811
      start: 2803
    functionDepth: 0
    functionLinenumber: 2803
    functionLinenumberEnd: 2811
    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:2817,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2821
      start: 2813
    functionDepth: 0
    functionLinenumber: 2813
    functionLinenumberEnd: 2821
    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:2827,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2831
      start: 2823
    functionDepth: 0
    functionLinenumber: 2823
    functionLinenumberEnd: 2831
    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:2837,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2841
      start: 2833
    functionDepth: 0
    functionLinenumber: 2833
    functionLinenumberEnd: 2841
    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:2847,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2851
      start: 2843
    functionDepth: 0
    functionLinenumber: 2843
    functionLinenumberEnd: 2851
    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:2857,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2861
      start: 2853
    functionDepth: 0
    functionLinenumber: 2853
    functionLinenumberEnd: 2861
    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:2867,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2871
      start: 2863
    functionDepth: 0
    functionLinenumber: 2863
    functionLinenumberEnd: 2871
    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:2877,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2881
      start: 2873
    functionDepth: 0
    functionLinenumber: 2873
    functionLinenumberEnd: 2881
    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: TestBackupRequestSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2887,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2891
      start: 2883
    functionDepth: 0
    functionLinenumber: 2883
    functionLinenumberEnd: 2891
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequestSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backuprequest_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequestSelectiveResponseRace
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2894,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2895
      start: 2893
    functionDepth: 0
    functionLinenumber: 2893
    functionLinenumberEnd: 2895
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequestSelectiveResponseRace
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backuprequest_selective_response_race)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFD
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2901,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2905
      start: 2897
    functionDepth: 0
    functionLinenumber: 2897
    functionLinenumberEnd: 2905
    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:2911,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2915
      start: 2907
    functionDepth: 0
    functionLinenumber: 2907
    functionLinenumberEnd: 2915
    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:2921,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2925
      start: 2917
    functionDepth: 0
    functionLinenumber: 2917
    functionLinenumberEnd: 2925
    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:2931,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2935
      start: 2927
    functionDepth: 0
    functionLinenumber: 2927
    functionLinenumberEnd: 2935
    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:2941,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2945
      start: 2937
    functionDepth: 0
    functionLinenumber: 2937
    functionLinenumberEnd: 2945
    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:2951,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2955
      start: 2947
    functionDepth: 0
    functionLinenumber: 2947
    functionLinenumberEnd: 2955
    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:2961,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2965
      start: 2957
    functionDepth: 0
    functionLinenumber: 2957
    functionLinenumberEnd: 2965
    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:2971,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2975
      start: 2967
    functionDepth: 0
    functionLinenumber: 2967
    functionLinenumberEnd: 2975
    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:2981,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2985
      start: 2977
    functionDepth: 0
    functionLinenumber: 2977
    functionLinenumberEnd: 2985
    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:2991,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2995
      start: 2987
    functionDepth: 0
    functionLinenumber: 2987
    functionLinenumberEnd: 2995
    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:3000,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3003
      start: 2997
    functionDepth: 0
    functionLinenumber: 2997
    functionLinenumberEnd: 3003
    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:3014,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3017,1
    - Dst: TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3020,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3026
      start: 3005
    functionDepth: 1
    functionLinenumber: 3005
    functionLinenumberEnd: 3026
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - bthread_join
    - TestRetryBackoffInfo::TestRetryBackoffInfo
    - TestRetryBackoff
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry_backoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequest
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3032,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3036
      start: 3028
    functionDepth: 0
    functionLinenumber: 3028
    functionLinenumberEnd: 3036
    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:3042,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3046
      start: 3038
    functionDepth: 0
    functionLinenumber: 3038
    functionLinenumberEnd: 3046
    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: brpc::Server::Server
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3050,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3051,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3051,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3052,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3052,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3054,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3055,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3055,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3057,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3060,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3061,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3061,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3062,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3062,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3065,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3066,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3067,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3068,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3072,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3073,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3076,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3076,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3076,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3077,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3077,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3078,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3078,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3083,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3085,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3085,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3085,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3086,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3087,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3088
      start: 3048
    functionDepth: 1
    functionLinenumber: 3048
    functionLinenumberEnd: 3088
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel*::Init
    - test::EchoRequest::set_sleep_us
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::ErrorText
    - brpc::Controller::has_backup_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - brpc::Server::Server
    - CallMethod
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::set_max_retry
    - brpc::SelectiveChannel::AddChannel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ASSERT_GE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, selective_channel_ignores_late_subdone_after_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3091,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3092,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3092,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3093,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3107,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3108,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3116,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3116,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3120,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3125
      start: 3090
    functionDepth: 1
    functionLinenumber: 3090
    functionLinenumberEnd: 3125
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - pthread_join
    - SetUpChannel
    - ASSERT_EQ
    - StartAccept
    - brpc::Channel::Channel
    - MyAuthenticator::MyAuthenticator
    - srand
    - time
    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:3128,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3129,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3129,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3130,1
    - Dst: "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n
        \                       bool, bool, bool, const brpc::Authenticator*, int>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3152,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3152,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3161
      start: 3127
    functionDepth: 0
    functionLinenumber: 3127
    functionLinenumberEnd: 3161
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - EXPECT_EQ
    - pthread_join
    - ASSERT_EQ
    - StartAccept
    - MyAuthenticator::MyAuthenticator
    - srand
    - "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n                        bool,
      bool, bool, const brpc::Authenticator*, int>"
    - time
    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:3166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3169
      start: 3163
    functionDepth: 0
    functionLinenumber: 3163
    functionLinenumberEnd: 3169
    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:3174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3177
      start: 3171
    functionDepth: 0
    functionLinenumber: 3171
    functionLinenumberEnd: 3177
    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:3182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3185
      start: 3179
    functionDepth: 0
    functionLinenumber: 3179
    functionLinenumberEnd: 3185
    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:3190,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3193
      start: 3187
    functionDepth: 0
    functionLinenumber: 3187
    functionLinenumberEnd: 3193
    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:3196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3200
      start: 3195
    functionDepth: 1
    functionLinenumber: 3195
    functionLinenumberEnd: 3200
    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:3205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3206
      start: 3204
    functionDepth: 0
    functionLinenumber: 3204
    functionLinenumberEnd: 3206
    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:3210,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3213,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3214,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3218,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3221,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3221,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3225,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3226,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3228,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3230
      start: 3208
    functionDepth: 1
    functionLinenumber: 3208
    functionLinenumberEnd: 3230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - bthread_id_error
    - ASSERT_EQ
    - brpc::Controller::Reset
    - brpc::Controller::call_id
    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:3233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3234,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3235,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3235,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3236,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3239,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3240,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3243,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3244,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3247,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3248,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3251,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3252,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3252,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3253,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3256,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3257,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3257,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3258,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3261,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3262,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3262,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3263,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3264
      start: 3232
    functionDepth: 1
    functionLinenumber: 3232
    functionLinenumberEnd: 3264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_STREQ
    - brpc::AdaptiveConnectionType::has_error
    - brpc::AdaptiveConnectionType::AdaptiveConnectionType
    - brpc::AdaptiveConnectionType::name
    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:3267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3268,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3269,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3269,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3270,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3271,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3274,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3275,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3275,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3276,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3277,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3280,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3281,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3282,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3283,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3286,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3287,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3287,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3288,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3289,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3292,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3293,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3293,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3294,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3295,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3298,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3299,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3299,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3300,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3301,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3302
      start: 3266
    functionDepth: 1
    functionLinenumber: 3266
    functionLinenumberEnd: 3302
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::AdaptiveProtocolType::has_param
    - ASSERT_EQ
    - ASSERT_STREQ
    - brpc::AdaptiveProtocolType::name
    - brpc::AdaptiveProtocolType::param
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, adaptive_protocol_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3309,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3310
      start: 3306
    functionDepth: 1
    functionLinenumber: 3306
    functionLinenumberEnd: 3310
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidBackupRequestMs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3316,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3317
      start: 3312
    functionDepth: 1
    functionLinenumber: 3312
    functionLinenumberEnd: 3317
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidMaxBackupRatioZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3323,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3324
      start: 3319
    functionDepth: 1
    functionLinenumber: 3319
    functionLinenumberEnd: 3324
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidMaxBackupRatioNegative)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3330,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3331
      start: 3326
    functionDepth: 1
    functionLinenumber: 3326
    functionLinenumberEnd: 3331
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidMaxBackupRatioAboveOne)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3337,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3338
      start: 3333
    functionDepth: 1
    functionLinenumber: 3333
    functionLinenumberEnd: 3338
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidWindowSizeTooSmall)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3344,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3345
      start: 3340
    functionDepth: 1
    functionLinenumber: 3340
    functionLinenumberEnd: 3345
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidWindowSizeTooLarge)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3351,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3352
      start: 3347
    functionDepth: 1
    functionLinenumber: 3347
    functionLinenumberEnd: 3352
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidUpdateIntervalTooSmall)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3360,1
    - Dst: std::unique_ptr::GetBackupRequestMs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3361
      start: 3354
    functionDepth: 0
    functionLinenumber: 3354
    functionLinenumberEnd: 3361
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::unique_ptr::GetBackupRequestMs
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, ValidMinusOneBackupRequestMsInherits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3374,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3375
      start: 3363
    functionDepth: 0
    functionLinenumber: 3363
    functionLinenumberEnd: 3375
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::DoBackup
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, ValidMaxRatioAtBoundary)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3384,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3385,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3386
      start: 3377
    functionDepth: 0
    functionLinenumber: 3377
    functionLinenumberEnd: 3386
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::DoBackup
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, ColdStartAllowsBackup)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3402,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3402,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3406,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3407,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3408
      start: 3392
    functionDepth: 1
    functionLinenumber: 3392
    functionLinenumberEnd: 3408
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::unique_ptr::DoBackup
    - bthread_usleep
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, AfterColdStartBackupSuppressedUntilRpcCompletes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3421,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3425,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3428,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3429,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3429,1
    - Dst: std::unique_ptr::OnRPCEnd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3433,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3436,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3438,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3438,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3439
      start: 3413
    functionDepth: 1
    functionLinenumber: 3413
    functionLinenumberEnd: 3439
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::unique_ptr::DoBackup
    - bthread_usleep
    - ASSERT_TRUE
    - std::unique_ptr::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, OnRPCEndDrivesRatioDownAndReAllows)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/test/brpc_channel_unittest.cpp:73,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 75
    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: 2
    argCount: 1
    argNames:
    - called
    argTypes:
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: MarkCalled
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MarkCalled(bool* called)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 84
    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:86,1
    - Dst: fetch_sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:86,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 88
    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: 98
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 98
    functionName: MyAuthenticator::MyAuthenticator
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 12
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MyAuthenticator()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:102,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 104
    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:109,1
    - Dst: brpc::AuthContext*::set_group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:110,1
    - Dst: brpc::AuthContext*::set_roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:111,1
    - Dst: brpc::AuthContext*::set_starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:112,1
    - Dst: brpc::AuthContext*::set_is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - brpc::AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 115
    functionName: MyAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::AuthContext*::set_group
    - brpc::AuthContext*::set_starter
    - brpc::AuthContext*::set_is_service
    - brpc::AuthContext*::set_user
    - brpc::AuthContext*::set_roles
    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:121,1
    - Dst: brpc::policy::MostCommonMessage*::socket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:122,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:126,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:126,1
    - Dst: brpc::policy::RpcMeta::has_authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:128,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:130,1
    - Dst: brpc::Socket*::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:130,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:131,1
    - Dst: brpc::policy::RpcMeta::authentication_data
      Src: /src/brpc/test/brpc_channel_unittest.cpp:131,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:132,1
    - Dst: MyAuthenticator::VerifyCredential
      Src: /src/brpc/test/brpc_channel_unittest.cpp:133,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:134,1
    - Dst: brpc::Socket*::mutable_auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:134,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 119
    functionDepth: 1
    functionLinenumber: 119
    functionLinenumberEnd: 137
    functionName: VerifyMyRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - brpc::policy::RpcMeta::authentication_data
    - brpc::Socket*::mutable_auth_context
    - EXPECT_EQ
    - static_cast<const brpc::policy::MostCommonMessage*>
    - brpc::Socket*::auth_context
    - brpc::policy::RpcMeta::has_authentication_data
    - MyAuthenticator::VerifyCredential
    - EXPECT_TRUE
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - MyAuthenticator::MyAuthenticator
    - brpc::policy::MostCommonMessage*::socket
    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: 141
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 141
    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: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: ~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:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 149
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:161,1
    - Dst: CallAfterRpcObject::CallAfterRpcObject
      Src: /src/brpc/test/brpc_channel_unittest.cpp:162,1
    - Dst: brpc::Controller*::set_after_rpc_resp_fn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:163,1
    - Dst: std::bind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:163,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:166,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:167,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:167,1
    - Dst: brpc::Controller*::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:168,1
    - Dst: ::test::EchoRequest*::server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:168,1
    - Dst: ::test::EchoRequest*::close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:171,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:172,1
    - Dst: brpc::Controller*::CloseConnection
      Src: /src/brpc/test/brpc_channel_unittest.cpp:173,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:177,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:177,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:178,1
    - Dst: ::test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:180,1
    - Dst: ::test::EchoRequest*::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:180,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:181,1
    - Dst: ::test::EchoResponse*::add_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:182,1
    - Dst: ::test::EchoRequest*::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:182,1
    - Dst: ::test::EchoResponse*::set_receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:184,1
    - Dst: brpc::Controller*::_current_call::sending_sock::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:184,1
    - Dst: mockfunc_
      Src: /src/brpc/test/brpc_channel_unittest.cpp:185,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_channel_unittest.cpp:187,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:189,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:190,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:190,1
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:191,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:191,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:192,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:193,1
    - Dst: std::string*::empty
      Src: /src/brpc/test/brpc_channel_unittest.cpp:193,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:194,1
    - Dst: ::test::EchoRequest*::http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:194,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 4
    argNames:
    - cntl_base
    - req
    - res
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - ::test::EchoResponse*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 196
    functionName: MyEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - mockfunc_
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - LOG
    - brpc::Controller*::_current_call::sending_sock::id
    - brpc::Controller*::request_protocol
    - std::string*::empty
    - brpc::Controller*::http_request
    - ::test::EchoResponse*::set_message
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ::test::EchoRequest*::sleep_us
    - ::test::EchoResponse*::add_code_list
    - ::test::EchoRequest*::server_fail
    - CallAfterRpcObject::CallAfterRpcObject
    - ::test::EchoRequest*::http_header
    - brpc::Controller*::SetFailed
    - ::test::EchoRequest*::code
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_receiving_socket_id
    - brpc::Controller*::set_after_rpc_resp_fn
    - bthread_usleep
    - std::bind
    - brpc::Controller*::CloseConnection
    - brpc::Controller*::http_response
    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:201,1
    - Dst: static_cast<const test::EchoResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:202,1
    - Dst: std::shared_ptr<CallAfterRpcObject>::Append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:203,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:204,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:206,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: 207
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 207
    functionName: MyEchoService::CallAfterRpc
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_TRUE
    - std::shared_ptr<CallAfterRpcObject>::Append
    - static_cast<const test::EchoRequest*>
    - static_cast<const test::EchoResponse*>
    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: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::move
      Src: /src/brpc/test/brpc_channel_unittest.cpp:214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - ' mockfunc'
    argTypes:
    - std::function<MockFuncType>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 215
    functionName: MyEchoService::SetMockFunc
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::move
    linkageType: ''
    returnType: void
    signature: void SetMockFunc(std::function<MockFuncType>&& mockfunc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:228,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:229,1
    - Dst: ::test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:229,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - cntl_base
    - req
    - done
    argTypes:
    - google::protobuf::RpcController*
    - ::test::EchoRequest*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 223
    functionDepth: 1
    functionLinenumber: 223
    functionLinenumberEnd: 233
    functionName: DelayedCloseEchoService::Echo
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::sleep_us
    linkageType: ''
    returnType: void
    signature: "void Echo(google::protobuf::RpcController* cntl_base,\n              const
      ::test::EchoRequest* req,\n              ::test::EchoResponse*,\n              google::protobuf::Closure*
      done) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:243,1
    - Dst: brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/test/brpc_channel_unittest.cpp:244,1
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_channel_unittest.cpp:247,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:252,1
    - Dst: AddHandler
      Src: /src/brpc/test/brpc_channel_unittest.cpp:252,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:254,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:255,1
    - Dst: fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:255,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 240
    functionDepth: 1
    functionLinenumber: 240
    functionLinenumberEnd: 256
    functionName: ChannelTest::ChannelTest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - EXPECT_EQ
    - pthread_once
    - options
    - std::string
    - fname
    - butil::endpoint2str
    - save
    - AddHandler
    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: 258
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 258
    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:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 263
    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:273,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_channel_unittest.cpp:273,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 265
    functionDepth: 0
    functionLinenumber: 265
    functionLinenumberEnd: 274
    functionName: ChannelTest::register_protocol
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - RegisterProtocol
    linkageType: ''
    returnType: void
    signature: void register_protocol()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DestroyingPtr::ReleaseSocket
      Src: /src/brpc/test/brpc_channel_unittest.cpp:279,1
    - Dst: brpc::SocketUniquePtr::auth_context
      Src: /src/brpc/test/brpc_channel_unittest.cpp:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:282,1
    - Dst: brpc::AuthContext*::user
      Src: /src/brpc/test/brpc_channel_unittest.cpp:282,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:283,1
    - Dst: brpc::AuthContext*::group
      Src: /src/brpc/test/brpc_channel_unittest.cpp:283,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:284,1
    - Dst: brpc::AuthContext*::roles
      Src: /src/brpc/test/brpc_channel_unittest.cpp:284,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:285,1
    - Dst: brpc::AuthContext*::starter
      Src: /src/brpc/test/brpc_channel_unittest.cpp:285,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:286,1
    - Dst: brpc::AuthContext*::is_service
      Src: /src/brpc/test/brpc_channel_unittest.cpp:286,1
    - Dst: brpc::InputMessageBase*::arg
      Src: /src/brpc/test/brpc_channel_unittest.cpp:288,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:291,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:297,1
    - Dst: brpc::policy::RpcMeta::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:297,1
    - Dst: brpc::policy::RpcMeta::request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:299,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:299,1
    - Dst: service_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:299,1
    - Dst: ChannelTest*::_svc::descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:301,1
    - Dst: method_name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:301,1
    - Dst: ChannelTest*::_dummy::options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:303,1
    - Dst: Get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:303,1
    - Dst: brpc::RpcPBMessages*::Request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:304,1
    - Dst: brpc::RpcPBMessages*::Response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:305,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:306,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:307,1
    - Dst: brpc::DestroyingPtr::payload::cutn
      Src: /src/brpc/test/brpc_channel_unittest.cpp:308,1
    - Dst: brpc::DestroyingPtr::payload::size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:308,1
    - Dst: brpc::policy::RpcMeta::attachment_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:308,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:310,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:310,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:313,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/test/brpc_channel_unittest.cpp:313,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:315,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:316,1
    - Dst: brpc::Controller*::_current_call::sending_sock::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:317,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_channel_unittest.cpp:317,1
    - Dst: "brpc::NewCallback<\n            int64_t, brpc::Controller*, brpc::RpcPBMessages*,
        const brpc::Server*,\n            brpc::MethodStatus*, int64_t, std::shared_ptr<brpc::Span>>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:320,1
    - Dst: brpc::policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:323,1
    - Dst: ChannelTest*::_svc::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:325,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 326
    functionName: ChannelTest::ProcessRpcRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - Get
    - brpc::DestroyingPtr::payload::size
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - brpc::AuthContext*::user
    - ASSERT_EQ
    - brpc::AuthContext*::roles
    - service_name
    - brpc::AuthContext*::is_service
    - brpc::DestroyingPtr::payload::cutn
    - brpc::Controller::Controller
    - method_name
    - brpc::policy::RpcMeta::correlation_id
    - EXPECT_TRUE
    - brpc::policy::RpcMeta::ParseFromZeroCopyStream
    - ChannelTest*::_svc::descriptor
    - brpc::SocketUniquePtr::auth_context
    - "brpc::NewCallback<\n            int64_t, brpc::Controller*, brpc::RpcPBMessages*,
      const brpc::Server*,\n            brpc::MethodStatus*, int64_t, std::shared_ptr<brpc::Span>>"
    - brpc::SocketUniquePtr::release
    - EXPECT_EQ
    - brpc::SocketUniquePtr::id
    - brpc::DestroyingPtr::ReleaseSocket
    - brpc::SocketUniquePtr::SetFailed
    - brpc::AuthContext*::group
    - brpc::RpcPBMessages*::Response
    - brpc::AuthContext*::starter
    - brpc::InputMessageBase*::arg
    - brpc::RpcPBMessages*::Request
    - ChannelTest*::_svc::CallMethod
    - brpc::policy::RpcMeta::request
    - ChannelTest*::_dummy::options
    - brpc::policy::RpcMeta::attachment_size
    - brpc::Controller*::_current_call::sending_sock::reset
    - butil::IOBuf::IOBuf
    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:330,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:332,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:337,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ep
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 341
    functionName: ChannelTest::StartAccept
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 44
    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:344,1
    - Dst: Join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 346
    functionName: ChannelTest::StopAndJoin
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 44
    functionsReached:
    - Join
    - StopAccept
    linkageType: ''
    returnType: void
    signature: void StopAndJoin()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:352,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:355,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:367,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:367,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:369,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:369,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:369,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - channel
    - single_server
    - short_connection
    argTypes:
    - brpc::Channel*
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 371
    functionName: ChannelTest::SetUpChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 44
    functionsReached:
    - EXPECT_EQ
    - std::string
    - brpc::Channel*::Init
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    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,\n
      \                     brpc::ProtocolType protocol = brpc::PROTOCOL_BAIDU_STD)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:380,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:381,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:383,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:389,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: 391
      start: 373
    functionDepth: 1
    functionLinenumber: 373
    functionLinenumberEnd: 391
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 45
    functionsReached:
    - brpc::Controller*::call_id
    - bthread_id_join
    - brpc::ThriftStub::ThriftStub
    - 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:400,1
    - Dst: brpc::DoNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:401,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:403,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:409,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: 411
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 411
    functionName: ChannelTest::CallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 45
    functionsReached:
    - brpc::Controller*::call_id
    - bthread_id_join
    - brpc::ThriftStub::ThriftStub
    - 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:419,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:420,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:422,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:425,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:426,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:428,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 413
    functionDepth: 2
    functionLinenumber: 413
    functionLinenumberEnd: 429
    functionName: ChannelTest::TestConnectionFailed
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    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:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:442,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:442,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:447,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:450,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:451,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:453,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:453,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:454,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:454,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:455,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:455,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 456
      start: 431
    functionDepth: 2
    functionLinenumber: 431
    functionLinenumberEnd: 456
    functionName: ChannelTest::TestConnectionFailedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - brpc::ParallelChannel::AddChannel
    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:465,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:468,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:470,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:472,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:472,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:475,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:478,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:479,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:482,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:482,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:483,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:483,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:484,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:485,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:485,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 458
    functionDepth: 2
    functionLinenumber: 458
    functionLinenumberEnd: 486
    functionName: ChannelTest::TestConnectionFailedSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::SelectiveChannel::AddChannel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - brpc::ChannelOptions::ChannelOptions
    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:493,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:493,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:494,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:495,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:497,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:500,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:501,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:503,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:503,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:506,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:506,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:507,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:507,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:508,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:508,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:509,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:509,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:510,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:510,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:510,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:513,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:514,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:515,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:515,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:516,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:519,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:519,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:523,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:524,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:525,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:526,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:527,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:528,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:529,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:530,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:530,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:532,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:535,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:536,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:538,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:539,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:540,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:541,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:542,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:543,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:543,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:545,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:546,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:550,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:551,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:553,1
    - Dst: test::EchoRequest::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:554,1
    - Dst: test::EchoResponse::Clear
      Src: /src/brpc/test/brpc_channel_unittest.cpp:555,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:556,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:557,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:558,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:560,1
    - Dst: test::EchoResponse::receiving_socket_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:560,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:562,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 47
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 488
    functionDepth: 2
    functionLinenumber: 488
    functionLinenumberEnd: 563
    functionName: ChannelTest::TestSuccess
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoResponse::Clear
    - ASSERT_EQ
    - test::EchoRequest::Clear
    - brpc::Controller::sub_count
    - brpc::Controller::Reset
    - brpc::Controller::Controller
    - std::string
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - test::EchoResponse::receiving_socket_id
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_NE
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:572,1
    - Dst: test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:573,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:574,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:574,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: 576
      start: 567
    functionDepth: 1
    functionLinenumber: 567
    functionLinenumberEnd: 576
    functionName: ChannelTest::SetCode::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::SubCall
    - test::EchoRequest*::set_code
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Skip
      Src: /src/brpc/test/brpc_channel_unittest.cpp:587,1
    - Dst: ChannelTest::SetCode::Map
      Src: /src/brpc/test/brpc_channel_unittest.cpp:589,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: 590
      start: 581
    functionDepth: 2
    functionLinenumber: 581
    functionLinenumberEnd: 590
    functionName: ChannelTest::SetCodeOnEven::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ChannelTest::SetCode::Map
    - brpc::Skip
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dynamic_cast<const test::ComboRequest*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:601,1
    - Dst: dynamic_cast<test::ComboResponse*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:602,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:603,1
    - Dst: test::ComboRequest*::requests_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:605,1
    - Dst: brpc::Bad
      Src: /src/brpc/test/brpc_channel_unittest.cpp:606,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_channel_unittest.cpp:608,1
    - Dst: test::ComboRequest*::requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:609,1
    - Dst: test::ComboResponse*::add_responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:610,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: 611
      start: 595
    functionDepth: 1
    functionLinenumber: 595
    functionLinenumberEnd: 611
    functionName: ChannelTest::GetReqAndAddRes::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::ComboRequest*::requests
    - dynamic_cast<const test::ComboRequest*>
    - brpc::Bad
    - test::ComboRequest*::requests_size
    - google::protobuf::MethodDescriptor*::name
    - dynamic_cast<test::ComboResponse*>
    - test::ComboResponse*::add_responses
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Clone<test::EchoRequest>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:620,1
    - Dst: auto::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:621,1
    - Dst: auto::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:623,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:625,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: 627
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 627
    functionName: ChannelTest::SuccessLimitCallMapper::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - auto::set_code
    - brpc::Clone<test::EchoRequest>
    - auto::set_sleep_us
    - google::protobuf::Message*::New
    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: 636
      start: 633
    functionDepth: 0
    functionLinenumber: 633
    functionLinenumberEnd: 636
    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:644,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:644,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:649,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:650,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:650,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:652,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:654,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:657,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:658,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:659,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:661,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:661,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:661,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:662,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:662,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:663,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:664,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:666,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:666,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:666,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:667,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:669,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:669,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:673,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:674,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:675,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:675,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:676,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:679,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:681,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 639
    functionDepth: 2
    functionLinenumber: 639
    functionLinenumberEnd: 682
    functionName: ChannelTest::TestSuccessParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - SetCode::SetCode
    - ChannelTest::StopAndJoin
    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:690,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:690,1
    - Dst: DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:692,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:693,1
    - Dst: SetCode::SetCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:697,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:699,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:699,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:705,1
    - Dst: SetCode*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:705,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:706,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:709,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:710,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:711,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:714,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:714,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:715,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:716,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:716,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:716,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:721,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:725,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:726,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:727,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:727,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:728,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:731,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:731,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:733,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 30
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 734
      start: 684
    functionDepth: 2
    functionLinenumber: 684
    functionLinenumberEnd: 734
    functionName: ChannelTest::TestSuccessDuplicatedParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - DeleteOnlyOnceChannel::DeleteOnlyOnceChannel
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - SetCode*::ref_count
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - SetCode::SetCode
    - ChannelTest::StopAndJoin
    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:742,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:742,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:743,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:744,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:746,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:746,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:748,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:749,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:750,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:750,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:752,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:755,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:756,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:757,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:759,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:759,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:759,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:760,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:761,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:762,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:763,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:763,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:764,1
    - Dst: test::EchoRequest::code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:764,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:764,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:765,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:769,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:770,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:771,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:771,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:772,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:775,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:775,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 778
      start: 736
    functionDepth: 2
    functionLinenumber: 736
    functionLinenumberEnd: 778
    functionName: ChannelTest::TestSuccessSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::sub_count
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::code
    - test::EchoRequest::set_code
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - brpc::Controller::remote_side
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - brpc::SelectiveChannel::AddChannel
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - ChannelTest::StopAndJoin
    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:785,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:785,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:790,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:791,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:791,1
    - Dst: SetCodeOnEven::SetCodeOnEven
      Src: /src/brpc/test/brpc_channel_unittest.cpp:793,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:795,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:798,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:799,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:800,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:802,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:803,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:803,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:803,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:804,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:804,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:805,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:807,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:809,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:809,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:809,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:812,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:812,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:814,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:814,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:818,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:819,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:820,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:821,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:824,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:824,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:826,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 780
    functionDepth: 2
    functionLinenumber: 780
    functionLinenumberEnd: 827
    functionName: ChannelTest::TestSkipParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - SetCodeOnEven::SetCodeOnEven
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - ChannelTest::StopAndJoin
    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:834,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:834,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:840,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:840,1
    - Dst: GetReqAndAddRes::GetReqAndAddRes
      Src: /src/brpc/test/brpc_channel_unittest.cpp:842,1
    - Dst: MergeNothing::MergeNothing
      Src: /src/brpc/test/brpc_channel_unittest.cpp:842,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:844,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:847,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:848,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:849,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:849,1
    - Dst: test::ComboRequest::add_requests
      Src: /src/brpc/test/brpc_channel_unittest.cpp:852,1
    - Dst: ::test::EchoRequest*::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:853,1
    - Dst: ::test::EchoRequest*::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:854,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:858,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:859,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:860,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:860,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:861,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:862,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_channel_unittest.cpp:862,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:862,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:865,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:866,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:868,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:868,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:868,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:869,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:869,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:870,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:870,1
    - Dst: test::ComboResponse::responses_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:871,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:872,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:872,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:873,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:874,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: test::ComboResponse::responses
      Src: /src/brpc/test/brpc_channel_unittest.cpp:875,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:879,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:880,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:881,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:882,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:885,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:887,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 888
      start: 829
    functionDepth: 2
    functionLinenumber: 829
    functionLinenumberEnd: 888
    functionName: ChannelTest::TestSuccessParallel2
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::ComboResponse::responses_size
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::Reset
    - test::ComboResponse::responses
    - brpc::ParallelChannel::AddChannel
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    - MergeNothing::MergeNothing
    - brpc::Controller::Failed
    - butil::cpuwide_time_us
    - ::test::EchoRequest*::set_code
    - brpc::Controller::latency_us
    - EXPECT_LT
    - GetReqAndAddRes::GetReqAndAddRes
    - ASSERT_GT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - test::ComboRequest::add_requests
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ::test::EchoRequest*::set_message
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - butil::string_printf
    - ChannelTest::StopAndJoin
    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:895,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:895,1
    - Dst: brpc::ParallelChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:902,1
    - Dst: SuccessLimitCallMapper::SuccessLimitCallMapper
      Src: /src/brpc/test/brpc_channel_unittest.cpp:903,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:905,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:906,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:906,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:909,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:912,1
    - Dst: test::EchoRequest::set_code
      Src: /src/brpc/test/brpc_channel_unittest.cpp:913,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:914,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:916,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:916,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:916,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:917,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:917,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:918,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:919,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:919,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:921,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:921,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:923,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:924,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:924,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:927,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:928,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:928,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:929,1
    - Dst: test::EchoResponse::code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:929,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:932,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:933,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:934,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:934,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:935,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:938,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:938,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:940,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 35
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 941
      start: 890
    functionDepth: 2
    functionLinenumber: 890
    functionLinenumberEnd: 941
    functionName: ChannelTest::TestSuccessLimitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - SuccessLimitCallMapper::SuccessLimitCallMapper
    - brpc::Controller::Controller
    - std::string
    - test::EchoRequest::set_code
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::Controller::sub
    - test::EchoResponse::code_list
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::ParallelChannel::Init
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - ChannelTest::StopAndJoin
    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:949,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:951,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:953,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:954,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 956
      start: 948
    functionDepth: 1
    functionLinenumber: 948
    functionLinenumberEnd: 956
    functionName: ChannelTest::Canceler
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<CancelerArg*>
    - bthread_usleep
    - brpc::StartCancel
    - LOG
    linkageType: ''
    returnType: void
    signature: void * Canceler(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:965,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:966,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:967,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:969,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:972,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:973,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:974,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:975,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:976,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:977,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:977,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:977,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:978,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 979
      start: 959
    functionDepth: 2
    functionLinenumber: 959
    functionLinenumberEnd: 979
    functionName: ChannelTest::CancelBeforeCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::ErrorCode
    - brpc::StartCancel
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    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:987,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:987,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:993,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:994,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:994,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:999,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1002,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1003,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1004,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1005,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1006,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1007,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1008,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1008,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1009,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1009,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1010,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1010,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1011,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1012
      start: 981
    functionDepth: 2
    functionLinenumber: 981
    functionLinenumberEnd: 1012
    functionName: ChannelTest::CancelBeforeCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::sub
    - brpc::Controller::ErrorCode
    - brpc::StartCancel
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    - EXPECT_TRUE
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1020,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1020,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1023,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1024,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1024,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1026,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1027,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1028,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1031,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1034,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1035,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1036,1
    - Dst: brpc::StartCancel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1037,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1038,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1039,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1039,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1039,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1040,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1041
      start: 1014
    functionDepth: 2
    functionLinenumber: 1014
    functionLinenumberEnd: 1041
    functionName: ChannelTest::CancelBeforeCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::StartCancel
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::Controller::call_id
    - brpc::SelectiveChannel::AddChannel
    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:1049,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1049,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1050,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1051,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1053,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1056,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1057,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1061,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1061,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1062,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1063,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1064,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1065,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1066,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1068,1
    - Dst: pthread_join
      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::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1069,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1070,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1070,1
    - Dst: EXPECT_TRUE
      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_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1072,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1072,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1073,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1074
      start: 1043
    functionDepth: 2
    functionLinenumber: 1043
    functionLinenumberEnd: 1074
    functionName: ChannelTest::CancelDuringCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Controller::sub_count
    - pthread_create
    - butil::Timer::stop
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - brpc::Controller::call_id
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1082,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1082,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1088,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1089,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1089,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: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1113,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1113,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1115,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1115,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1115,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1116,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1117
      start: 1076
    functionDepth: 2
    functionLinenumber: 1076
    functionLinenumberEnd: 1117
    functionName: ChannelTest::CancelDuringCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - butil::Timer::start
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - pthread_create
    - butil::Timer::stop
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - brpc::Controller::call_id
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - brpc::Controller::latency_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1125,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1125,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1129,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1129,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1131,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1133,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1136,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1139,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1140,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1144,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1144,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1145,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1146,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1147,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1148,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1149,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1150,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1150,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1151,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1151,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1152,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1153,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1153,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1154,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1154,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1156
      start: 1119
    functionDepth: 2
    functionLinenumber: 1119
    functionLinenumberEnd: 1156
    functionName: ChannelTest::CancelDuringCallMethodSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::SelectiveChannel::SelectiveChannel
    - butil::Timer::start
    - brpc::Controller::sub_count
    - pthread_create
    - butil::Timer::stop
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - brpc::Controller::call_id
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1164,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1164,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1165,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1166,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1168,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1171,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1172,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1173,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1174,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1175,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1175,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1176,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1177,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1177,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1179
      start: 1158
    functionDepth: 2
    functionLinenumber: 1158
    functionLinenumberEnd: 1179
    functionName: ChannelTest::CancelAfterCallMethod
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - bthread_id_error
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    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:1187,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1187,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1193,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1194,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1194,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1199,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1202,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1204,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1205,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1206,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1206,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1207,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1208,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1211,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1211,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1212,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1213
      start: 1181
    functionDepth: 2
    functionLinenumber: 1181
    functionLinenumberEnd: 1213
    functionName: ChannelTest::CancelAfterCallMethodParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Controller::sub
    - bthread_id_error
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - brpc::Controller::call_id
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1216,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1216,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1217,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1218,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1220,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1221,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1224,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1225,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1227,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1227,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1228,1
    - Dst: brpc::Controller::request_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1228,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1230,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1233,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1234,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1235,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1235,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1236,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1239,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1239,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1241,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1242
      start: 1215
    functionDepth: 2
    functionLinenumber: 1215
    functionLinenumberEnd: 1242
    functionName: ChannelTest::TestAttachment
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::Controller
    - std::string
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::cpuwide_time_us
    - EXPECT_LT
    - brpc::Controller::request_attachment
    - ChannelTest::StartAccept
    - EXPECT_GE
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1249,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1249,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1250,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1251,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1253,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1257,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1259
      start: 1244
    functionDepth: 2
    functionLinenumber: 1244
    functionLinenumberEnd: 1259
    functionName: ChannelTest::TestRequestNotInit
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    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:1266,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1266,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1272,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1273,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1273,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1278,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1281,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1282,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1282,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1282,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1283,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1283,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1284,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1285
      start: 1261
    functionDepth: 2
    functionLinenumber: 1261
    functionLinenumberEnd: 1285
    functionName: ChannelTest::TestRequestNotInitParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1292,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1292,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1296,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1296,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1298,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1300,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1303,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1306,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1307,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1308,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1309,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1310,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1310,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1311,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1287
    functionDepth: 2
    functionLinenumber: 1287
    functionLinenumberEnd: 1312
    functionName: ChannelTest::TestRequestNotInitSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::SelectiveChannel::AddChannel
    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:1318,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1318,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1319,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1320,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1322,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1325,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1326,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1327,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1328,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1329,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1330,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1331,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1332,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1332,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1332,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1333,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1335
      start: 1314
    functionDepth: 2
    functionLinenumber: 1314
    functionLinenumberEnd: 1335
    functionName: ChannelTest::TestRPCTimeout
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - butil::Timer::start
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - EXPECT_LT
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1342,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1342,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1349,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1349,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1354,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1357,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1358,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1359,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1360,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1361,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1362,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1363,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1364,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1364,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1364,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1365,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1365,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1366,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1367,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1367,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1369,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1370,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1371
      start: 1337
    functionDepth: 2
    functionLinenumber: 1337
    functionLinenumberEnd: 1371
    functionName: ChannelTest::TestRPCTimeoutParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - butil::Timer::start
    - brpc::Controller::sub_count
    - butil::Timer::m_elapsed
    - brpc::ParallelChannel::AddChannel
    - butil::Timer::stop
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1380,1
    - Dst: test::EchoRequest*::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1381,1
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1382,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1382,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: 1384
      start: 1375
    functionDepth: 1
    functionLinenumber: 1375
    functionLinenumberEnd: 1384
    functionName: ChannelTest::MakeTheRequestTimeout::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - test::EchoRequest*::set_sleep_us
    - brpc::SubCall
    - google::protobuf::Message*::New
    - brpc::Clone<test::EchoRequest>
    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) override"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1392,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1392,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1399,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1399,1
    - Dst: MakeTheRequestTimeout::MakeTheRequestTimeout
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1401,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1404,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1407,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1408,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1409,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1410,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1411,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1412,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1413,1
    - Dst: brpc::Controller::ErrorText
      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_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1414,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1415,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1417,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1419,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1419,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1422,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1423,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1424
      start: 1387
    functionDepth: 2
    functionLinenumber: 1387
    functionLinenumberEnd: 1424
    functionName: ChannelTest::TimeoutStillChecksSubChannelsParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - butil::Timer::start
    - brpc::Controller::sub_count
    - butil::Timer::m_elapsed
    - brpc::ParallelChannel::AddChannel
    - butil::Timer::stop
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - MakeTheRequestTimeout::MakeTheRequestTimeout
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1431,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1431,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1435,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1437,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1439,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1439,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1442,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1445,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1446,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1447,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1448,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1449,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1450,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1451,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1452,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1452,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1452,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1453,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1453,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1454,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1454,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: labs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1455,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1456,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1456,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1457,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1457,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1459
      start: 1426
    functionDepth: 2
    functionLinenumber: 1426
    functionLinenumberEnd: 1459
    functionName: ChannelTest::TestRPCTimeoutSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - butil::Timer::start
    - brpc::Controller::sub_count
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - labs
    - EXPECT_EQ
    - brpc::Controller::sub
    - EXPECT_LT
    - brpc::Controller::timeout_ms
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::Controller::set_timeout_ms
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: "void TestRPCTimeoutSelective(\n        bool single_server, bool async,
      bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1466,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1466,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1470,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1470,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1472,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1474,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1477,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1480,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1481,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1482,1
    - Dst: SetMockFunc
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1484,1
    - Dst: static_cast<brpc::Controller*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1488,1
    - Dst: std::atomic::fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1489,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1491,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1492,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1494,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1495,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1496,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1497,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1500,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1501,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1502,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1503,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1504,1
    - Dst: brpc::Controller*::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1504,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1505,1
    - Dst: std::atomic::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1505,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1506,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1507,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 28
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1508
      start: 1461
    functionDepth: 2
    functionLinenumber: 1461
    functionLinenumberEnd: 1508
    functionName: ChannelTest::TestBackupRequestSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<brpc::Controller*>
    - LOG
    - ASSERT_EQ
    - brpc::SelectiveChannel::SelectiveChannel
    - butil::Timer::start
    - butil::Timer::stop
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - std::atomic::load
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::Timer::Timer
    - EXPECT_FALSE
    - EXPECT_EQ
    - butil::IOBuf::append
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::Controller::set_timeout_ms
    - brpc::Controller*::Failed
    - bthread_usleep
    - brpc::SelectiveChannel::Init
    - brpc::Controller*::response_attachment
    - ChannelTest::SetUpChannel
    - std::atomic::fetch_add
    - ChannelTest::CallMethod
    - SetMockFunc
    - butil::IOBuf::IOBuf
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: "void TestBackupRequestSelective(\n        bool single_server, bool
      async, bool short_connection)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1511,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1511,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1515,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1515,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1517,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1518,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1519,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1519,1
    - Dst: SetMockFunc
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1525,1
    - Dst: std::atomic::fetch_add
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1529,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1532,1
    - Dst: clear_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1534,1
    - Dst: add_code_list
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1537,1
    - Dst: set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1539,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1543,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1546,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1547,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1548,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1549,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1550,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1550,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1552,1
    - Dst: test::EchoResponse::code_list_size
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1553,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1553,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1553,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1557,1
    - Dst: std::atomic::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1557,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1558,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1510
    functionDepth: 2
    functionLinenumber: 1510
    functionLinenumberEnd: 1559
    functionName: ChannelTest::TestBackupRequestSelectiveResponseRace
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - ASSERT_TRUE
    - std::atomic::load
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - clear_code_list
    - EXPECT_EQ
    - brpc::Controller::Failed
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    - brpc::Controller::set_timeout_ms
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::SelectiveChannel::Init
    - add_code_list
    - ChannelTest::SetUpChannel
    - std::atomic::fetch_add
    - ChannelTest::CallMethod
    - test::EchoResponse::code_list_size
    - SetMockFunc
    - set_message
    - ChannelTest::StopAndJoin
    linkageType: ''
    returnType: void
    signature: void TestBackupRequestSelectiveResponseRace()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1566,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1566,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1567,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1568,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1570,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1573,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1574,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1575,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1577,1
    - Dst: brpc::Controller::ErrorCode
      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: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1579
      start: 1561
    functionDepth: 2
    functionLinenumber: 1561
    functionLinenumberEnd: 1579
    functionName: ChannelTest::TestCloseFD
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - ChannelTest::StopAndJoin
    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:1586,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1586,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1593,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1593,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1598,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1601,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1602,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1603,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1605,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1605,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1606,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1607,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1608,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1608,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1609,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1610
      start: 1581
    functionDepth: 2
    functionLinenumber: 1581
    functionLinenumberEnd: 1610
    functionName: ChannelTest::TestCloseFDParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1617,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1617,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1620,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1623,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1623,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1625,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1626,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1627,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1627,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1630,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1633,1
    - Dst: test::EchoRequest::set_close_fd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1634,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1635,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1638,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1639,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1639,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1641,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1612
    functionDepth: 2
    functionLinenumber: 1612
    functionLinenumberEnd: 1642
    functionName: ChannelTest::TestCloseFDSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::AddChannel
    - test::EchoRequest::set_message
    - ChannelTest::StartAccept
    - test::EchoRequest::set_close_fd
    - brpc::Controller::ErrorText
    - ChannelTest::StopAndJoin
    - brpc::ChannelOptions::ChannelOptions
    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:1649,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1649,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1650,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1651,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1653,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1656,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1657,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1658,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1660,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1660,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1660,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1662
      start: 1644
    functionDepth: 2
    functionLinenumber: 1644
    functionLinenumberEnd: 1662
    functionName: ChannelTest::TestServerFail
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_server_fail
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    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:1669,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1669,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1676,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1676,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1681,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1684,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1685,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1686,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1688,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1689,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1689,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1690,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1691
      start: 1664
    functionDepth: 2
    functionLinenumber: 1664
    functionLinenumberEnd: 1691
    functionName: ChannelTest::TestServerFailParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_server_fail
    - ChannelTest::CallMethod
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1698,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1698,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1702,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1702,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1704,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1706,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1706,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1709,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1712,1
    - Dst: test::EchoRequest::set_server_fail
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1713,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1714,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1716,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1716,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1717,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1717,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1718,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1718,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1720,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1720,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1721,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1722
      start: 1693
    functionDepth: 2
    functionLinenumber: 1693
    functionLinenumberEnd: 1722
    functionName: ChannelTest::TestServerFailSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - brpc::Controller::sub_count
    - LOG
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_server_fail
    - brpc::Channel::Channel
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    - ChannelTest::CallMethod
    - ChannelTest::StartAccept
    - brpc::Controller::ErrorText
    - ChannelTest::StopAndJoin
    - brpc::SelectiveChannel::AddChannel
    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:1728,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1728,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1729,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1730,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1732,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1735,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1736,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1737,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1739,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1740,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1740,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1740,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1742,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1743,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1744,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1744,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1745,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1748,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1749
      start: 1724
    functionDepth: 2
    functionLinenumber: 1724
    functionLinenumberEnd: 1749
    functionName: ChannelTest::TestDestroyChannel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - bthread_usleep
    - std::string
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - butil::cpuwide_time_us
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - test::EchoRequest::set_sleep_us
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ChannelTest::CallMethod
    - brpc::Controller::ErrorText
    - ChannelTest::StartAccept
    - EXPECT_LT
    - ChannelTest::StopAndJoin
    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:1756,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1756,1
    - Dst: brpc::ParallelChannel::ParallelChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1757,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1759,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1760,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1761,1
    - Dst: brpc::ParallelChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1761,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1765,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1768,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1769,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1770,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1772,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1772,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1772,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1773,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1775,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1776,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1777,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1777,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1778,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1780,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1781
      start: 1751
    functionDepth: 2
    functionLinenumber: 1751
    functionLinenumberEnd: 1781
    functionName: ChannelTest::TestDestroyChannelParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::Controller
    - std::string
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - brpc::ParallelChannel*::AddChannel
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::ParallelChannel::ParallelChannel
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1788,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1788,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1789,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1790,1
    - Dst: brpc::SelectiveChannel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1790,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1792,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1793,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1794,1
    - Dst: brpc::SelectiveChannel*::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1794,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1797,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1800,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1801,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1802,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1804,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1806,1
    - Dst: brpc::Controller::remote_side
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1806,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1807,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1807,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1808,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1808,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1811,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1812,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1813,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1813,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1814,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1816,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 2
    argNames:
    - single_server
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1817
      start: 1783
    functionDepth: 2
    functionLinenumber: 1783
    functionLinenumberEnd: 1817
    functionName: ChannelTest::TestDestroyChannelSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::sub_count
    - brpc::Controller::Controller
    - std::string
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::SelectiveChannel*::AddChannel
    - EXPECT_EQ
    - brpc::Controller::sub
    - brpc::Controller::remote_side
    - butil::cpuwide_time_us
    - EXPECT_LT
    - brpc::SelectiveChannel*::Init
    - ChannelTest::StartAccept
    - bthread_usleep
    - test::EchoResponse::message
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:1820,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1823,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1824,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1826,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1827,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1827,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1827,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - channel
    - async
    argTypes:
    - brpc::ChannelBase*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1828
      start: 1819
    functionDepth: 2
    functionLinenumber: 1819
    functionLinenumberEnd: 1828
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - 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:1831,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1835,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1836,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1838,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1838,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1839,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1839,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1839,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1840,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - channel
    - async
    - count
    argTypes:
    - brpc::ChannelBase*
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1842
      start: 1830
    functionDepth: 2
    functionLinenumber: 1830
    functionLinenumberEnd: 1842
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ChannelTest::CallMethod
    - test::EchoRequest::set_message
    - brpc::Controller::Reset
    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:1846,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1847,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1848,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1852,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1853,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1855,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1856,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1856,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1856,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1857,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: 1859
      start: 1844
    functionDepth: 2
    functionLinenumber: 1844
    functionLinenumberEnd: 1859
    functionName: ChannelTest::RPCThread
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::ErrorText
    - brpc::Controller::Reset
    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:1867,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1867,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1868,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1869,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1870,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1876,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1878,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1878,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1882,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1886,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1888,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1888,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1890,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1891
      start: 1861
    functionDepth: 2
    functionLinenumber: 1861
    functionLinenumberEnd: 1891
    functionName: ChannelTest::TestAuthentication
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - MyAuthenticator::count::load
    - pthread_join
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - brpc::Channel::Channel
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    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:1899,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1899,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1900,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1906,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1907,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1907,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1916,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1918,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1918,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1922,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1926,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1926,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1928,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1928,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1930,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1931
      start: 1893
    functionDepth: 2
    functionLinenumber: 1893
    functionLinenumberEnd: 1931
    functionName: ChannelTest::TestAuthenticationParallel
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - MyAuthenticator::count::load
    - pthread_join
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::StartAccept
    - ChannelTest::StopAndJoin
    - brpc::ParallelChannel::AddChannel
    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:1939,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1939,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1940,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1943,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1944,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1944,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1946,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1947,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1948,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1948,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1955,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1957,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1957,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1961,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1965,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1965,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1967,1
    - Dst: MyAuthenticator::count::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1967,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1969,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1970
      start: 1933
    functionDepth: 2
    functionLinenumber: 1933
    functionLinenumberEnd: 1970
    functionName: ChannelTest::TestAuthenticationSelective
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - brpc::SelectiveChannel::Init
    - MyAuthenticator::count::load
    - pthread_join
    - ASSERT_EQ
    - ChannelTest::SetUpChannel
    - ChannelTest::StopAndJoin
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Channel::Channel
    - MyAuthenticator::MyAuthenticator
    - ChannelTest::StartAccept
    - brpc::SelectiveChannel::AddChannel
    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:1977,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1977,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1978,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1979,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1984,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1985,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1988,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1989,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1990,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1991,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1992,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1993,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1993,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1994,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1997,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:1998,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2000,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2001,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2005,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2005,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2005,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2006,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2006,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2008,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2009,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2010,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2010,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2011,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2015,1
    - Dst: EXPECT_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: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2017,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2019,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2019,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2022,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2023,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2026,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2027,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2028,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2029,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2030,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2030,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 39
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2031
      start: 1972
    functionDepth: 2
    functionLinenumber: 1972
    functionLinenumberEnd: 2031
    functionName: ChannelTest::TestRetry
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::Reset
    - brpc::Controller::Controller
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - EXPECT_EQ
    - butil::cpuwide_time_us
    - brpc::Controller::Failed
    - EXPECT_LT
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:2034,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2034,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2036,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2037,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2042,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2043,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2043,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2046,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2047,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2048,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2049,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2049,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2049,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2054,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2055,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2056,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2057,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2059,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2059,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2060,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 2
    argNames:
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2061
      start: 2033
    functionDepth: 2
    functionLinenumber: 2033
    functionLinenumberEnd: 2061
    functionName: ChannelTest::TestRetryOtherServer
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - EXPECT_EQ
    - std::string::c_str
    - butil::TempFile::save_format
    - endpoint2str
    - brpc::Controller::Controller
    - std::string
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - butil::TempFile::fname
    - ChannelTest::CallMethod
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - ChannelTest::StopAndJoin
    - butil::TempFile::TempFile
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::ChannelOptions::ChannelOptions
    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: 2071
      start: 2064
    functionDepth: 0
    functionLinenumber: 2064
    functionLinenumberEnd: 2071
    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:2080,1
    - Dst: auto::channel_test::TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2081,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2084
      start: 2079
    functionDepth: 0
    functionLinenumber: 2079
    functionLinenumberEnd: 2084
    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:2088,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2088,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2092,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2094,1
    - Dst: brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2095,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2099,1
    - Dst: brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2100,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2106,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2107,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2109,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2113,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2114,1
    - Dst: butil::TempFile::save_format
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2114,1
    - Dst: endpoint2str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2117,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2118,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2120,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2120,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2120,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2125,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2126,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2127,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2128,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2129,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2130,1
    - Dst: brpc::Controller::latency_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2131,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2131,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2134,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2135,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: 2136
      start: 2086
    functionDepth: 2
    functionLinenumber: 2086
    functionLinenumberEnd: 2136
    functionName: ChannelTest::TestRetryBackoff
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - butil::TempFile::save_format
    - ASSERT_EQ
    - butil::TempFile::fname
    - brpc::RpcRetryPolicyWithFixedBackoff::RpcRetryPolicyWithFixedBackoff
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - std::string
    - EXPECT_GT
    - std::unique_ptr::unique_ptr
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::TempFile::TempFile
    - EXPECT_EQ
    - std::string::c_str
    - std::unique_ptr::reset
    - brpc::Controller::latency_us
    - brpc::RpcRetryPolicyWithJitteredBackoff::RpcRetryPolicyWithJitteredBackoff
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::retried_count
    - endpoint2str
    - brpc::Controller::ErrorCode
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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:2144,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2144,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2145,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2146,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2151,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2152,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2154,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2155,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2156,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2157,1
    - Dst: ChannelTest::CallMethod
      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::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2159,1
    - Dst: brpc::Controller::ErrorText
      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::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2160,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2161,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2161,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2162,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2166,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2167,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2168,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2168,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2169,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2172,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2172,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2175
      start: 2138
    functionDepth: 2
    functionLinenumber: 2138
    functionLinenumberEnd: 2175
    functionName: ChannelTest::TestBackupRequest
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::has_backup_request
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::cpuwide_time_us
    - EXPECT_LT
    - ChannelTest::StartAccept
    - EXPECT_GE
    - brpc::Controller::set_max_retry
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ChannelTest::StopAndJoin
    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: 2181
      start: 2179
    functionDepth: 0
    functionLinenumber: 2179
    functionLinenumberEnd: 2181
    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: 2186
      start: 2184
    functionDepth: 0
    functionLinenumber: 2184
    functionLinenumberEnd: 2186
    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: 2188
      start: 2188
    functionDepth: 0
    functionLinenumber: 2188
    functionLinenumberEnd: 2188
    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:2196,1
    - Dst: ChannelTest::StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2196,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2205,1
    - Dst: ChannelTest::SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2206,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2211,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2212,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2215,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2216,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2217,1
    - Dst: ChannelTest::CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2219,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2219,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2221,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2221,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2222,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2226,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2227,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2228,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2228,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2229,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2232,1
    - Dst: ConnectionCount
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2232,1
    - Dst: ChannelTest::StopAndJoin
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 3
    argNames:
    - single_server
    - async
    - short_connection
    argTypes:
    - bool
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2237
      start: 2194
    functionDepth: 2
    functionLinenumber: 2194
    functionLinenumberEnd: 2237
    functionName: ChannelTest::TestBackupRequestPolicy
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - test::EchoRequest::set_sleep_us
    - brpc::Controller::ErrorText
    - brpc::Controller::has_backup_request
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - butil::cpuwide_time_us
    - ChannelTest::StartAccept
    - brpc::Controller::set_max_retry
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Controller::ErrorCode
    - ConnectionCount
    - ASSERT_GE
    - ChannelTest::SetUpChannel
    - ChannelTest::CallMethod
    - ASSERT_LT
    - ChannelTest::StopAndJoin
    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: 2256
      start: 2256
    functionDepth: 0
    functionLinenumber: 2256
    functionLinenumberEnd: 2256
    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: 2257
      start: 2257
    functionDepth: 0
    functionLinenumber: 2257
    functionLinenumberEnd: 2257
    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: 2258
      start: 2258
    functionDepth: 0
    functionLinenumber: 2258
    functionLinenumberEnd: 2258
    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:2270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2271,1
    - Dst: MyShared*::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2273,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2277,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2279,1
    - Dst: butil::intrusive_ptr::ref_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2279,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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2283
      start: 2266
    functionDepth: 1
    functionLinenumber: 2266
    functionLinenumberEnd: 2283
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - MyShared::MyShared
    - MyShared*::ref_count
    - butil::intrusive_ptr::ref_count
    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:2287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2288,1
    - Dst: brpc::Channel::Init
      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: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2290,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2294,1
    - Dst: brpc::Channel::Init
      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: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2296,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2299,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2301,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2301,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2302,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2303,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2307,1
    - Dst: brpc::SocketMapFind
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2307,1
    - Dst: brpc::SocketMapKey
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2317
      start: 2285
    functionDepth: 1
    functionLinenumber: 2285
    functionLinenumberEnd: 2317
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_TRUE
    - brpc::SocketMapKey
    - Init
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - brpc::SocketMapFind
    - brpc::Channel::Channel
    - brpc::Channel::SingleServer
    - 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:2320,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2321,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2322
      start: 2319
    functionDepth: 1
    functionLinenumber: 2319
    functionLinenumberEnd: 2322
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_EQ
    - brpc::Channel::Channel
    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:2325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2326,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2327
      start: 2324
    functionDepth: 1
    functionLinenumber: 2324
    functionLinenumberEnd: 2327
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_EQ
    - brpc::Channel::Channel
    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:2330,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2332,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2334,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2334,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2335,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2337,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2337,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2339,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2342
      start: 2329
    functionDepth: 1
    functionLinenumber: 2329
    functionLinenumberEnd: 2342
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - std::string::c_str
    - butil::TempFile::save
    - std::string
    - ASSERT_EQ
    - butil::TempFile::fname
    - brpc::Channel::Channel
    - butil::TempFile::TempFile
    - brpc::ChannelOptions::ChannelOptions
    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:2345,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2348,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2349,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2349,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2350,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2351
      start: 2344
    functionDepth: 1
    functionLinenumber: 2344
    functionLinenumberEnd: 2351
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::ChannelOptions::ChannelOptions
    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:2354,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2356,1
    - Dst: butil::TempFile::save
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2356,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2357,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2359,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2359,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2359,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2360,1
    - Dst: brpc::Channel*::SingleServer
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2360,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2363,1
    - Dst: brpc::Channel*::_lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2363,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2364,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2372,1
    - Dst: dynamic_cast<brpc::LoadBalancerWithNaming*>
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2374,1
    - Dst: _lb::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2374,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2376,1
    - Dst: brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2376,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2385,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2386,1
    - Dst: butil::intrusive_ptr::_nref::load
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2386,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2388
      start: 2353
    functionDepth: 1
    functionLinenumber: 2353
    functionLinenumberEnd: 2388
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - dynamic_cast<brpc::LoadBalancerWithNaming*>
    - ASSERT_FALSE
    - std::string::c_str
    - ASSERT_TRUE
    - butil::TempFile::save
    - std::string
    - Init
    - butil::intrusive_ptr::get
    - ASSERT_EQ
    - butil::TempFile::fname
    - brpc::Channel*::Init
    - brpc::Channel::Channel
    - brpc::Channel*::_lb::get
    - butil::intrusive_ptr::_nref::load
    - butil::TempFile::TempFile
    - _lb::get
    - brpc::Channel*::SingleServer
    - brpc::LoadBalancerWithNaming*::_nsthread_ptr::get
    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:2391,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2396,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2396,1
    - Dst: ASSERT_EQ
      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::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2401,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2402,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2403,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2403,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2406,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2407,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2409,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2413,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2415,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2417,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2419,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2421,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2422,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2423,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2425,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2426,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2428,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2429,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2430,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2431,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2432,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2435,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2435,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2437,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2440,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2441,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2444,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2444,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2446,1
    - Dst: brpc::Channel::_options::ssl_options
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2449,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2450,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2451,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2451,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2452,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2453,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2455,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2457,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2459,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2459,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2460,1
    - Dst: butil::TempFile::TempFile
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2469,1
    - Dst: fopen
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2471,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2471,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2472,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2473,1
    - Dst: fprintf
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2473,1
    - Dst: fclose
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2475,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2477,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2478,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2480,1
    - Dst: butil::TempFile::fname
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2480,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2481
      start: 2390
    functionDepth: 1
    functionLinenumber: 2390
    functionLinenumberEnd: 2481
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ARRAY_SIZE
    - std::string::c_str
    - ASSERT_TRUE
    - butil::TempFile::TempFile
    - fprintf
    - brpc::Channel::_options::ssl_options
    - fclose
    - std::string
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - brpc::Channel::Channel
    - brpc::ChannelOptions::mutable_ssl_options
    - expected_peer_name::empty
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, parse_hostname)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2491
      start: 2483
    functionDepth: 0
    functionLinenumber: 2483
    functionLinenumberEnd: 2491
    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:2496,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2499,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2500,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2501,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2501,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2502
      start: 2493
    functionDepth: 1
    functionLinenumber: 2493
    functionLinenumberEnd: 2502
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_message
    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:2505,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2508,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2510,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2511,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2512,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2512,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2512,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2514,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2517,1
    - Dst: brpc::ThriftStub::ThriftStub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2518,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2519,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2520,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2520,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2520,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2521
      start: 2504
    functionDepth: 1
    functionLinenumber: 2504
    functionLinenumberEnd: 2521
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ThriftStub::ThriftStub
    - brpc::NewCallback
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, uninitialized_selective_channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2524,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2525,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2525,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2527,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2530,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2531,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2532,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2532,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2533
      start: 2523
    functionDepth: 1
    functionLinenumber: 2523
    functionLinenumberEnd: 2533
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::SelectiveChannel::SelectiveChannel
    - test::EchoRequest::set_message
    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:2540,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2541
      start: 2536
    functionDepth: 1
    functionLinenumber: 2536
    functionLinenumberEnd: 2541
    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*)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2548,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2550,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2550,1
    - Dst: BadCall::BadCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2551,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2554,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2557,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2558,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2559,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2560
      start: 2544
    functionDepth: 1
    functionLinenumber: 2544
    functionLinenumberEnd: 2560
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - SetUpChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - BadCall::BadCall
    - brpc::ParallelChannel::AddChannel
    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:2567,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2568
      start: 2563
    functionDepth: 1
    functionLinenumber: 2563
    functionLinenumberEnd: 2568
    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*)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2575,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2576,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2577,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2577,1
    - Dst: SkipCall::SkipCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2578,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2581,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2584,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2585,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2587,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2587,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2587,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2588,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2588,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2589,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2590,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2590,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2592
      start: 2571
    functionDepth: 1
    functionLinenumber: 2571
    functionLinenumberEnd: 2592
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - EXPECT_EQ
    - brpc::Controller::Controller
    - brpc::Controller::sub
    - brpc::Controller::ErrorCode
    - SkipCall::SkipCall
    - SetUpChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, skip_all_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SubCall
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2602,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2602,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: 2603
      start: 2598
    functionDepth: 1
    functionLinenumber: 2598
    functionLinenumberEnd: 2603
    functionName: EchoHttpHeader::Map
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SubCall
    - google::protobuf::Message*::New
    linkageType: ''
    returnType: brpc::SubCall
    signature: "brpc::SubCall Map(int channel_index, int channel_count,\n                      const
      google::protobuf::MethodDescriptor* method,\n                      const google::protobuf::Message*
      request,\n                      google::protobuf::Message* response) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller*::http_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2608,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - channel_index
    - main_cntl
    - sub_cntl
    argTypes:
    - int
    - brpc::Controller*
    - brpc::Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2609
      start: 2605
    functionDepth: 0
    functionLinenumber: 2605
    functionLinenumberEnd: 2609
    functionName: EchoHttpHeader::MapController
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::to_string
    - brpc::Controller*::http_request
    linkageType: ''
    returnType: void
    signature: "void MapController(int channel_index, int,\n                       const
      brpc::Controller* main_cntl,\n                       brpc::Controller* sub_cntl)
      override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2615,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2615,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2617,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2617,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2622,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2623,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2624,1
    - Dst: brpc::ParallelChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2624,1
    - Dst: EchoHttpHeader::EchoHttpHeader
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2624,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2627,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2630,1
    - Dst: test::EchoRequest::mutable_http_header
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2631,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2632,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2634,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2634,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2635,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2635,1
    - Dst: brpc::Controller::sub_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2636,1
    - Dst: brpc::Controller::sub
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2637,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    - Dst: brpc::Controller*::http_response
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2639,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2641
      start: 2612
    functionDepth: 1
    functionLinenumber: 2612
    functionLinenumberEnd: 2641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Controller::sub_count
    - brpc::ParallelChannel::AddChannel
    - ASSERT_FALSE
    - test::EchoRequest::mutable_http_header
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - SetUpChannel
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - std::to_string
    - brpc::Server::Server
    - CallMethod
    - brpc::Controller::sub
    - brpc::Server::Start
    - brpc::Controller::Failed
    - brpc::Server::AddService
    - EchoHttpHeader::EchoHttpHeader
    - brpc::Controller*::http_response
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, http_header_parallel_channels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectionFailedParallel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2647,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2651
      start: 2643
    functionDepth: 0
    functionLinenumber: 2643
    functionLinenumberEnd: 2651
    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:2657,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2661
      start: 2653
    functionDepth: 0
    functionLinenumber: 2653
    functionLinenumberEnd: 2661
    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:2667,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2671
      start: 2663
    functionDepth: 0
    functionLinenumber: 2663
    functionLinenumberEnd: 2671
    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:2677,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2681
      start: 2673
    functionDepth: 0
    functionLinenumber: 2673
    functionLinenumberEnd: 2681
    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:2687,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2691
      start: 2683
    functionDepth: 0
    functionLinenumber: 2683
    functionLinenumberEnd: 2691
    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:2697,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2701
      start: 2693
    functionDepth: 0
    functionLinenumber: 2693
    functionLinenumberEnd: 2701
    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:2707,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2711
      start: 2703
    functionDepth: 0
    functionLinenumber: 2703
    functionLinenumberEnd: 2711
    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:2717,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2721
      start: 2713
    functionDepth: 0
    functionLinenumber: 2713
    functionLinenumberEnd: 2721
    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:2727,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2731
      start: 2723
    functionDepth: 0
    functionLinenumber: 2723
    functionLinenumberEnd: 2731
    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:2737,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2741
      start: 2733
    functionDepth: 0
    functionLinenumber: 2733
    functionLinenumberEnd: 2741
    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:2747,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2751
      start: 2743
    functionDepth: 0
    functionLinenumber: 2743
    functionLinenumberEnd: 2751
    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:2757,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2761
      start: 2753
    functionDepth: 0
    functionLinenumber: 2753
    functionLinenumberEnd: 2761
    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:2767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2771
      start: 2763
    functionDepth: 0
    functionLinenumber: 2763
    functionLinenumberEnd: 2771
    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:2777,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2781
      start: 2773
    functionDepth: 0
    functionLinenumber: 2773
    functionLinenumberEnd: 2781
    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:2787,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2791
      start: 2783
    functionDepth: 0
    functionLinenumber: 2783
    functionLinenumberEnd: 2791
    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:2797,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2801
      start: 2793
    functionDepth: 0
    functionLinenumber: 2793
    functionLinenumberEnd: 2801
    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:2807,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2811
      start: 2803
    functionDepth: 0
    functionLinenumber: 2803
    functionLinenumberEnd: 2811
    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:2817,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2821
      start: 2813
    functionDepth: 0
    functionLinenumber: 2813
    functionLinenumberEnd: 2821
    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:2827,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2831
      start: 2823
    functionDepth: 0
    functionLinenumber: 2823
    functionLinenumberEnd: 2831
    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:2837,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2841
      start: 2833
    functionDepth: 0
    functionLinenumber: 2833
    functionLinenumberEnd: 2841
    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:2847,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2851
      start: 2843
    functionDepth: 0
    functionLinenumber: 2843
    functionLinenumberEnd: 2851
    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:2857,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2861
      start: 2853
    functionDepth: 0
    functionLinenumber: 2853
    functionLinenumberEnd: 2861
    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:2867,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2871
      start: 2863
    functionDepth: 0
    functionLinenumber: 2863
    functionLinenumberEnd: 2871
    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:2877,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2881
      start: 2873
    functionDepth: 0
    functionLinenumber: 2873
    functionLinenumberEnd: 2881
    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: TestBackupRequestSelective
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2887,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2891
      start: 2883
    functionDepth: 0
    functionLinenumber: 2883
    functionLinenumberEnd: 2891
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequestSelective
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backuprequest_selective)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequestSelectiveResponseRace
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2894,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2895
      start: 2893
    functionDepth: 0
    functionLinenumber: 2893
    functionLinenumberEnd: 2895
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestBackupRequestSelectiveResponseRace
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, backuprequest_selective_response_race)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestCloseFD
      Src: /src/brpc/test/brpc_channel_unittest.cpp:2901,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2905
      start: 2897
    functionDepth: 0
    functionLinenumber: 2897
    functionLinenumberEnd: 2905
    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:2911,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2915
      start: 2907
    functionDepth: 0
    functionLinenumber: 2907
    functionLinenumberEnd: 2915
    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:2921,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2925
      start: 2917
    functionDepth: 0
    functionLinenumber: 2917
    functionLinenumberEnd: 2925
    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:2931,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2935
      start: 2927
    functionDepth: 0
    functionLinenumber: 2927
    functionLinenumberEnd: 2935
    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:2941,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2945
      start: 2937
    functionDepth: 0
    functionLinenumber: 2937
    functionLinenumberEnd: 2945
    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:2951,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2955
      start: 2947
    functionDepth: 0
    functionLinenumber: 2947
    functionLinenumberEnd: 2955
    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:2961,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2965
      start: 2957
    functionDepth: 0
    functionLinenumber: 2957
    functionLinenumberEnd: 2965
    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:2971,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2975
      start: 2967
    functionDepth: 0
    functionLinenumber: 2967
    functionLinenumberEnd: 2975
    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:2981,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2985
      start: 2977
    functionDepth: 0
    functionLinenumber: 2977
    functionLinenumberEnd: 2985
    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:2991,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2995
      start: 2987
    functionDepth: 0
    functionLinenumber: 2987
    functionLinenumberEnd: 2995
    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:3000,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3003
      start: 2997
    functionDepth: 0
    functionLinenumber: 2997
    functionLinenumberEnd: 3003
    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:3014,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3016,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3017,1
    - Dst: TestRetryBackoff
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3020,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3026
      start: 3005
    functionDepth: 1
    functionLinenumber: 3005
    functionLinenumberEnd: 3026
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - bthread_join
    - TestRetryBackoffInfo::TestRetryBackoffInfo
    - TestRetryBackoff
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, retry_backoff)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestBackupRequest
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3032,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3036
      start: 3028
    functionDepth: 0
    functionLinenumber: 3028
    functionLinenumberEnd: 3036
    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:3042,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3046
      start: 3038
    functionDepth: 0
    functionLinenumber: 3038
    functionLinenumberEnd: 3046
    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: brpc::Server::Server
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3050,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3051,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3051,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3052,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3052,1
    - Dst: brpc::SelectiveChannel::SelectiveChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3054,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3055,1
    - Dst: brpc::SelectiveChannel::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3055,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3057,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3060,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3061,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3061,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3061,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3062,1
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3062,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3065,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3066,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3067,1
    - Dst: brpc::Controller::set_timeout_ms
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3068,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3072,1
    - Dst: test::EchoRequest::set_sleep_us
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3073,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3076,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3076,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3076,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3077,1
    - Dst: brpc::Controller::has_backup_request
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3077,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3078,1
    - Dst: brpc::Controller::retried_count
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3078,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3083,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3085,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3085,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3085,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3086,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3087,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3088
      start: 3048
    functionDepth: 1
    functionLinenumber: 3048
    functionLinenumberEnd: 3088
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel*::Init
    - test::EchoRequest::set_sleep_us
    - brpc::SelectiveChannel::SelectiveChannel
    - brpc::Controller::ErrorText
    - brpc::Controller::has_backup_request
    - brpc::Server::Join
    - brpc::Controller::Controller
    - brpc::Controller::set_backup_request_ms
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - brpc::Server::Server
    - CallMethod
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::Controller::set_max_retry
    - brpc::SelectiveChannel::AddChannel
    - brpc::ChannelOptions::ChannelOptions
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::retried_count
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::SelectiveChannel::Init
    - brpc::Controller::ErrorCode
    - ASSERT_GE
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, selective_channel_ignores_late_subdone_after_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: srand
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3091,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3091,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3092,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3092,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3093,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3107,1
    - Dst: SetUpChannel
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3108,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3112,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3116,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3116,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3120,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3125
      start: 3090
    functionDepth: 1
    functionLinenumber: 3090
    functionLinenumberEnd: 3125
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::NewCallback
    - pthread_create
    - EXPECT_EQ
    - pthread_join
    - SetUpChannel
    - ASSERT_EQ
    - StartAccept
    - brpc::Channel::Channel
    - MyAuthenticator::MyAuthenticator
    - srand
    - time
    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:3128,1
    - Dst: time
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3129,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3129,1
    - Dst: MyAuthenticator::MyAuthenticator
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3130,1
    - Dst: "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n
        \                       bool, bool, bool, const brpc::Authenticator*, int>"
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3147,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3152,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3152,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3161
      start: 3127
    functionDepth: 0
    functionLinenumber: 3127
    functionLinenumberEnd: 3161
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - EXPECT_EQ
    - pthread_join
    - ASSERT_EQ
    - StartAccept
    - MyAuthenticator::MyAuthenticator
    - srand
    - "brpc::NewCallback<\n                        ChannelTest, ChannelTest*,\n                        bool,
      bool, bool, const brpc::Authenticator*, int>"
    - time
    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:3166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3169
      start: 3163
    functionDepth: 0
    functionLinenumber: 3163
    functionLinenumberEnd: 3169
    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:3174,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3177
      start: 3171
    functionDepth: 0
    functionLinenumber: 3171
    functionLinenumberEnd: 3177
    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:3182,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3185
      start: 3179
    functionDepth: 0
    functionLinenumber: 3179
    functionLinenumberEnd: 3185
    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:3190,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3193
      start: 3187
    functionDepth: 0
    functionLinenumber: 3187
    functionLinenumberEnd: 3193
    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:3196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3200
      start: 3195
    functionDepth: 1
    functionLinenumber: 3195
    functionLinenumberEnd: 3200
    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:3205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3206
      start: 3204
    functionDepth: 0
    functionLinenumber: 3204
    functionLinenumberEnd: 3206
    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:3210,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3213,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3214,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3218,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3221,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3221,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3225,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3226,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3228,1
    - Dst: bthread_id_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3230
      start: 3208
    functionDepth: 1
    functionLinenumber: 3208
    functionLinenumberEnd: 3230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - bthread_id_error
    - ASSERT_EQ
    - brpc::Controller::Reset
    - brpc::Controller::call_id
    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:3233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3234,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3235,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3235,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3236,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3236,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3239,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3240,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3243,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3244,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3244,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3247,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3248,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3248,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3251,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3252,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3252,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3253,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3253,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3256,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3257,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3257,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3258,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3261,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3262,1
    - Dst: brpc::AdaptiveConnectionType::has_error
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3262,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3263,1
    - Dst: brpc::AdaptiveConnectionType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3264
      start: 3232
    functionDepth: 1
    functionLinenumber: 3232
    functionLinenumberEnd: 3264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_STREQ
    - brpc::AdaptiveConnectionType::has_error
    - brpc::AdaptiveConnectionType::AdaptiveConnectionType
    - brpc::AdaptiveConnectionType::name
    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:3267,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3268,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3269,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3269,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3270,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3271,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3274,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3275,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3275,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3276,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3277,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3280,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3281,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3282,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3283,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3283,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3286,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3287,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3287,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3288,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3289,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3289,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3292,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3293,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3293,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3294,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3295,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3298,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3299,1
    - Dst: brpc::AdaptiveProtocolType::name
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3299,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3300,1
    - Dst: brpc::AdaptiveProtocolType::has_param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3301,1
    - Dst: brpc::AdaptiveProtocolType::param
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3301,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3302
      start: 3266
    functionDepth: 1
    functionLinenumber: 3266
    functionLinenumberEnd: 3302
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::AdaptiveProtocolType::has_param
    - ASSERT_EQ
    - ASSERT_STREQ
    - brpc::AdaptiveProtocolType::name
    - brpc::AdaptiveProtocolType::param
    linkageType: ''
    returnType: void
    signature: void TEST_F(ChannelTest, adaptive_protocol_type)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3309,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3309,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3310
      start: 3306
    functionDepth: 1
    functionLinenumber: 3306
    functionLinenumberEnd: 3310
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidBackupRequestMs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3316,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3317
      start: 3312
    functionDepth: 1
    functionLinenumber: 3312
    functionLinenumberEnd: 3317
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidMaxBackupRatioZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3323,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3324
      start: 3319
    functionDepth: 1
    functionLinenumber: 3319
    functionLinenumberEnd: 3324
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidMaxBackupRatioNegative)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3330,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3330,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3331
      start: 3326
    functionDepth: 1
    functionLinenumber: 3326
    functionLinenumberEnd: 3331
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidMaxBackupRatioAboveOne)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3337,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3338
      start: 3333
    functionDepth: 1
    functionLinenumber: 3333
    functionLinenumberEnd: 3338
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidWindowSizeTooSmall)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3344,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3345
      start: 3340
    functionDepth: 1
    functionLinenumber: 3340
    functionLinenumberEnd: 3345
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidWindowSizeTooLarge)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3351,1
    - Dst: brpc::CreateRateLimitedBackupPolicy
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3351,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3352
      start: 3347
    functionDepth: 1
    functionLinenumber: 3347
    functionLinenumberEnd: 3352
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::CreateRateLimitedBackupPolicy
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, InvalidUpdateIntervalTooSmall)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3359,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3360,1
    - Dst: std::unique_ptr::GetBackupRequestMs
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3361
      start: 3354
    functionDepth: 0
    functionLinenumber: 3354
    functionLinenumberEnd: 3361
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    - std::unique_ptr::GetBackupRequestMs
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, ValidMinusOneBackupRequestMsInherits)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3374,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3374,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3375
      start: 3363
    functionDepth: 0
    functionLinenumber: 3363
    functionLinenumberEnd: 3375
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::DoBackup
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, ValidMaxRatioAtBoundary)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3384,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3385,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3386
      start: 3377
    functionDepth: 0
    functionLinenumber: 3377
    functionLinenumberEnd: 3386
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::DoBackup
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, ColdStartAllowsBackup)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3400,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3402,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3402,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3406,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3407,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3408
      start: 3392
    functionDepth: 1
    functionLinenumber: 3392
    functionLinenumberEnd: 3408
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::unique_ptr::DoBackup
    - bthread_usleep
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, AfterColdStartBackupSuppressedUntilRpcCompletes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3421,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3425,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3428,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3429,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3429,1
    - Dst: std::unique_ptr::OnRPCEnd
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3433,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3436,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3438,1
    - Dst: std::unique_ptr::DoBackup
      Src: /src/brpc/test/brpc_channel_unittest.cpp:3438,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3439
      start: 3413
    functionDepth: 1
    functionLinenumber: 3413
    functionLinenumberEnd: 3439
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_channel_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::unique_ptr::DoBackup
    - bthread_usleep
    - ASSERT_TRUE
    - std::unique_ptr::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void TEST_F(RateLimitedBackupPolicyTest, OnRPCEndDrivesRatioDownAndReAllows)
  - 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:
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    - arraysize
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - std::string
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::get
    - static_cast<ssize_t>
    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:
    - std::string
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - strlen
    - std::string
    - sprintf
    - butil::strings::SafeSPrintf
    - memmove
    - memset
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - EXPECT_EQ
    - strlen
    - butil::strings::PrintLongString
    - std::string
    - butil::strings::SafeSPrintf
    - EXPECT_DEATH
    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:
    - EXPECT_EQ
    - std::string
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::strings::SafeSPrintf
    - static_cast<size_t>
    - butil::strings::SafeSNPrintf
    - EXPECT_DEATH
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - reinterpret_cast<char *>
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    - arraysize
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - std::string
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::get
    - static_cast<ssize_t>
    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:
    - std::string
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - strlen
    - std::string
    - sprintf
    - butil::strings::SafeSPrintf
    - memmove
    - memset
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - EXPECT_EQ
    - strlen
    - butil::strings::PrintLongString
    - std::string
    - butil::strings::SafeSPrintf
    - EXPECT_DEATH
    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:
    - EXPECT_EQ
    - std::string
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::strings::SafeSPrintf
    - static_cast<size_t>
    - butil::strings::SafeSNPrintf
    - EXPECT_DEATH
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - reinterpret_cast<char *>
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    - arraysize
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - std::string
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::get
    - static_cast<ssize_t>
    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:
    - std::string
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - strlen
    - std::string
    - sprintf
    - butil::strings::SafeSPrintf
    - memmove
    - memset
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - EXPECT_EQ
    - strlen
    - butil::strings::PrintLongString
    - std::string
    - butil::strings::SafeSPrintf
    - EXPECT_DEATH
    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:
    - EXPECT_EQ
    - std::string
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::strings::SafeSPrintf
    - static_cast<size_t>
    - butil::strings::SafeSNPrintf
    - EXPECT_DEATH
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - reinterpret_cast<char *>
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    - arraysize
    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:
    - EXPECT_EQ
    - memcpy
    - std::string
    - butil::strings::SafeSPrintf
    - butil::strings::SafeSNPrintf
    - memset
    - EXPECT_TRUE
    - static_cast<ssize_t>
    - EXPECT_DEATH
    - memcmp
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - std::string
    - butil::strings::SafeSNPrintf
    - char::char
    - scoped_ptr::get
    - static_cast<ssize_t>
    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:
    - std::string
    - butil::strings::SafeSNPrintf
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - EXPECT_EQ
    - strlen
    - std::string
    - sprintf
    - butil::strings::SafeSPrintf
    - memmove
    - memset
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - scoped_ptr::reset
    - strlen
    - std::min
    - static_cast<size_t>
    - CHECK_LE
    - memcpy
    - CHECK_GE
    - std::string
    - char::char
    - scoped_ptr::get
    - scoped_ptr::scoped_ptr
    - EXPECT_FALSE
    - CHECK_GT
    - static_cast<char*>
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - memset
    - CHECK_LT
    - sprintf
    - static_cast<unsigned long long>
    - butil::strings::SafeSNPrintf
    - butil::strings::internal::GetSafeSPrintfSSizeMaxForTest
    - reinterpret_cast<uintptr_t>
    - static_cast<long long>
    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:
    - EXPECT_EQ
    - strlen
    - butil::strings::PrintLongString
    - std::string
    - butil::strings::SafeSPrintf
    - EXPECT_DEATH
    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:
    - EXPECT_EQ
    - std::string
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::strings::SafeSPrintf
    - static_cast<size_t>
    - butil::strings::SafeSNPrintf
    - EXPECT_DEATH
    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:
    - std::string
    - EXPECT_DEATH
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - std::string
    - reinterpret_cast<char *>
    - EXPECT_EQ
    - butil::strings::SafeSPrintf
    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:
    - reset
    - ASSERT_EQ
    - 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::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::pop_back
    - butil::ScopedVector::ScopedVector
    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::push_back
    - EXPECT_EQ
    - butil::ScopedVector::clear
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    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::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::weak_clear
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    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:
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - butil::ScopedVector::size
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::resize
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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:
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - butil::ScopedVector::size
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::resize
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - ASSERT_EQ
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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:
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    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_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::LifeCycleWatcher
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - LifeCycleWatcher::NewLifeCycleObject
    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::Pass
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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::Pass
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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:
    - butil::ScopedVector::Pass
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - butil::ScopedVector::clear
    - DeleteCounter::DeleteCounter
    - butil::ScopedVector::ScopedVector
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - LifeCycleWatcher*::life_cycle_state
    - LifeCycleWatcher*::NewLifeCycleObject
    - butil::ScopedVector::end
    - std::vector::begin
    - butil::ScopedVector::insert
    - butil::ScopedVector::ScopedVector
    - arraysize
    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:
    - reset
    - ASSERT_EQ
    - 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::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::pop_back
    - butil::ScopedVector::ScopedVector
    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::push_back
    - EXPECT_EQ
    - butil::ScopedVector::clear
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    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::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::weak_clear
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    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:
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - butil::ScopedVector::size
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::resize
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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:
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - butil::ScopedVector::size
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - butil::ScopedVector::resize
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - ASSERT_EQ
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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:
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    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_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::LifeCycleWatcher
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - LifeCycleWatcher::NewLifeCycleObject
    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::Pass
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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::Pass
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - LifeCycleWatcher::IsWatching
    - butil::ScopedVector::back
    - LifeCycleWatcher::NewLifeCycleObject
    - LifeCycleWatcher::LifeCycleWatcher
    - butil::ScopedVector::empty
    - EXPECT_TRUE
    - LifeCycleWatcher::life_cycle_state
    - butil::ScopedVector::ScopedVector
    - EXPECT_FALSE
    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:
    - butil::ScopedVector::Pass
    - butil::ScopedVector::push_back
    - EXPECT_EQ
    - butil::ScopedVector::clear
    - DeleteCounter::DeleteCounter
    - butil::ScopedVector::ScopedVector
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - LifeCycleWatcher*::life_cycle_state
    - LifeCycleWatcher*::NewLifeCycleObject
    - butil::ScopedVector::end
    - std::vector::begin
    - butil::ScopedVector::insert
    - butil::ScopedVector::ScopedVector
    - arraysize
    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
    - CHECK
    - butil::AtExitManager::AtExitManager
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - RUN_ALL_TESTS
    - 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:
    - ASSERT_EQ
    - butil::string_appendf
    - std::string::size
    - butil::string_printf
    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:
    - ASSERT_EQ
    - butil::string_appendf
    - std::string::size
    - butil::string_printf
    linkageType: ''
    returnType: void
    signature: void TEST_F(BaiduStringPrintfTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:34,1
    - Dst: bvar::IntRecorder::_get_complement
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:42,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 46
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::IntRecorder::_get_complement
    - LOG
    - bvar::IntRecorder::_extend_sign_bit
    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:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    - Dst: bvar::IntRecorder::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:53,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_compress
    - ASSERT_EQ
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_get_num
    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:58,1
    - Dst: bvar::IntRecorder::_compress
      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::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:62,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:62,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 64
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_extend_sign_bit
    - bvar::IntRecorder::_compress
    - ASSERT_EQ
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_get_complement
    - bvar::IntRecorder::_get_num
    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:69,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:70,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:71,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:75,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:76,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:76,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:80,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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:88,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 89
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Variable::count_exposed
    - ASSERT_TRUE
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - std::vector::size
    - bvar::Variable::describe_exposed
    - bvar::IntRecorder::valid
    - bvar::Variable::list_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:92,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:93,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:93,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:99,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:105,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 110
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::IntRecorder
    - butil::cpuwide_time_us
    - LOG
    - usleep
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:113,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:114,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:118,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - 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: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: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:127,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:127,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:127,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:130,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:130,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:131,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:135,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:135,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:135,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:138,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:138,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:139,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:145,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:146,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:147,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:149,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:150,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 151
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::LatencyRecorder::LatencyRecorder
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - bvar::LatencyRecorder::expose
    - bvar::IntRecorder::valid
    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: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: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:159,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:159,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:159,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:162,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:162,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:163,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:167,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:167,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:167,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:170,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:170,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:171,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:177,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:178,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:179,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:181,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:182,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 183
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - bvar::LatencyRecorder::LatencyRecorder
    - brpc::GetJsService::jquery_min
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - bvar::LatencyRecorder::expose
    - bvar::IntRecorder::valid
    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:189,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:190,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:194,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 196
    functionName: thread_counter
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:200,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:200,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:202,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:203,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:206,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:211,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:212,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:212,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:213,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 215
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - bvar::IntRecorder::IntRecorder
    - LOG
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:222,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:229,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:230,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:231,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:232,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:233,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:239,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:239,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:240,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:241,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:244,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
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:249,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:249,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:250,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:250,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:252,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:252,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:253,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:253,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:254,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:254,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:255,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:255,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 256
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_LE
    - fabs
    - read
    - usleep
    - write
    - ASSERT_GT
    - EXPECT_GE
    - qps
    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:34,1
    - Dst: bvar::IntRecorder::_get_complement
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:42,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:43,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:44,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 46
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bvar::IntRecorder::_get_complement
    - LOG
    - bvar::IntRecorder::_extend_sign_bit
    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:51,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    - Dst: bvar::IntRecorder::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:52,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:53,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:53,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 54
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_compress
    - ASSERT_EQ
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_get_num
    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:58,1
    - Dst: bvar::IntRecorder::_compress
      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::_get_num
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:61,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:62,1
    - Dst: bvar::IntRecorder::_extend_sign_bit
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:62,1
    - Dst: bvar::IntRecorder::_get_sum
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 64
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::IntRecorder::_extend_sign_bit
    - bvar::IntRecorder::_compress
    - ASSERT_EQ
    - bvar::IntRecorder::_get_sum
    - bvar::IntRecorder::_get_complement
    - bvar::IntRecorder::_get_num
    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:69,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:70,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:70,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:71,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:71,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:75,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:75,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:76,1
    - Dst: bvar::Variable::describe_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:76,1
    - Dst: bvar::Variable::list_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:78,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:80,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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:86,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:88,1
    - Dst: bvar::Variable::count_exposed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:88,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 89
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - bvar::Variable::count_exposed
    - ASSERT_TRUE
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - std::vector::size
    - bvar::Variable::describe_exposed
    - bvar::IntRecorder::valid
    - bvar::Variable::list_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:92,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:93,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:93,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:99,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:105,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 110
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::IntRecorder
    - butil::cpuwide_time_us
    - LOG
    - usleep
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, window)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:113,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:114,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:118,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:118,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::IntRecorder
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - 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: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: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:127,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:127,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:127,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:130,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:130,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:131,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:135,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:135,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:135,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:137,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:138,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:138,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:139,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:143,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:145,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:146,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:147,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:149,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:150,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 151
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - butil::BaseIteratorRangeToNumberTraits::max
    - bvar::LatencyRecorder::LatencyRecorder
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - bvar::LatencyRecorder::expose
    - bvar::IntRecorder::valid
    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: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: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:157,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:159,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:159,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:159,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:161,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:162,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:162,1
    - Dst: bvar::IntRecorder::set_debug_name
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:163,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:167,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:167,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:167,1
    - Dst: bvar::IntRecorder::IntRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:169,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:170,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:170,1
    - Dst: bvar::IntRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:171,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:173,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:175,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:177,1
    - Dst: bvar::LatencyRecorder::expose
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:178,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:179,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:181,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:182,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 183
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - bvar::IntRecorder::set_debug_name
    - bvar::IntRecorder::expose
    - bvar::IntRecorder::IntRecorder
    - bvar::LatencyRecorder::LatencyRecorder
    - brpc::GetJsService::jquery_min
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - bvar::LatencyRecorder::expose
    - bvar::IntRecorder::valid
    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:189,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:190,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:194,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 196
    functionName: thread_counter
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::Timer
    - butil::Timer::n_elapsed
    - butil::Timer::start
    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:199,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:200,1
    - Dst: bvar::IntRecorder::valid
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:200,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:202,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:203,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:206,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:211,1
    - Dst: bvar::IntRecorder::average
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:212,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:212,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:213,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 215
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - bvar::IntRecorder::IntRecorder
    - LOG
    - bvar::IntRecorder::average
    - ASSERT_EQ
    - bvar::IntRecorder::valid
    linkageType: ''
    returnType: void
    signature: void TEST(RecorderTest, perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:222,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:229,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:230,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:231,1
    - Dst: write
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:232,1
    - Dst: usleep
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:233,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:239,1
    - Dst: qps
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:239,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:240,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:241,1
    - Dst: fabs
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:244,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
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:249,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:249,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:250,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:250,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:252,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:252,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:253,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:253,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:254,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:254,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:255,1
    - Dst: read
      Src: /src/brpc/test/bvar_recorder_unittest.cpp:255,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 256
    functionName: TEST
    functionSourceFile: /src/brpc/test/bvar_recorder_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_LE
    - fabs
    - read
    - usleep
    - write
    - ASSERT_GT
    - EXPECT_GE
    - qps
    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_getconcurrency
    - bthread_start_urgent
    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:
    - fetch_add
    - bthread::butex_wake_all
    - bthread::butex_wait
    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:
    - fetch_add
    - bthread::butex_wake_all
    - bthread::butex_wait
    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:
    - bthread_join
    - std::vector::push_back
    - ASSERT_TRUE
    - bthread_getconcurrency
    - LOG
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - bthread_setconcurrency
    - usleep
    - std::vector::size
    - bthread_start_background
    - bthread::butex_wake_all
    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_join
    - bthread_start_background
    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: 0
    functionLinenumber: 140
    functionLinenumberEnd: 145
    functionName: set_min_concurrency
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::empty
    - std::stringstream::str
    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:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    - atoi
    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: 1
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - std::vector::push_back
    - bthread_getconcurrency
    - ASSERT_EQ
    - bthread_setconcurrency
    - std::vector::size
    - set_min_concurrency
    - get_min_concurrency
    - bthread_start_background
    - concurrency
    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: 0
    functionLinenumber: 194
    functionLinenumberEnd: 199
    functionName: current_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::empty
    - std::stringstream::str
    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: 1
    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: 0
    functionLinenumber: 207
    functionLinenumberEnd: 213
    functionName: concurrency_by_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::empty
    - std::stringstream::str
    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: 1
    functionLinenumber: 215
    functionLinenumberEnd: 223
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - ASSERT_EQ
    - concurrency_by_tag
    - bthread_getconcurrency
    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_getconcurrency
    - bthread_start_urgent
    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:
    - fetch_add
    - bthread::butex_wake_all
    - bthread::butex_wait
    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:
    - fetch_add
    - bthread::butex_wake_all
    - bthread::butex_wait
    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:
    - bthread_join
    - std::vector::push_back
    - ASSERT_TRUE
    - bthread_getconcurrency
    - LOG
    - bthread::butex_create_checked<butil::atomic<int> >
    - ASSERT_EQ
    - bthread_setconcurrency
    - usleep
    - std::vector::size
    - bthread_start_background
    - bthread::butex_wake_all
    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_join
    - bthread_start_background
    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: 0
    functionLinenumber: 140
    functionLinenumberEnd: 145
    functionName: set_min_concurrency
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::empty
    - std::stringstream::str
    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:
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - std::string::c_str
    - atoi
    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: 1
    functionLinenumber: 153
    functionLinenumberEnd: 192
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - std::vector::push_back
    - bthread_getconcurrency
    - ASSERT_EQ
    - bthread_setconcurrency
    - std::vector::size
    - set_min_concurrency
    - get_min_concurrency
    - bthread_start_background
    - concurrency
    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: 0
    functionLinenumber: 194
    functionLinenumberEnd: 199
    functionName: current_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::empty
    - std::stringstream::str
    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: 1
    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: 0
    functionLinenumber: 207
    functionLinenumberEnd: 213
    functionName: concurrency_by_tag
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::string::empty
    - std::stringstream::str
    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: 1
    functionLinenumber: 215
    functionLinenumberEnd: 223
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_setconcurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - ASSERT_EQ
    - concurrency_by_tag
    - bthread_getconcurrency
    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:
    - ASSERT_FALSE
    - std::vector::push_back
    - bthread_list_destroy
    - bthread_list_add
    - bthread_list_init
    - bthread_list_join
    - bthread::TaskGroup::exists
    - ASSERT_EQ
    - std::vector::size
    - bthread_start_urgent
    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_destroy
    - bthread_list_add
    - bthread_list_init
    - bthread_list_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:
    - ASSERT_FALSE
    - std::vector::push_back
    - bthread_list_destroy
    - bthread_list_add
    - bthread_list_init
    - bthread_list_join
    - bthread::TaskGroup::exists
    - ASSERT_EQ
    - std::vector::size
    - bthread_start_urgent
    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_destroy
    - bthread_list_add
    - bthread_list_init
    - bthread_list_join
    - ASSERT_EQ
    - bthread_start_urgent
    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: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    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: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    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: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    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*/)
  - 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: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    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:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - timer_thread
    argTypes:
    - bthread::TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    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:54,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:58,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:60,1
    - Dst: butil::milliseconds_to_timespec
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:63,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:64,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 66
    functionName: TimeKeeper::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::milliseconds_to_timespec
    - clock_gettime
    - LOG
    - push_back
    - bthread::futex_wait_private
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 76
    functionName: TimeKeeper::wakeup
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread::futex_wake_private
    - LOG
    linkageType: ''
    returnType: void
    signature: void wakeup()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:81,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: 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:86,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:86,1
    - Dst: timespec_diff_us
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:87,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:88,1
    - Dst: labs
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - expect_run_time
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: TimeKeeper::expect_first_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 1
    functionsReached:
    - labs
    - ASSERT_TRUE
    - timespec_diff_us
    - EXPECT_LE
    - empty
    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:92,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    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:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    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:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:112,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:112,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:114,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:116,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:119,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:121,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:123,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:125,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:127,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:133,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:134,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:135,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:136,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:140,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:144,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:146,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:147,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:148,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:149,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:150,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:151,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:151,1
    - Dst: TimeKeeper::expect_first_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
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:157,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:158,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 110
    functionDepth: 2
    functionLinenumber: 110
    functionLinenumberEnd: 160
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - butil::seconds_from_now
    - butil::Timer::stop
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_not_run
    - bthread::TimerThread::unschedule
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::start
    - LOG
    - ASSERT_LE
    - ASSERT_EQ
    - butil::Timer::start
    - TimeKeeper::schedule
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread::TimerThread::stop_and_join
    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:165,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:170,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:170,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:171,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:172,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:173,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:174,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:175,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 164
    functionDepth: 2
    functionLinenumber: 164
    functionLinenumberEnd: 177
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - butil::seconds_from_now
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::start
    - ASSERT_NE
    - ASSERT_EQ
    - TimeKeeper::schedule
    - 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: 187
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 187
    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:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:192,1
    - Dst: unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:193,1
    - Dst: schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 195
    functionName: TestTask::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - schedule
    - clock_gettime
    - EXPECT_EQ
    - unschedule
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestTask*::run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 201
    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:213,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:215,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:224,1
    - Dst: bthread::TimerThread::start
      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: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:226,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:227,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:228,1
    - Dst: sleep
      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: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:235,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:237,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:239,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:243,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:243,1
    - Dst: TimeKeeper::wakeup
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:246,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:247,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:249,1
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:251,1
    - Dst: TimeKeeper::expect_not_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
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:255,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:256,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 258
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - butil::seconds_from_now
    - TimeKeeper::expect_not_run
    - bthread::TimerThread::TimerThread
    - bthread::TimerThread::unschedule
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::start
    - clock_gettime
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::milliseconds_from_now
    - ASSERT_EQ
    - bthread::TimerThread::schedule
    - TimeKeeper::wakeup
    - TimeKeeper::schedule
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, schedule_and_unschedule_in_task)
  - 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: noop_routine
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void noop_routine(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:268,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:270,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - name
    - value
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 273
    functionName: ScopedFlag::ScopedFlag
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - EXPECT_TRUE
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void ScopedFlag(const char* name, const char* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:275,1
    - Dst: c_str
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:275,1
    - Dst: c_str
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp: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: ~ScopedFlag()
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - c_str
    linkageType: ''
    returnType: void
    signature: void ~ScopedFlag()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:291,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:291,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:294,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:301,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:303,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:303,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:307,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:308,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:309,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:313,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:314,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:318,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:319,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:320,1
    - Dst: bthread::TimerThread::_npending::load
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:326,1
    - Dst: std::max
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:327,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:332,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:335,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 336
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - butil::seconds_from_now
    - bthread::TimerThread::TimerThread
    - std::vector::push_back
    - bthread::TimerThread::unschedule
    - std::max
    - bthread::TimerThread::start
    - bthread::TimerThread::_npending::load
    - butil::milliseconds_from_now
    - LOG
    - ASSERT_EQ
    - EXPECT_LT
    - usleep
    - bthread::TimerThread::schedule
    - std::vector::size
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, sweep_unscheduled_tasks_in_heap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:349,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:349,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:354,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:354,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:357,1
    - Dst: bthread::TimerThread::_npending::load
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:357,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:363,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:364,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:370,1
    - Dst: bthread::TimerThread::_npending::load
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:372,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:373,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:375,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 379
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::seconds_from_now
    - bthread::TimerThread::TimerThread
    - bthread::TimerThread::start
    - bthread::TimerThread::_npending::load
    - LOG
    - ASSERT_EQ
    - usleep
    - bthread::TimerThread::schedule
    - EXPECT_GE
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, periodic_wakeup_drains_buckets)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' ts1'
    - ' ts2'
    argTypes:
    - timespec
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 33
    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: 39
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 39
    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: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    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*/)
  - 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: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    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:47,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - timer_thread
    argTypes:
    - bthread::TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    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:54,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:56,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:58,1
    - Dst: push_back
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:60,1
    - Dst: butil::milliseconds_to_timespec
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:63,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:64,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 66
    functionName: TimeKeeper::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::milliseconds_to_timespec
    - clock_gettime
    - LOG
    - push_back
    - bthread::futex_wait_private
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:73,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 76
    functionName: TimeKeeper::wakeup
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread::futex_wake_private
    - LOG
    linkageType: ''
    returnType: void
    signature: void wakeup()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:81,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: 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:86,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:86,1
    - Dst: timespec_diff_us
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:87,1
    - Dst: EXPECT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:88,1
    - Dst: labs
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:88,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - expect_run_time
    argTypes:
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 89
    functionName: TimeKeeper::expect_first_run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 5
    functionsReached:
    - labs
    - ASSERT_TRUE
    - timespec_diff_us
    - EXPECT_LE
    - empty
    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:92,1
    - Dst: empty
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    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:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    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:111,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:112,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:112,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:114,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:116,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:119,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:121,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:123,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:125,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:127,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:130,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:133,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:134,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:135,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:136,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:140,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:144,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:146,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:147,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:148,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:149,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:150,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:151,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:151,1
    - Dst: TimeKeeper::expect_first_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
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:157,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:158,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:159,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 110
    functionDepth: 2
    functionLinenumber: 110
    functionLinenumberEnd: 160
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - butil::seconds_from_now
    - butil::Timer::stop
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_not_run
    - bthread::TimerThread::unschedule
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::start
    - LOG
    - ASSERT_LE
    - ASSERT_EQ
    - butil::Timer::start
    - TimeKeeper::schedule
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread::TimerThread::stop_and_join
    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:165,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:168,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:169,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:170,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:170,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:171,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:172,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:173,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:174,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:175,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 164
    functionDepth: 2
    functionLinenumber: 164
    functionLinenumberEnd: 177
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - butil::seconds_from_now
    - bthread::TimerThread::TimerThread
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::start
    - ASSERT_NE
    - ASSERT_EQ
    - TimeKeeper::schedule
    - 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: 187
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 187
    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:191,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:192,1
    - Dst: unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:193,1
    - Dst: schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 195
    functionName: TestTask::run
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - schedule
    - clock_gettime
    - EXPECT_EQ
    - unschedule
    linkageType: ''
    returnType: void
    signature: void run()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestTask*::run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:200,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 201
    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:213,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:215,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:216,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:224,1
    - Dst: bthread::TimerThread::start
      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: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:226,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:227,1
    - Dst: TimeKeeper::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:228,1
    - Dst: sleep
      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: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:235,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:237,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:239,1
    - Dst: TimeKeeper::expect_not_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:243,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:243,1
    - Dst: TimeKeeper::wakeup
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:246,1
    - Dst: sleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:247,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:249,1
    - Dst: clock_gettime
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:251,1
    - Dst: TimeKeeper::expect_not_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
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:255,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:256,1
    - Dst: TimeKeeper::expect_first_run
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:257,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 212
    functionDepth: 2
    functionLinenumber: 212
    functionLinenumberEnd: 258
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - butil::seconds_from_now
    - TimeKeeper::expect_not_run
    - bthread::TimerThread::TimerThread
    - bthread::TimerThread::unschedule
    - TimeKeeper::expect_first_run
    - bthread::TimerThread::start
    - clock_gettime
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::milliseconds_from_now
    - ASSERT_EQ
    - bthread::TimerThread::schedule
    - TimeKeeper::wakeup
    - TimeKeeper::schedule
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, schedule_and_unschedule_in_task)
  - 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: noop_routine
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void noop_routine(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:268,1
    - Dst: GFLAGS_NAMESPACE::GetCommandLineOption
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:270,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:271,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - name
    - value
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 273
    functionName: ScopedFlag::ScopedFlag
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - EXPECT_TRUE
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void ScopedFlag(const char* name, const char* value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:275,1
    - Dst: c_str
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:275,1
    - Dst: c_str
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp: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: ~ScopedFlag()
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - c_str
    linkageType: ''
    returnType: void
    signature: void ~ScopedFlag()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:291,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:291,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:294,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:301,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:303,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:303,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:307,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:308,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:309,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:313,1
    - Dst: bthread::TimerThread::unschedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:314,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:318,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:319,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:320,1
    - Dst: bthread::TimerThread::_npending::load
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:326,1
    - Dst: std::max
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:327,1
    - Dst: EXPECT_LT
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:332,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:335,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 336
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 336
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - butil::seconds_from_now
    - bthread::TimerThread::TimerThread
    - std::vector::push_back
    - bthread::TimerThread::unschedule
    - std::max
    - bthread::TimerThread::start
    - bthread::TimerThread::_npending::load
    - butil::milliseconds_from_now
    - LOG
    - ASSERT_EQ
    - EXPECT_LT
    - usleep
    - bthread::TimerThread::schedule
    - std::vector::size
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, sweep_unscheduled_tasks_in_heap)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TimerThread::TimerThread
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:348,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:349,1
    - Dst: bthread::TimerThread::start
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:349,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:354,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:354,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:357,1
    - Dst: bthread::TimerThread::_npending::load
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:357,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:363,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:364,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:370,1
    - Dst: bthread::TimerThread::_npending::load
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:372,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:373,1
    - Dst: EXPECT_GE
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:375,1
    - Dst: bthread::TimerThread::stop_and_join
      Src: /src/brpc/test/bthread_timer_thread_unittest.cpp:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 379
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_timer_thread_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::seconds_from_now
    - bthread::TimerThread::TimerThread
    - bthread::TimerThread::start
    - bthread::TimerThread::_npending::load
    - LOG
    - ASSERT_EQ
    - usleep
    - bthread::TimerThread::schedule
    - EXPECT_GE
    - bthread::TimerThread::stop_and_join
    linkageType: ''
    returnType: void
    signature: void TEST(TimerThreadTest, periodic_wakeup_drains_buckets)
  - 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::int2ip
    - butil::ip2int
    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_FALSE
    - butil::ip2str
    - ASSERT_TRUE
    - ASSERT_GE
    - LOG
    - butil::int2ip
    - ASSERT_LE
    - ASSERT_EQ
    - ASSERT_STREQ
    - ASSERT_LT
    - ASSERT_GT
    - butil::str2ip
    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_cstr
    - butil::my_ip
    - butil::my_hostname
    - LOG
    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:
    - butil::ip2str
    - berror
    - hostname2endpoint
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:122,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:123,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:127,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:128,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 130
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_reject_trailing_characters_after_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:137,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:137,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:138,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:139,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:142,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:142,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:143,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:144,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:147,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:147,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:149,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 150
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::hash_map::size
    - ASSERT_TRUE
    - butil::hash_map::find
    - ASSERT_EQ
    - butil::hash_map::end
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, hash_table)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:154,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/endpoint_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:161,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/endpoint_unittest.cpp:161,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:164,1
    - Dst: butil::ip2int
      Src: /src/brpc/test/endpoint_unittest.cpp:165,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:168,1
    - Dst: butil::FlatMap::bucket_info
      Src: /src/brpc/test/endpoint_unittest.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:173,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 176
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::init
    - butil::FlatMap::bucket_info
    - butil::int2ip
    - butil::ip2int
    - LOG
    - ASSERT_EQ
    - ASSERT_LT
    - butil::FlatMap::size
    - butil::str2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, flat_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: accept
      Src: /src/brpc/test/endpoint_unittest.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 184
    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:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:188,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:188,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:189,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:189,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/endpoint_unittest.cpp:191,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:192,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:194,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:196,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:197,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:200,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/endpoint_unittest.cpp:200,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:202,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:206,1
    - Dst: std::string::substr
      Src: /src/brpc/test/endpoint_unittest.cpp:206,1
    - Dst: size
      Src: /src/brpc/test/endpoint_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:208,1
    - Dst: butil::get_remote_side
      Src: /src/brpc/test/endpoint_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:210,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:213,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:215,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:216,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:217,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: 218
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 218
    functionName: test_listen_connect
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - std::string::substr
    - butil::get_remote_side
    - butil::get_local_side
    - pthread_join
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::endpoint2str
    - butil::str2endpoint
    - ASSERT_GT
    - butil::tcp_connect
    - close
    - c_str
    - butil::tcp_listen
    - size
    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:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    - Dst: butil::EndPointStr::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' instr'
    - ' outstr'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 225
    functionName: test_parse_and_serialize
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPointStr::c_str
    - std::string
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::endpoint2str
    - butil::str2endpoint
    - c_str
    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:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 229
    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:235,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:236,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:237,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:241,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:242,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:243,1
    - Dst: butil::str2endpoint
      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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 249
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - test_parse_and_serialize
    - butil::str2endpoint
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ipv6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:252,1
    - Dst: test_listen_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:254,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:257,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:259,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:260,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:261,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:262,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:262,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:262,1
    - Dst: std::string::append
      Src: /src/brpc/test/endpoint_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:266,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:266,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/endpoint_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: snprintf
      Src: /src/brpc/test/endpoint_unittest.cpp:271,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:271,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:272,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 251
    functionDepth: 2
    functionLinenumber: 251
    functionLinenumberEnd: 273
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - ::unlink
    - std::string
    - std::string::append
    - std::string::push_back
    - test_listen_connect
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - butil::endpoint2str
    - butil::str2endpoint
    - snprintf
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, unix_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:276,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:277,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:278,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:280,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:280,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:281,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:282,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:282,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:287,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:289,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 297
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - butil::details::ExtendedEndPoint::address
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::str2endpoint
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, original_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:301,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:303,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:305,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:306,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:311,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:312,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:315,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:315,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:321,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:327,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:330,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:330,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:335,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:336,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:337,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:341,1
    - Dst: str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:342,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:342,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:343,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 346
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - ASSERT_FALSE
    - ExtendedEndPoint*::family
    - ASSERT_TRUE
    - ASSERT_NE
    - butil::details::ExtendedEndPoint::address
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::str2endpoint
    - ExtendedEndPoint*::_ref_count::load
    - butil::details::ExtendedEndPoint::is_extended
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, extended_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:349,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: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:354,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:357,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:358,1
    - Dst: butil::str2endpoint
      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: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:360,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:363,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:364,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:365,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:366,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 368
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - ASSERT_NE
    - butil::str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:372,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:372,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:375,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:382,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:384,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:394,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:394,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:397,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:400,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 401
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - butil::endpoint2sockaddr
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - memset
    - butil::str2endpoint
    - butil::sockaddr2endpoint
    - htons
    - memcmp
    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:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:405,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:405,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:408,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:415,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:417,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:421,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:422,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:429,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:429,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:432,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:432,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:435,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 436
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - butil::endpoint2sockaddr
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - memset
    - butil::str2endpoint
    - butil::sockaddr2endpoint
    - ASSERT_STREQ
    - butil::endpoint2str
    - htons
    - memcmp
    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:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:440,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:440,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:454,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:455,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:462,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:462,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 463
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - strlen
    - butil::endpoint2sockaddr
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - memset
    - butil::str2endpoint
    - butil::sockaddr2endpoint
    - ASSERT_STREQ
    - butil::endpoint2str
    - memcmp
    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:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:469,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:469,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:470,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:470,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:473,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:473,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:474,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:474,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:477,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:477,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:478,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:478,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 465
    functionDepth: 1
    functionLinenumber: 465
    functionLinenumberEnd: 481
    functionName: concurrent_proc
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EndPoint::EndPoint
    - butil::endpoint2str
    - ASSERT_EQ
    - butil::str2endpoint
    - 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:488,1
    - Dst: concurrent_proc
      Src: /src/brpc/test/endpoint_unittest.cpp:489,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 483
    functionDepth: 2
    functionLinenumber: 483
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    - concurrent_proc
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:502,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:504,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:505,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:505,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:508,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:511,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:512,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:523,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:523,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:524,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:525,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:527,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:529,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:535,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:535,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:536,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:537,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:538,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:540,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:546,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 548
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::is_blocking
    - butil::hostname2endpoint
    - butil::milliseconds_from_now
    - endpoint2sockaddr
    - ASSERT_LE
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - socket
    - butil::pthread_timed_connect
    - butil::tcp_connect
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, tcp_connect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:554,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:558,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:558,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:559,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:560,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:564,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:565,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:567,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:569,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:570,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:579,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/endpoint_unittest.cpp:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 552
    functionDepth: 1
    functionLinenumber: 552
    functionLinenumberEnd: 580
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 2
    functionsReached:
    - butil::hostname2endpoint
    - butil::milliseconds_from_now
    - LOG
    - endpoint2sockaddr
    - ASSERT_LE
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::cpuwide_time_ms
    - socket
    - butil::pthread_timed_connect
    - butil::tcp_connect
    - butil::is_connected
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/endpoint_unittest.cpp:584,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 586
    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: 588
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 588
    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:591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 592
    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:597,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:597,1
    - Dst: usleep
      Src: /src/brpc/test/endpoint_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:603,1
    - Dst: pthread_kill
      Src: /src/brpc/test/endpoint_unittest.cpp:603,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:605,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 594
    functionDepth: 0
    functionLinenumber: 594
    functionLinenumberEnd: 606
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 2
    functionsReached:
    - pthread_create
    - pthread_kill
    - pthread_join
    - ASSERT_EQ
    - usleep
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: register_sigurg
      Src: /src/brpc/test/endpoint_unittest.cpp:609,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:610,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 612
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - register_sigurg
    - TestConnectInterrupt
    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::int2ip
    - butil::ip2int
    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_FALSE
    - butil::ip2str
    - ASSERT_TRUE
    - ASSERT_GE
    - LOG
    - butil::int2ip
    - ASSERT_LE
    - ASSERT_EQ
    - ASSERT_STREQ
    - ASSERT_LT
    - ASSERT_GT
    - butil::str2ip
    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_cstr
    - butil::my_ip
    - butil::my_hostname
    - LOG
    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:
    - butil::ip2str
    - berror
    - hostname2endpoint
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - ASSERT_STREQ
    - butil::str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:122,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:123,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:127,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:127,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:128,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:128,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 130
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_reject_trailing_characters_after_port)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:137,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:137,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:137,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:138,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:139,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:139,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:142,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:142,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:143,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:143,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:144,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:147,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:147,1
    - Dst: butil::hash_map::end
      Src: /src/brpc/test/endpoint_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: butil::hash_map::find
      Src: /src/brpc/test/endpoint_unittest.cpp:148,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:149,1
    - Dst: butil::hash_map::size
      Src: /src/brpc/test/endpoint_unittest.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 150
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::hash_map::size
    - ASSERT_TRUE
    - butil::hash_map::find
    - ASSERT_EQ
    - butil::hash_map::end
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, hash_table)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:154,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/test/endpoint_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:161,1
    - Dst: butil::FlatMap::size
      Src: /src/brpc/test/endpoint_unittest.cpp:161,1
    - Dst: butil::str2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:164,1
    - Dst: butil::ip2int
      Src: /src/brpc/test/endpoint_unittest.cpp:165,1
    - Dst: butil::int2ip
      Src: /src/brpc/test/endpoint_unittest.cpp:168,1
    - Dst: butil::FlatMap::bucket_info
      Src: /src/brpc/test/endpoint_unittest.cpp:172,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:173,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:175,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 176
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::FlatMap::init
    - butil::FlatMap::bucket_info
    - butil::int2ip
    - butil::ip2int
    - LOG
    - ASSERT_EQ
    - ASSERT_LT
    - butil::FlatMap::size
    - butil::str2ip
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, flat_map)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: accept
      Src: /src/brpc/test/endpoint_unittest.cpp:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 184
    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:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:188,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:188,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:189,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:189,1
    - Dst: butil::tcp_listen
      Src: /src/brpc/test/endpoint_unittest.cpp:191,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:192,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:194,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:196,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:197,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:199,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:200,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/endpoint_unittest.cpp:200,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:202,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:206,1
    - Dst: std::string::substr
      Src: /src/brpc/test/endpoint_unittest.cpp:206,1
    - Dst: size
      Src: /src/brpc/test/endpoint_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:208,1
    - Dst: butil::get_remote_side
      Src: /src/brpc/test/endpoint_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:209,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:210,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:213,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/endpoint_unittest.cpp:215,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:216,1
    - Dst: close
      Src: /src/brpc/test/endpoint_unittest.cpp:217,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: 218
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 218
    functionName: test_listen_connect
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 2
    functionsReached:
    - pthread_create
    - std::string::substr
    - butil::get_remote_side
    - butil::get_local_side
    - pthread_join
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::endpoint2str
    - butil::str2endpoint
    - ASSERT_GT
    - butil::tcp_connect
    - close
    - c_str
    - butil::tcp_listen
    - size
    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:221,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:222,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:223,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    - Dst: butil::EndPointStr::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' instr'
    - ' outstr'
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 220
    functionDepth: 1
    functionLinenumber: 220
    functionLinenumberEnd: 225
    functionName: test_parse_and_serialize
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 1
    functionsReached:
    - butil::EndPointStr::c_str
    - std::string
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::endpoint2str
    - butil::str2endpoint
    - c_str
    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:228,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 229
    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:235,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:236,1
    - Dst: test_parse_and_serialize
      Src: /src/brpc/test/endpoint_unittest.cpp:237,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:241,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:241,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:242,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:242,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:243,1
    - Dst: butil::str2endpoint
      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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 249
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - test_parse_and_serialize
    - butil::str2endpoint
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, ipv6)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:252,1
    - Dst: test_listen_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:253,1
    - Dst: ::unlink
      Src: /src/brpc/test/endpoint_unittest.cpp:254,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:256,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:257,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:259,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:260,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:261,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:262,1
    - Dst: std::string
      Src: /src/brpc/test/endpoint_unittest.cpp:262,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:262,1
    - Dst: std::string::append
      Src: /src/brpc/test/endpoint_unittest.cpp:265,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:266,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:266,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:266,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:267,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/endpoint_unittest.cpp:268,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:269,1
    - Dst: snprintf
      Src: /src/brpc/test/endpoint_unittest.cpp:271,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:271,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/endpoint_unittest.cpp:272,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 273
      start: 251
    functionDepth: 2
    functionLinenumber: 251
    functionLinenumberEnd: 273
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - ::unlink
    - std::string
    - std::string::append
    - std::string::push_back
    - test_listen_connect
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - butil::endpoint2str
    - butil::str2endpoint
    - snprintf
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, unix_socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:276,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:277,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:277,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:278,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:280,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:280,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:281,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:281,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:282,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:282,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:287,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:289,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:295,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 297
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - butil::details::ExtendedEndPoint::address
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::str2endpoint
    - butil::details::ExtendedEndPoint::is_extended
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, original_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:300,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:301,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:301,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:302,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:303,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:305,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:305,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:306,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:311,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:312,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:312,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:315,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:315,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:321,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:321,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:322,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:325,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:326,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/endpoint_unittest.cpp:327,1
    - Dst: butil::details::ExtendedEndPoint::is_extended
      Src: /src/brpc/test/endpoint_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:330,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:330,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:331,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/endpoint_unittest.cpp:332,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:335,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:335,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:336,1
    - Dst: ExtendedEndPoint*::family
      Src: /src/brpc/test/endpoint_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:337,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:341,1
    - Dst: str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:341,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:342,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:342,1
    - Dst: butil::details::ExtendedEndPoint::address
      Src: /src/brpc/test/endpoint_unittest.cpp:343,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:344,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    - Dst: ExtendedEndPoint*::_ref_count::load
      Src: /src/brpc/test/endpoint_unittest.cpp:345,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 299
    functionDepth: 1
    functionLinenumber: 299
    functionLinenumberEnd: 346
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - ASSERT_FALSE
    - ExtendedEndPoint*::family
    - ASSERT_TRUE
    - ASSERT_NE
    - butil::details::ExtendedEndPoint::address
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::str2endpoint
    - ExtendedEndPoint*::_ref_count::load
    - butil::details::ExtendedEndPoint::is_extended
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, extended_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:349,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: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:354,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:357,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:357,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:358,1
    - Dst: butil::str2endpoint
      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: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:360,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:363,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:364,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:365,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:366,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/endpoint_unittest.cpp:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 368
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - ASSERT_NE
    - butil::str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_compare)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:372,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:372,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:375,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:382,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:384,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:387,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:394,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:394,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:397,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:398,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:400,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 401
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - butil::endpoint2sockaddr
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - memset
    - butil::str2endpoint
    - butil::sockaddr2endpoint
    - htons
    - memcmp
    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:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:405,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:405,1
    - Dst: bzero
      Src: /src/brpc/test/endpoint_unittest.cpp:408,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:415,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:416,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:417,1
    - Dst: htons
      Src: /src/brpc/test/endpoint_unittest.cpp:418,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:419,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:421,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:422,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:427,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:428,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:429,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:429,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:432,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:432,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:435,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 436
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - bzero
    - butil::endpoint2sockaddr
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - memset
    - butil::str2endpoint
    - butil::sockaddr2endpoint
    - ASSERT_STREQ
    - butil::endpoint2str
    - htons
    - memcmp
    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:439,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:440,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:440,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:445,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:446,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:449,1
    - Dst: memset
      Src: /src/brpc/test/endpoint_unittest.cpp:453,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:454,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:455,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:455,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: memcmp
      Src: /src/brpc/test/endpoint_unittest.cpp:456,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: strlen
      Src: /src/brpc/test/endpoint_unittest.cpp:459,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:460,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:462,1
    - Dst: butil::get_endpoint_type
      Src: /src/brpc/test/endpoint_unittest.cpp:462,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 463
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - strlen
    - butil::endpoint2sockaddr
    - butil::get_endpoint_type
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - memset
    - butil::str2endpoint
    - butil::sockaddr2endpoint
    - ASSERT_STREQ
    - butil::endpoint2str
    - memcmp
    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:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:469,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:469,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:469,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:470,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:470,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:473,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:473,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:473,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:474,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:474,1
    - Dst: std::string::assign
      Src: /src/brpc/test/endpoint_unittest.cpp:476,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:477,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:477,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/endpoint_unittest.cpp:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:478,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/test/endpoint_unittest.cpp:478,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 465
    functionDepth: 1
    functionLinenumber: 465
    functionLinenumberEnd: 481
    functionName: concurrent_proc
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string::c_str
    - butil::EndPoint::EndPoint
    - butil::endpoint2str
    - ASSERT_EQ
    - butil::str2endpoint
    - 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:488,1
    - Dst: concurrent_proc
      Src: /src/brpc/test/endpoint_unittest.cpp:489,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 483
    functionDepth: 2
    functionLinenumber: 483
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - pthread_create
    - pthread_join
    - concurrent_proc
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, endpoint_concurrency)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:502,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:503,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:504,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:505,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:505,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:508,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:511,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:512,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:516,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:523,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:523,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:524,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:525,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:526,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:527,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:527,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:529,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:535,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:535,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:536,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:537,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:538,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:540,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:544,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:545,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:546,1
    - Dst: butil::is_blocking
      Src: /src/brpc/test/endpoint_unittest.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 548
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::is_blocking
    - butil::hostname2endpoint
    - butil::milliseconds_from_now
    - endpoint2sockaddr
    - ASSERT_LE
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - socket
    - butil::pthread_timed_connect
    - butil::tcp_connect
    linkageType: ''
    returnType: void
    signature: void TEST(EndPointTest, tcp_connect)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/endpoint_unittest.cpp:553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:554,1
    - Dst: butil::hostname2endpoint
      Src: /src/brpc/test/endpoint_unittest.cpp:554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:558,1
    - Dst: endpoint2sockaddr
      Src: /src/brpc/test/endpoint_unittest.cpp:558,1
    - Dst: socket
      Src: /src/brpc/test/endpoint_unittest.cpp:559,1
    - Dst: ASSERT_LE
      Src: /src/brpc/test/endpoint_unittest.cpp:560,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:564,1
    - Dst: butil::tcp_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:565,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/test/endpoint_unittest.cpp:566,1
    - Dst: LOG
      Src: /src/brpc/test/endpoint_unittest.cpp:567,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/endpoint_unittest.cpp:569,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:570,1
    - Dst: butil::pthread_timed_connect
      Src: /src/brpc/test/endpoint_unittest.cpp:574,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:578,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:579,1
    - Dst: butil::is_connected
      Src: /src/brpc/test/endpoint_unittest.cpp:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 552
    functionDepth: 1
    functionLinenumber: 552
    functionLinenumberEnd: 580
    functionName: TestConnectInterruptImpl
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 3
    functionsReached:
    - butil::hostname2endpoint
    - butil::milliseconds_from_now
    - LOG
    - endpoint2sockaddr
    - ASSERT_LE
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - butil::cpuwide_time_ms
    - socket
    - butil::pthread_timed_connect
    - butil::tcp_connect
    - butil::is_connected
    linkageType: ''
    returnType: void
    signature: void TestConnectInterruptImpl(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestConnectInterruptImpl
      Src: /src/brpc/test/endpoint_unittest.cpp:584,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 582
    functionDepth: 0
    functionLinenumber: 582
    functionLinenumberEnd: 586
    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: 588
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 588
    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:591,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 590
    functionDepth: 0
    functionLinenumber: 590
    functionLinenumberEnd: 592
    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:597,1
    - Dst: pthread_create
      Src: /src/brpc/test/endpoint_unittest.cpp:597,1
    - Dst: usleep
      Src: /src/brpc/test/endpoint_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/endpoint_unittest.cpp:603,1
    - Dst: pthread_kill
      Src: /src/brpc/test/endpoint_unittest.cpp:603,1
    - Dst: pthread_join
      Src: /src/brpc/test/endpoint_unittest.cpp:605,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timed
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 594
    functionDepth: 0
    functionLinenumber: 594
    functionLinenumberEnd: 606
    functionName: TestConnectInterrupt
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 3
    functionsReached:
    - pthread_create
    - pthread_kill
    - pthread_join
    - ASSERT_EQ
    - usleep
    linkageType: ''
    returnType: void
    signature: void TestConnectInterrupt(bool timed)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: register_sigurg
      Src: /src/brpc/test/endpoint_unittest.cpp:609,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:610,1
    - Dst: TestConnectInterrupt
      Src: /src/brpc/test/endpoint_unittest.cpp:611,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 612
    functionName: TEST
    functionSourceFile: /src/brpc/test/endpoint_unittest.cpp
    functionUses: 0
    functionsReached:
    - register_sigurg
    - TestConnectInterrupt
    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: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    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: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    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:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: gettimeofday_us
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 28
    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:73,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:74,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:75,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:77,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:81,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:82,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:84,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:87,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:92,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:94,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - gettimeofday_us
    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:119,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: JsonContextBody::content_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:122,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:123,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:123,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:127,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:130,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:132,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:136,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:138,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonContextBody::content_size
    - ASSERT_TRUE
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - JsonContextBody::content
    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:154,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:155,1
    - Dst: AddressNoMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:158,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:162,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:163,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:166,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:170,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:171,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:174,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:177,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:178,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:178,1
    - Dst: AddressIntMap::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:184,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:188,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:189,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 190
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressStringMap::addr
    - AddressComplex::addr
    - ASSERT_TRUE
    - AddressIntMap::Clear
    - AddressIntMap::numbers
    - json2pb::JsonToProtoMessage
    - AddressComplex::friends
    - ASSERT_EQ
    - AddressNoMap::addr
    - AddressIntMap::addr
    - AddressStringMap::contacts
    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:197,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:200,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:204,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:204,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:206,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:209,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:211,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - printf
    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:221,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:223,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:232,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:233,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:234,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:235,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:236,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:237,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:238,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:239,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:240,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:241,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:242,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:243,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:244,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:245,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:246,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:247,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:254,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:256,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:257,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:258,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:261,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:263,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:265,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:265,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:266,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:269,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:273,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:276,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:277,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 278
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_datasfix64
    - std::string::compare
    - json2pb::JsonToProtoMessage
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - Person*::set_data
    - printf
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_name
    - Person*::set_datafix32
    - Person*::set_datafloat
    - Person*::set_datadouble
    - butil::IOBuf::IOBuf
    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:285,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:286,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:291,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:294,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:298,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:300,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:301,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:303,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:306,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:309,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:310,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:312,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:313,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:315,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:318,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:322,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:324,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:325,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:326,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:327,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:330,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:334,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:336,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:337,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:339,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:343,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:346,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:347,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:349,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:350,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:352,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:360,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:363,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:364,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:365,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:365,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:373,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:377,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:378,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:378,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:386,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:389,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:390,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:391,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 393
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - std::string::clear
    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:404,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:405,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:406,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:406,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:413,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:416,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:417,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:418,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:418,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:425,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:428,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:429,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:430,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:430,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:438,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:441,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:442,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:443,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:443,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:451,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:454,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:455,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:456,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:456,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:464,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:467,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:468,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:469,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:469,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:472,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:475,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:476,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:477,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:478,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:481,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:484,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:485,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:486,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:487,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:494,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:497,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:498,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:499,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 500
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - std::string::data
    - std::string::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_expected_failed_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:520,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:522,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:527,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:528,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:529,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:531,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:531,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:532,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:533,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 504
    functionDepth: 1
    functionLinenumber: 504
    functionLinenumberEnd: 536
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::string::find
    - ASSERT_TRUE
    - ASSERT_NE
    - json2pb::ProtoJsonToProtoMessage
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_unbounded_recursion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:545,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:547,1
    - Dst: test::RecursiveMessage*::mutable_child
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:548,1
    - Dst: test::RecursiveMessage*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:550,1
    - Dst: for
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:554,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:554,1
    - Dst: release_child
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:555,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:562,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:564,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:570,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:572,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 538
    functionDepth: 1
    functionLinenumber: 538
    functionLinenumberEnd: 574
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - ASSERT_FALSE
    - std::vector::push_back
    - test::RecursiveMessage*::set_data
    - for
    - test::RecursiveMessage*::mutable_child
    - ASSERT_EQ
    - std::vector::size
    - json2pb::ProtoMessageToJson
    - json2pb::ProtoMessageToProtoJson
    - release_child
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_unbounded_recursion)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:593,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:594,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:594,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:597,1
    - Dst: varint_len
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:597,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:599,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:602,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:607,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:610,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:613,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:619,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:619,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:619,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:620,1
    - Dst: generate_binary
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:627,1
    - Dst: test::RecursiveMessage::ParseFromString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:628,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:629,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:630,1
    - Dst: test::RecursiveMessage::IsInitialized
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:630,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:636,1
    - Dst: generate_binary
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:640,1
    - Dst: test::RecursiveMessage::ParseFromString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:641,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:642,1
    - Dst: generate_binary
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:646,1
    - Dst: test::RecursiveMessage::ParseFromString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:647,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:648,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 650
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - ASSERT_FALSE
    - varint_len
    - std::vector::push_back
    - ASSERT_TRUE
    - memcpy
    - test::RecursiveMessage::ParseFromString
    - test::RecursiveMessage::IsInitialized
    - std::string::resize
    - ASSERT_EQ
    - static_cast<char>
    - static_cast<uint8_t>
    - std::string::data
    - json2pb::ProtoMessageToJson
    - generate_binary
    - std::string::size
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_parse_unbounded_recursion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:658,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:662,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:663,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:670,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:671,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:672,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:673,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:674,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:678,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:679,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:680,1
    - Dst: butil::Timer::u_elapsed
      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: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:686,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:687,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 652
    functionDepth: 1
    functionLinenumber: 652
    functionLinenumberEnd: 689
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStop
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - ProfilerStart
    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:696,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:699,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:700,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:707,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:708,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:709,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:711,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:715,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:716,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:717,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:718,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:719,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:723,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:724,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:725,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 691
    functionDepth: 1
    functionLinenumber: 691
    functionLinenumberEnd: 726
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStop
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - ProfilerStart
    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:731,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:732,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:733,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:733,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:734,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:736,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:740,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:747,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:751,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:752,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:753,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:754,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:755,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:757,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:759,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 728
    functionDepth: 1
    functionLinenumber: 728
    functionLinenumberEnd: 760
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - std::ifstream::rdbuf
    - ProfilerStop
    - butil::Timer::start
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    - butil::IOBuf::IOBuf
    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:765,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:766,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:767,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:769,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:773,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:779,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:782,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:783,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:784,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:785,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:786,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:789,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:790,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 791
      start: 762
    functionDepth: 1
    functionLinenumber: 762
    functionLinenumberEnd: 791
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - std::ifstream::rdbuf
    - ProfilerStop
    - butil::Timer::start
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    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:796,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:798,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:799,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:800,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:802,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:803,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:804,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:806,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:807,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:808,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:809,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:810,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:811,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:812,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:813,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:814,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:815,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:816,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:817,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:818,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:819,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:820,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:826,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:830,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:831,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:833,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:834,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:837,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:844,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:846,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:852,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:855,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:857,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:859,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:861,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:864,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:871,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:873,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:879,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:882,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:884,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:889,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:892,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:899,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:901,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:907,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:910,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:920,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:921,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:922,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:924,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:927,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:928,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:929,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:930,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:933,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:940,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:942,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:948,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 954
      start: 793
    functionDepth: 1
    functionLinenumber: 793
    functionLinenumberEnd: 954
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix64
    - json2pb::JsonToProtoMessage
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - ASSERT_STREQ
    - Person*::set_data
    - printf
    - std::string::clear
    - ProtoMessageToJson
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - gettimeofday_us
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - Person*::set_datafix32
    - Person::PhoneNumber*::set_type
    - Person*::set_datafloat
    - Person*::set_datadouble
    - std::string::data
    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:965,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:965,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:966,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:966,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:967,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:967,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:969,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:971,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:971,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:973,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:973,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:974,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:974,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:975,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:975,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:979,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:979,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:980,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:980,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:981,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:981,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:982,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:982,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:983,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:983,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:985,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:987,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:987,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:988,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:988,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:989,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:989,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:990,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:990,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 992
      start: 956
    functionDepth: 1
    functionLinenumber: 956
    functionLinenumberEnd: 992
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    - std::string::clear
    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:996,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:997,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:998,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:999,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1000,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1001,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1002,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1004,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1005,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1006,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1008,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1009,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1010,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1011,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1017,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1019,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1019,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1021,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1022,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1024,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1024,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1026,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1031,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1033,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1038,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1040,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1044,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1045,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1046,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1046,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1046,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1048,1
    - Dst: AddressBookEncDec::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1052,1
    - Dst: auto::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1053,1
    - Dst: auto::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1054,1
    - Dst: auto::mutable_json_body
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1055,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1059,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1061,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1061,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1065,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1065,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1067,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1074,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1076,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1083,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1088,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1088,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1090,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1096,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:1104,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1107,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1112,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1113,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1115,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1115,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1115,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1122,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1123,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1128,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1129,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1129,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 50
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 994
    functionDepth: 1
    functionLinenumber: 994
    functionLinenumberEnd: 1130
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressBookEncDec::add_person
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    - JsonContextBodyEncDec::set_type
    - ContentEncDec*::set_distance_info_
    - auto::mutable_json_body
    - ContentEncDec*::mutable__ext_z037_t_
    - ExtEncDec*::set_enum_z045__z045_type
    - ContentEncDec*::set_uid_z042_
    - ASSERT_TRUE
    - JsonContextBodyEncDec::set_judge
    - ASSERT_STREQ
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - printf
    - JsonContextBodyEncDec::add_info
    - ProtoMessageToJson
    - JsonContextBodyEncDec::set_spur
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - auto::set_id
    - auto::set_name
    - google::protobuf::TextFormat::Printer::PrintToString
    - JsonContextBodyEncDec::add_data_z058_array
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - std::string::data
    - ExtEncDec*::set_aa_ge_z040_
    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:1135,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1137,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1140,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1144,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1147,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1149,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1150,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1151,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1153,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1154,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1155,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1157,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1158,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1159,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1160,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1161,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1162,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1163,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1164,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1165,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1167,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1168,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1169,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1170,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1171,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1177,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1179,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1179,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1182,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1184,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1187,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1191,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1199,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1201,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1208,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1211,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1213,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1216,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1220,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1228,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1230,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1237,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1240,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1242,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1246,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1250,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1258,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1260,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1261,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1132
    functionDepth: 1
    functionLinenumber: 1132
    functionLinenumberEnd: 1271
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix64
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - memcpy
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - ASSERT_STREQ
    - Person*::set_data
    - printf
    - std::string::clear
    - ProtoMessageToJson
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - Person*::set_datafix32
    - Person::PhoneNumber*::set_type
    - Person*::set_datafloat
    - Person*::set_datadouble
    - std::string::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:1276,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1278,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1287,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1288,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1289,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1290,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1291,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1292,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1293,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1294,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1295,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1296,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1297,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1298,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1299,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1300,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1301,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1302,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1309,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1311,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1312,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1313,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1314,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1318,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1318,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1318,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1319
      start: 1273
    functionDepth: 1
    functionLinenumber: 1273
    functionLinenumberEnd: 1319
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_datasfix64
    - std::string::compare
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - Person*::set_data
    - printf
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_name
    - Person*::set_datafix32
    - Person*::set_datafloat
    - Person*::set_datadouble
    - butil::IOBuf::IOBuf
    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:1326,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1327,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1329,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1330,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1332,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1333,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1335,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1336,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1338,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1339,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1341,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1343,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1344,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1344,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1350,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1351,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1351,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1354,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1356,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1357
      start: 1321
    functionDepth: 1
    functionLinenumber: 1321
    functionLinenumberEnd: 1357
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_name
    - ASSERT_TRUE
    - std::string::empty
    - Person*::add_phone
    - Person*::set_datafloat
    - Person*::set_id
    - json2pb::JsonToProtoMessage
    - AddressBook::add_person
    - json2pb::ProtoMessageToJson
    - Person*::set_datadouble
    - std::string::clear
    - Person::PhoneNumber*::set_number
    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:1364,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1366,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1367,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1369,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1370,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1371,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1371,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1373,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1374,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1376,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1377,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1379,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1380,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1381,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1381,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1383,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1384,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1386,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1387,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1388,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1390,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1391,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1392,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1393
      start: 1359
    functionDepth: 1
    functionLinenumber: 1359
    functionLinenumberEnd: 1393
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_name
    - ASSERT_FALSE
    - Person*::set_email
    - Person*::set_id
    - AddressBook::add_person
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - AddressBook::clear_person
    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:1398,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1400,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1401,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1402,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1404,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1405,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1406,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1408,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1410,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1412,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1414,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1416,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1418,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1420,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1422,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1424,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1426,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1428,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1430,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1432,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1434,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1436,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1442,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1444,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1444,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1446,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1448,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1449,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1454,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1454,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1458,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1459,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1460,1
    - Dst: butil::Timer::u_elapsed
      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: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1464,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1465,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1466,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1467,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1468,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1472,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1473,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1395
    functionDepth: 1
    functionLinenumber: 1395
    functionLinenumberEnd: 1475
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - Person*::set_datau64
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix64
    - json2pb::JsonToProtoMessage
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - butil::Timer::stop
    - ASSERT_TRUE
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - Person*::set_data
    - printf
    - ProfilerStart
    - butil::Timer::Timer
    - ProfilerStop
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - Person*::set_datafix32
    - Person::PhoneNumber*::set_type
    - Person*::set_datafloat
    - Person*::set_datadouble
    - std::string::data
    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:1479,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1481,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1482,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1484,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1485,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1487,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1488,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1489,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1491,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1492,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1493,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1494,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1500,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1504,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1504,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1506,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1507,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1509,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1517,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1518,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1519,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1521,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1523,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1524,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1525,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1526,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1527,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1531,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1532,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1533,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1477
    functionDepth: 1
    functionLinenumber: 1477
    functionLinenumberEnd: 1534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - json2pb::JsonToProtoMessage
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - JsonContextBodyEncDec::set_type
    - ContentEncDec*::set_distance_info_
    - ContentEncDec*::mutable__ext_z037_t_
    - ExtEncDec*::set_enum_z045__z045_type
    - ContentEncDec*::set_uid_z042_
    - butil::Timer::stop
    - ASSERT_TRUE
    - JsonContextBodyEncDec::set_judge
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - printf
    - butil::Timer::Timer
    - ProfilerStart
    - JsonContextBodyEncDec::add_info
    - JsonContextBodyEncDec::set_spur
    - ProfilerStop
    - google::protobuf::TextFormat::Printer::PrintToString
    - JsonContextBodyEncDec::add_data_z058_array
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - std::string::data
    - ExtEncDec*::set_aa_ge_z040_
    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:1540,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1541,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1542,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1544,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1548,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1555,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1556,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1557,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1560,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1561,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1563,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1564,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1566,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1569,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1570,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1571
      start: 1536
    functionDepth: 1
    functionLinenumber: 1536
    functionLinenumberEnd: 1571
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - JsonToProtoMessage
    - ProfilerStop
    - ProfilerStart
    - std::ifstream::rdbuf
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    - butil::IOBuf::IOBuf
    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:1576,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1577,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1578,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1580,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1584,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1591,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1592,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1593,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1597,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1599,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1600,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1601,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1602,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1605,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1606,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1607
      start: 1573
    functionDepth: 1
    functionLinenumber: 1573
    functionLinenumberEnd: 1607
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - JsonToProtoMessage
    - ProfilerStop
    - ProfilerStart
    - std::ifstream::rdbuf
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    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:1613,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1614,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1614,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1616,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1616,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1617,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1617,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1620,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1623,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1623,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1623,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1624,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1629,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1630,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1633,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1640,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1640,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1641,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1641,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1642,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1642,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1609
    functionDepth: 1
    functionLinenumber: 1609
    functionLinenumberEnd: 1643
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - std::string::empty
    - strcmp
    - std::string::data
    - json2pb::decode_name
    - std::string::clear
    - json2pb::encode_name
    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:1647,1
    - Dst: Person::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1648,1
    - Dst: Person::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1649,1
    - Dst: Person::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1650,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1651,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1654,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1654,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1656,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1657
      start: 1645
    functionDepth: 1
    functionLinenumber: 1645
    functionLinenumberEnd: 1657
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person::set_id
    - Person::set_datadouble
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - Person::set_name
    - ASSERT_EQ
    - Person::set_datafloat
    - json2pb::ProtoMessageToJson
    - butil::IOBuf::IOBuf
    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:1660,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1665,1
    - Dst: Person::name
      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: Person::id
      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: Person::datadouble
      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: Person::datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1668,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1669
      start: 1659
    functionDepth: 1
    functionLinenumber: 1659
    functionLinenumberEnd: 1669
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person::datafloat
    - ASSERT_TRUE
    - Person::name
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - ASSERT_STREQ
    - Person::datadouble
    - butil::IOBuf::IOBuf
    - 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:1674,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1674,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: Person::GetExtension
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1677,1
    - Dst: json2pb::ProtoMessageToJson
      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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1679
      start: 1671
    functionDepth: 1
    functionLinenumber: 1671
    functionLinenumberEnd: 1679
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person::GetExtension
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    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:1685,1
    - Dst: json2pb::JsonToProtoMessage
      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: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1686,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1688,1
    - Dst: json2pb::JsonToProtoMessage
      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: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1689,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1690
      start: 1681
    functionDepth: 1
    functionLinenumber: 1681
    functionLinenumberEnd: 1690
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Person::data
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    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:1698,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1701,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1702,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1705,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1706,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1715,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1717,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1719,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1721,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1721,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1723,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1725,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1730,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1738,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1744,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1744,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1746,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1747,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1749,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1754,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1757
      start: 1692
    functionDepth: 1
    functionLinenumber: 1692
    functionLinenumberEnd: 1757
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::string::substr
    - std::string::empty
    - Person::datadouble
    - std::string::append
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - Person::name
    - ASSERT_EQ
    - butil::IOBuf::copy_to
    - Person::Clear
    - butil::string_printf
    - Person::ShortDebugString
    - c_str
    - 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:1761,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1762,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1770,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1770,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1771,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1772,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1773,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1774,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1774,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1776,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1777,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1777,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1778,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1779,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1783,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1784,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1784,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1785,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1786,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1787,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1787,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1789,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1790,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1790,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1791,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1792,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1793
      start: 1759
    functionDepth: 1
    functionLinenumber: 1759
    functionLinenumberEnd: 1793
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::string::substr
    - std::string::c_str
    - ASSERT_TRUE
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - Person::name
    - ASSERT_EQ
    - ASSERT_STREQ
    - Person::Clear
    - Person::datadouble
    - 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:1802,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1802,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1803,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1805,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1806,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1807,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1809,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1809,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1810,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1815,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1815,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1816,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1817,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1817,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1818,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1819,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1819,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1820,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1820,1
    - Dst: AddressIntMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1822,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1823,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1824,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1826,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1826,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1827,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1827,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1828,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1828,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1829,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1830,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1831,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1831,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1836,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1836,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1837,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1838,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1839,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1840,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1841,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1841,1
    - Dst: AddressStringMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1843,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1844,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1845,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1847,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1847,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1848,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1849,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1849,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1850,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1851,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1852,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1852,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1853
      start: 1795
    functionDepth: 1
    functionLinenumber: 1795
    functionLinenumberEnd: 1853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressIntMapStd::addr
    - ASSERT_FALSE
    - AddressIntMapStd::numbers_size
    - AddressStringMapStd::Clear
    - ASSERT_TRUE
    - AddressIntMapStd::numbers
    - AddressIntMapStd::Clear
    - AddressStringMapStd::addr
    - LOG
    - json2pb::ProtoJsonToProtoMessage
    - butil::IOBuf::append
    - ASSERT_EQ
    - AddressStringMapStd::contacts
    - AddressIntMapStd::has_addr
    - butil::IOBuf::IOBuf
    - std::string::clear
    - AddressStringMapStd::has_addr
    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:1860,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1861,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1862,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1864,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1864,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1865,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1865,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1866,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1866,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1867,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1867,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1869,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1870,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1872,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1872,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1873,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1874,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1874,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1875,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1875,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1876,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1876,1
    - Dst: AddressStringMapStd::set_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1879,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1880,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1881,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1883,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1883,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1884,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1884,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1885,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1885,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1886,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1886,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1888,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1889,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1891,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1891,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1892,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1893,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1893,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1894,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1894,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1895,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1895,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1896
      start: 1855
    functionDepth: 1
    functionLinenumber: 1855
    functionLinenumberEnd: 1896
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - ASSERT_NE
    - AddressStringMapStd::set_addr
    - butil::IOBuf::append
    - AddressIntMapStd::set_addr
    - AddressStringMapStd::mutable_contacts
    - butil::IOBuf::IOBuf
    - json2pb::ProtoMessageToJson
    - AddressIntMapStd::mutable_numbers
    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: 49
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 49
    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: 50
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 50
    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:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 57
    functionName: gettimeofday_us
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 30
    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:73,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:74,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:75,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:77,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:81,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:82,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:83,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:84,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:87,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:92,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:94,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - gettimeofday_us
    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:119,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:120,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: JsonContextBody::content_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:122,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:123,1
    - Dst: JsonContextBody::content
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:123,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:127,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:129,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:130,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:132,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:136,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:138,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 144
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - JsonContextBody::content_size
    - ASSERT_TRUE
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - JsonContextBody::content
    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:154,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:155,1
    - Dst: AddressNoMap::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:155,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:158,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:162,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:162,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:163,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:166,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:170,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:171,1
    - Dst: AddressStringMap::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:171,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:174,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:177,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:178,1
    - Dst: AddressComplex::friends
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:178,1
    - Dst: AddressIntMap::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:183,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:184,1
    - Dst: json2pb::JsonToProtoMessage
      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::addr
      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
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:188,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:189,1
    - Dst: AddressIntMap::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 190
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressStringMap::addr
    - AddressComplex::addr
    - ASSERT_TRUE
    - AddressIntMap::Clear
    - AddressIntMap::numbers
    - json2pb::JsonToProtoMessage
    - AddressComplex::friends
    - ASSERT_EQ
    - AddressNoMap::addr
    - AddressIntMap::addr
    - AddressStringMap::contacts
    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:197,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:200,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:204,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:204,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:206,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:209,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:211,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:214,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 216
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - printf
    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:221,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:223,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:232,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:233,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:234,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:235,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:236,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:237,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:238,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:239,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:240,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:241,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:242,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:243,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:244,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:245,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:246,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:247,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:254,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:256,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:257,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:258,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:261,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:263,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:264,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:265,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:265,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:266,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:268,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:269,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:272,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:273,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:276,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:277,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 218
    functionDepth: 1
    functionLinenumber: 218
    functionLinenumberEnd: 278
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_datasfix64
    - std::string::compare
    - json2pb::JsonToProtoMessage
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - Person*::set_data
    - printf
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_name
    - Person*::set_datafix32
    - Person*::set_datafloat
    - Person*::set_datadouble
    - butil::IOBuf::IOBuf
    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:285,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:286,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:291,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:294,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:297,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:298,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:300,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:301,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:302,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:303,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:306,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:309,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:310,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:312,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:313,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:314,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:315,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:318,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:321,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:322,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:324,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:325,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:326,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:327,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:330,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:333,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:334,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:336,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:337,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:339,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:343,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:346,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:347,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:349,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:350,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:351,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:352,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:360,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:363,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:364,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:365,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:365,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:373,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:376,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:377,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:378,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:378,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:386,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:389,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:390,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:391,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 59
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 393
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - std::string::clear
    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:404,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:405,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:406,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:406,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:413,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:416,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:417,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:418,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:418,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:425,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:428,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:429,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:430,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:430,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:438,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:441,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:442,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:443,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:443,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:451,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:454,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:455,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:456,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:456,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:464,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:467,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:468,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:469,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:469,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:472,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:475,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:476,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:477,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:478,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:481,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:484,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:485,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:486,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:487,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:494,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:497,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:498,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:499,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 500
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - json2pb::JsonToProtoMessage
    - ASSERT_STREQ
    - std::string::data
    - std::string::clear
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_expected_failed_case)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:520,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:521,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:522,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:527,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:528,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:529,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:529,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:531,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:531,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:532,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:533,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 504
    functionDepth: 1
    functionLinenumber: 504
    functionLinenumberEnd: 536
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::string::find
    - ASSERT_TRUE
    - ASSERT_NE
    - json2pb::ProtoJsonToProtoMessage
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, json_to_pb_unbounded_recursion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:545,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:547,1
    - Dst: test::RecursiveMessage*::mutable_child
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:548,1
    - Dst: test::RecursiveMessage*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:550,1
    - Dst: for
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:554,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:554,1
    - Dst: release_child
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:555,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:562,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:564,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:570,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:572,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 538
    functionDepth: 1
    functionLinenumber: 538
    functionLinenumberEnd: 574
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - ASSERT_FALSE
    - std::vector::push_back
    - test::RecursiveMessage*::set_data
    - for
    - test::RecursiveMessage*::mutable_child
    - ASSERT_EQ
    - std::vector::size
    - json2pb::ProtoMessageToJson
    - json2pb::ProtoMessageToProtoJson
    - release_child
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_json_unbounded_recursion)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:593,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:594,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:594,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:597,1
    - Dst: varint_len
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:597,1
    - Dst: std::vector::back
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:599,1
    - Dst: std::string::resize
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:602,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:607,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:610,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:613,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:619,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:619,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:619,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:620,1
    - Dst: generate_binary
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:627,1
    - Dst: test::RecursiveMessage::ParseFromString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:628,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:629,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:630,1
    - Dst: test::RecursiveMessage::IsInitialized
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:630,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:635,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:636,1
    - Dst: generate_binary
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:640,1
    - Dst: test::RecursiveMessage::ParseFromString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:641,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:642,1
    - Dst: generate_binary
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:646,1
    - Dst: test::RecursiveMessage::ParseFromString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:647,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:648,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 650
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - ASSERT_FALSE
    - varint_len
    - std::vector::push_back
    - ASSERT_TRUE
    - memcpy
    - test::RecursiveMessage::ParseFromString
    - test::RecursiveMessage::IsInitialized
    - std::string::resize
    - ASSERT_EQ
    - static_cast<char>
    - static_cast<uint8_t>
    - std::string::data
    - json2pb::ProtoMessageToJson
    - generate_binary
    - std::string::size
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_parse_unbounded_recursion)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:658,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:662,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:663,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:670,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:671,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:672,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:673,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:674,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:678,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:679,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:680,1
    - Dst: butil::Timer::u_elapsed
      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: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:686,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:687,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 652
    functionDepth: 1
    functionLinenumber: 652
    functionLinenumberEnd: 689
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStop
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - ProfilerStart
    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:696,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:699,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:700,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:707,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:708,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:709,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:710,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:711,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:715,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:716,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:717,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:718,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:719,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:723,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:724,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:725,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 691
    functionDepth: 1
    functionLinenumber: 691
    functionLinenumberEnd: 726
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - printf
    - json2pb::JsonToProtoMessage
    - ProfilerStop
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - ProfilerStart
    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:731,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:732,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:733,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:733,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:734,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:736,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:740,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:747,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:751,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:752,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:753,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:754,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:755,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:757,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:759,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 728
    functionDepth: 1
    functionLinenumber: 728
    functionLinenumberEnd: 760
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - std::ifstream::rdbuf
    - ProfilerStop
    - butil::Timer::start
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    - butil::IOBuf::IOBuf
    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:765,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:766,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:767,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:769,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:773,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:779,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:782,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:783,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:784,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:785,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:786,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:789,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:790,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 791
      start: 762
    functionDepth: 1
    functionLinenumber: 762
    functionLinenumberEnd: 791
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - json2pb::JsonToProtoMessage
    - ProfilerStart
    - std::ifstream::rdbuf
    - ProfilerStop
    - butil::Timer::start
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    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:796,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:798,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:799,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:800,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:802,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:803,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:804,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:806,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:807,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:808,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:809,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:810,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:811,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:812,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:813,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:814,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:815,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:816,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:817,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:818,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:819,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:820,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:826,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:828,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:830,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:831,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:833,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:834,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:837,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:844,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:846,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:852,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:855,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:857,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:859,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:861,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:864,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:871,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:873,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:879,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:882,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:884,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:889,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:892,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:899,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:901,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:907,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:910,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:920,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:921,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:922,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:924,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:927,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:928,1
    - Dst: gettimeofday_us
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:929,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:930,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:933,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:940,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:942,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:948,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 954
      start: 793
    functionDepth: 1
    functionLinenumber: 793
    functionLinenumberEnd: 954
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix64
    - json2pb::JsonToProtoMessage
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - ASSERT_STREQ
    - Person*::set_data
    - printf
    - std::string::clear
    - ProtoMessageToJson
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - gettimeofday_us
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - Person*::set_datafix32
    - Person::PhoneNumber*::set_type
    - Person*::set_datafloat
    - Person*::set_datadouble
    - std::string::data
    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:965,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:965,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:966,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:966,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:967,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:967,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:969,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:971,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:971,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:972,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:973,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:973,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:974,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:974,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:975,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:975,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:977,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:979,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:979,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:980,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:980,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:981,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:981,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:982,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:982,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:983,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:983,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:985,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:987,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:987,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:988,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:988,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:989,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:989,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:990,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:990,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 992
      start: 956
    functionDepth: 1
    functionLinenumber: 956
    functionLinenumberEnd: 992
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    - std::string::clear
    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:996,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:997,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:998,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:999,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1000,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1001,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1002,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1004,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1005,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1006,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1008,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1009,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1010,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1011,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1017,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1019,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1019,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1021,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1022,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1024,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1024,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1026,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1031,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1033,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1038,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1040,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1044,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1045,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1046,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1046,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1046,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1048,1
    - Dst: AddressBookEncDec::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1052,1
    - Dst: auto::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1053,1
    - Dst: auto::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1054,1
    - Dst: auto::mutable_json_body
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1055,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1059,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1061,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1061,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1065,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1065,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1067,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1074,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1076,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1083,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1088,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1088,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1090,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1096,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:1104,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1107,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1112,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1113,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1115,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1115,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1115,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1122,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1123,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1124,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1128,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1129,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1129,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 50
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 994
    functionDepth: 1
    functionLinenumber: 994
    functionLinenumberEnd: 1130
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressBookEncDec::add_person
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoMessageToJson
    - JsonContextBodyEncDec::set_type
    - ContentEncDec*::set_distance_info_
    - auto::mutable_json_body
    - ContentEncDec*::mutable__ext_z037_t_
    - ExtEncDec*::set_enum_z045__z045_type
    - ContentEncDec*::set_uid_z042_
    - ASSERT_TRUE
    - JsonContextBodyEncDec::set_judge
    - ASSERT_STREQ
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - printf
    - JsonContextBodyEncDec::add_info
    - ProtoMessageToJson
    - JsonContextBodyEncDec::set_spur
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - auto::set_id
    - auto::set_name
    - google::protobuf::TextFormat::Printer::PrintToString
    - JsonContextBodyEncDec::add_data_z058_array
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - std::string::data
    - ExtEncDec*::set_aa_ge_z040_
    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:1135,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1137,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1140,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1144,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1147,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1149,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1150,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1151,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1153,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1154,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1155,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1157,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1158,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1159,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1160,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1161,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1162,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1163,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1164,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1165,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1166,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1167,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1168,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1169,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1170,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1171,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1177,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1179,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1179,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1182,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1184,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1186,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1187,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1191,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1199,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1201,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1208,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1211,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1213,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1216,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1220,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1228,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1230,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1237,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1240,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1242,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1245,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1246,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1250,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1258,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1260,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1261,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 54
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1132
    functionDepth: 1
    functionLinenumber: 1132
    functionLinenumberEnd: 1271
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix64
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - memcpy
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - ASSERT_STREQ
    - Person*::set_data
    - printf
    - std::string::clear
    - ProtoMessageToJson
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - Person*::set_datafix32
    - Person::PhoneNumber*::set_type
    - Person*::set_datafloat
    - Person*::set_datadouble
    - std::string::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:1276,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1278,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1287,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1288,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1289,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1290,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1291,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1292,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1293,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1294,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1295,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1296,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1297,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1298,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1299,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1300,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1301,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1302,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1309,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1311,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1312,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1313,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1314,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1318,1
    - Dst: std::string::compare
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1318,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1318,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1319
      start: 1273
    functionDepth: 1
    functionLinenumber: 1273
    functionLinenumberEnd: 1319
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_datau64
    - Person*::set_datasfix64
    - std::string::compare
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - Person*::set_data
    - printf
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person*::set_name
    - Person*::set_datafix32
    - Person*::set_datafloat
    - Person*::set_datadouble
    - butil::IOBuf::IOBuf
    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:1326,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1327,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1329,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1330,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1332,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1333,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1335,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1336,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1338,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1339,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1341,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1343,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1344,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1344,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1349,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1350,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1351,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1351,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1354,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1355,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1356,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1356,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1357
      start: 1321
    functionDepth: 1
    functionLinenumber: 1321
    functionLinenumberEnd: 1357
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_name
    - ASSERT_TRUE
    - std::string::empty
    - Person*::add_phone
    - Person*::set_datafloat
    - Person*::set_id
    - json2pb::JsonToProtoMessage
    - AddressBook::add_person
    - json2pb::ProtoMessageToJson
    - Person*::set_datadouble
    - std::string::clear
    - Person::PhoneNumber*::set_number
    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:1364,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1366,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1367,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1369,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1370,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1371,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1371,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1373,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1374,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1376,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1377,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1379,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1380,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1381,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1381,1
    - Dst: AddressBook::clear_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1383,1
    - Dst: AddressBook::add_person
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1384,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1386,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1387,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1388,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1390,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1391,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1392,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1392,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1393
      start: 1359
    functionDepth: 1
    functionLinenumber: 1359
    functionLinenumberEnd: 1393
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person*::set_name
    - ASSERT_FALSE
    - Person*::set_email
    - Person*::set_id
    - AddressBook::add_person
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    - std::string::data
    - AddressBook::clear_person
    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:1398,1
    - Dst: Person*::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1400,1
    - Dst: Person*::set_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1401,1
    - Dst: Person*::set_email
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1402,1
    - Dst: Person*::add_phone
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1404,1
    - Dst: Person::PhoneNumber*::set_number
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1405,1
    - Dst: Person::PhoneNumber*::set_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1406,1
    - Dst: Person*::set_data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1408,1
    - Dst: Person*::set_data32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1410,1
    - Dst: Person*::set_data64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1412,1
    - Dst: Person*::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1414,1
    - Dst: Person*::set_datadouble_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1416,1
    - Dst: Person*::set_datafloat_scientific
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1418,1
    - Dst: Person*::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1420,1
    - Dst: Person*::set_datau32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1422,1
    - Dst: Person*::set_datau64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1424,1
    - Dst: Person*::set_databool
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1426,1
    - Dst: Person*::set_databyte
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1428,1
    - Dst: Person*::set_datafix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1430,1
    - Dst: Person*::set_datafix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1432,1
    - Dst: Person*::set_datasfix32
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1434,1
    - Dst: Person*::set_datasfix64
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1436,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1442,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1444,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1444,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1446,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1448,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1449,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1454,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1454,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1458,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1459,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1460,1
    - Dst: butil::Timer::u_elapsed
      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: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1464,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1465,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1466,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1467,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1468,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1472,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1473,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1474,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1395
    functionDepth: 1
    functionLinenumber: 1395
    functionLinenumberEnd: 1475
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - Person*::set_datau64
    - Person*::set_email
    - Person*::add_phone
    - Person*::set_datasfix64
    - json2pb::JsonToProtoMessage
    - Person*::set_datafloat_scientific
    - Person*::set_data32
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - Person*::set_data64
    - Person*::set_datau32
    - Person*::set_datadouble_scientific
    - butil::Timer::stop
    - ASSERT_TRUE
    - Person*::set_datafix64
    - Person*::set_id
    - Person*::set_databyte
    - AddressBook::add_person
    - Person*::set_data
    - printf
    - ProfilerStart
    - butil::Timer::Timer
    - ProfilerStop
    - Person*::set_databool
    - Person*::set_datasfix32
    - google::protobuf::TextFormat::Printer::PrintToString
    - Person::PhoneNumber*::set_number
    - Person*::set_name
    - Person*::set_datafix32
    - Person::PhoneNumber*::set_type
    - Person*::set_datafloat
    - Person*::set_datadouble
    - std::string::data
    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:1479,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1480,1
    - Dst: JsonContextBodyEncDec::add_data_z058_array
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1481,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1482,1
    - Dst: JsonContextBodyEncDec::add_info
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1483,1
    - Dst: JsonContextBodyEncDec::set_judge
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1484,1
    - Dst: JsonContextBodyEncDec::set_spur
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1485,1
    - Dst: JsonContextBodyEncDec::add__z064_content_test_z037__z064_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1487,1
    - Dst: ContentEncDec*::set_uid_z042_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1488,1
    - Dst: ContentEncDec*::set_distance_info_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1489,1
    - Dst: ContentEncDec*::mutable__ext_z037_t_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1491,1
    - Dst: ExtEncDec*::set_aa_ge_z040_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1492,1
    - Dst: ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1493,1
    - Dst: ExtEncDec*::set_enum_z045__z045_type
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1494,1
    - Dst: google::protobuf::TextFormat::Printer::PrintToString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1500,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1504,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1504,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1506,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1507,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1509,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1517,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1518,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1519,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1520,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1521,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1523,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1524,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1525,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1526,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1527,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1531,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1532,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1533,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1534
      start: 1477
    functionDepth: 1
    functionLinenumber: 1477
    functionLinenumberEnd: 1534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - json2pb::JsonToProtoMessage
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - JsonContextBodyEncDec::set_type
    - ContentEncDec*::set_distance_info_
    - ContentEncDec*::mutable__ext_z037_t_
    - ExtEncDec*::set_enum_z045__z045_type
    - ContentEncDec*::set_uid_z042_
    - butil::Timer::stop
    - ASSERT_TRUE
    - JsonContextBodyEncDec::set_judge
    - JsonContextBodyEncDec::add__z064_content_test_z037__z064_
    - printf
    - butil::Timer::Timer
    - ProfilerStart
    - JsonContextBodyEncDec::add_info
    - JsonContextBodyEncDec::set_spur
    - ProfilerStop
    - google::protobuf::TextFormat::Printer::PrintToString
    - JsonContextBodyEncDec::add_data_z058_array
    - ExtEncDec*::set_databyte_z040_std_z058__z058_string_z041_
    - std::string::data
    - ExtEncDec*::set_aa_ge_z040_
    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:1540,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1541,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1542,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1544,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1548,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1555,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1556,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1557,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1560,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1561,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1563,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1564,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1566,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1569,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1570,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1571
      start: 1536
    functionDepth: 1
    functionLinenumber: 1536
    functionLinenumberEnd: 1571
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - JsonToProtoMessage
    - ProfilerStop
    - ProfilerStart
    - std::ifstream::rdbuf
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    - butil::IOBuf::IOBuf
    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:1576,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1577,1
    - Dst: std::ifstream::close
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1578,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1580,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1584,1
    - Dst: JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1591,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1592,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1593,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1597,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1599,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1600,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1601,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1602,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1605,1
    - Dst: printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1606,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1607
      start: 1573
    functionDepth: 1
    functionLinenumber: 1573
    functionLinenumberEnd: 1607
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - ASSERT_TRUE
    - butil::Timer::Timer
    - JsonToProtoMessage
    - ProfilerStop
    - ProfilerStart
    - std::ifstream::rdbuf
    - butil::Timer::start
    - json2pb::ProtoMessageToJson
    - std::ifstream::close
    - std::ostringstream::str
    - printf
    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:1613,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1613,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1614,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1614,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1616,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1616,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1617,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1617,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1620,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1621,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1623,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1623,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1623,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1624,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1625,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1626,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1629,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1630,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1632,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1633,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: strcmp
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: std::string::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1635,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: json2pb::encode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1640,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1640,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1641,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1641,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1642,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1642,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1609
    functionDepth: 1
    functionLinenumber: 1609
    functionLinenumberEnd: 1643
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - std::string::empty
    - strcmp
    - std::string::data
    - json2pb::decode_name
    - std::string::clear
    - json2pb::encode_name
    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:1647,1
    - Dst: Person::set_id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1648,1
    - Dst: Person::set_datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1649,1
    - Dst: Person::set_datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1650,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1651,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1654,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1654,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1655,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1656,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1657
      start: 1645
    functionDepth: 1
    functionLinenumber: 1645
    functionLinenumberEnd: 1657
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person::set_id
    - Person::set_datadouble
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - Person::set_name
    - ASSERT_EQ
    - Person::set_datafloat
    - json2pb::ProtoMessageToJson
    - butil::IOBuf::IOBuf
    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:1660,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1664,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1665,1
    - Dst: Person::name
      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: Person::id
      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: Person::datadouble
      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: Person::datafloat
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1668,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1669
      start: 1659
    functionDepth: 1
    functionLinenumber: 1659
    functionLinenumberEnd: 1669
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person::datafloat
    - ASSERT_TRUE
    - Person::name
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - ASSERT_STREQ
    - Person::datadouble
    - butil::IOBuf::IOBuf
    - 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:1674,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1674,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: Person::GetExtension
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1675,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1677,1
    - Dst: json2pb::ProtoMessageToJson
      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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1679
      start: 1671
    functionDepth: 1
    functionLinenumber: 1671
    functionLinenumberEnd: 1679
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - Person::GetExtension
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    - ASSERT_EQ
    - ASSERT_STREQ
    - json2pb::ProtoMessageToJson
    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:1685,1
    - Dst: json2pb::JsonToProtoMessage
      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: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1686,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1688,1
    - Dst: json2pb::JsonToProtoMessage
      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: Person::data
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1689,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1690
      start: 1681
    functionDepth: 1
    functionLinenumber: 1681
    functionLinenumberEnd: 1690
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - Person::data
    - ASSERT_TRUE
    - json2pb::JsonToProtoMessage
    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:1698,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1701,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1702,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1705,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1706,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1715,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1717,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1718,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1719,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1719,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1720,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1721,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1721,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1723,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1725,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1730,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1738,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1740,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1742,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1743,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1744,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1744,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1746,1
    - Dst: Person::ShortDebugString
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1747,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1749,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1754,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1757
      start: 1692
    functionDepth: 1
    functionLinenumber: 1692
    functionLinenumberEnd: 1757
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::string::substr
    - std::string::empty
    - Person::datadouble
    - std::string::append
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - Person::name
    - ASSERT_EQ
    - butil::IOBuf::copy_to
    - Person::Clear
    - butil::string_printf
    - Person::ShortDebugString
    - c_str
    - 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:1761,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1762,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1770,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1770,1
    - Dst: std::string::substr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1771,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1772,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1772,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1773,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1773,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1774,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1774,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1776,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1777,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1777,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1778,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1779,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1783,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1784,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1784,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1785,1
    - Dst: Person::name
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1786,1
    - Dst: Person::id
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1787,1
    - Dst: Person::datadouble
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1787,1
    - Dst: Person::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1789,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1790,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1790,1
    - Dst: ASSERT_STREQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1791,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1792,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1793
      start: 1759
    functionDepth: 1
    functionLinenumber: 1759
    functionLinenumberEnd: 1793
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - std::string::substr
    - std::string::c_str
    - ASSERT_TRUE
    - butil::IOBuf::append
    - json2pb::JsonToProtoMessage
    - Person::name
    - ASSERT_EQ
    - ASSERT_STREQ
    - Person::Clear
    - Person::datadouble
    - 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:1802,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1802,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1803,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1805,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1806,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1807,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1809,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1809,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1810,1
    - Dst: std::string::clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1815,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1815,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1816,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1816,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1817,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1817,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1818,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1818,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1819,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1819,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1820,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1820,1
    - Dst: AddressIntMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1822,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1823,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1824,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1826,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1826,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1827,1
    - Dst: AddressIntMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1827,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1828,1
    - Dst: AddressIntMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1828,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1829,1
    - Dst: AddressIntMapStd::numbers_size
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1829,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1830,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1830,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1831,1
    - Dst: AddressIntMapStd::numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1831,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1836,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1836,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1837,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1837,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1838,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1838,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1839,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1840,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1840,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1841,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1841,1
    - Dst: AddressStringMapStd::Clear
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1843,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1844,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1845,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1847,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1847,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1848,1
    - Dst: AddressStringMapStd::has_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1848,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1849,1
    - Dst: AddressStringMapStd::addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1849,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1850,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1850,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1851,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1851,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1852,1
    - Dst: AddressStringMapStd::contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1852,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1853
      start: 1795
    functionDepth: 1
    functionLinenumber: 1795
    functionLinenumberEnd: 1853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - AddressIntMapStd::addr
    - ASSERT_FALSE
    - AddressIntMapStd::numbers_size
    - AddressStringMapStd::Clear
    - ASSERT_TRUE
    - AddressIntMapStd::numbers
    - AddressIntMapStd::Clear
    - AddressStringMapStd::addr
    - LOG
    - json2pb::ProtoJsonToProtoMessage
    - butil::IOBuf::append
    - ASSERT_EQ
    - AddressStringMapStd::contacts
    - AddressIntMapStd::has_addr
    - butil::IOBuf::IOBuf
    - std::string::clear
    - AddressStringMapStd::has_addr
    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:1860,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1861,1
    - Dst: AddressIntMapStd::mutable_numbers
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1862,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1864,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1864,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1865,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1865,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1866,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1866,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1867,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1867,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1869,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1870,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1872,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1872,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1873,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1874,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1874,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1875,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1875,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1876,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1876,1
    - Dst: AddressStringMapStd::set_addr
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1879,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1880,1
    - Dst: AddressStringMapStd::mutable_contacts
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1881,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1883,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1883,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1884,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1884,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1885,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1885,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1886,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1886,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1888,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1889,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1891,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1891,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1892,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1893,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1893,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1894,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1894,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1895,1
    - Dst: std::string::find
      Src: /src/brpc/test/brpc_protobuf_json_unittest.cpp:1895,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1896
      start: 1855
    functionDepth: 1
    functionLinenumber: 1855
    functionLinenumberEnd: 1896
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_protobuf_json_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::find
    - ASSERT_TRUE
    - butil::IOBuf::to_string
    - ASSERT_NE
    - AddressStringMapStd::set_addr
    - butil::IOBuf::append
    - AddressIntMapStd::set_addr
    - AddressStringMapStd::mutable_contacts
    - butil::IOBuf::IOBuf
    - json2pb::ProtoMessageToJson
    - AddressIntMapStd::mutable_numbers
    linkageType: ''
    returnType: void
    signature: void TEST_F(ProtobufJsonTest, pb_to_proto_json)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:107,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:108,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 8
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:115,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:117,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:118,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:118,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:119,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:120,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:120,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:121,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:128,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:133,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:135,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:135,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:136,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:136,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:137,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 142
    functionName: ProbeConnect
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeConnect()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:151,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:152,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:152,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:152,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:153,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:155,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:160,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:161,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:166,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:167,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:173,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:175,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:178,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:178,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:179,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:180,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:183,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:186,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:187,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:188,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:189,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:190,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:190,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:193,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:195,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:197,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:198,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:200,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:202,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:208,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:210,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:211,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:212,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:216,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:217,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:218,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:222,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:224,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:231,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:234,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:234,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:235,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:238,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:240,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 242
    functionName: StartServerOnce
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - ProbeConnect
    - printf
    - clear
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void StartServerOnce()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:247,1
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:253,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:255,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - channel
    argTypes:
    - brpc::Channel*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 256
    functionName: InitChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 2
    functionsReached:
    - c_str
    - brpc::Channel*::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: int
    signature: int InitChannel(brpc::Channel* channel)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:262,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:263,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:266,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:267,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:268,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:269,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:272,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:275,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - channel
    - ' sql'
    argTypes:
    - brpc::Channel*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 276
    functionName: RunPlainQuery
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlResponse::reply
    - brpc::Controller::Controller
    - brpc::MysqlRequest::Query
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlResponse::reply_size
    - brpc::Channel*::CallMethod
    - brpc::MysqlRequest::MysqlRequest
    linkageType: ''
    returnType: bool
    signature: bool RunPlainQuery(brpc::Channel* channel, const std::string& sql)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:281,1
    - Dst: MysqlPreparedTest::NoServer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:282,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:288,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:291,1
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:296,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:298,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:298,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:299,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:302,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:303,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:304,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:305,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:314,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:314,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 280
    functionDepth: 2
    functionLinenumber: 280
    functionLinenumberEnd: 315
    functionName: MysqlPreparedTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - MysqlPreparedTest::NoServer
    - InitChannel
    - ASSERT_EQ
    - brpc::Channel::Channel
    - c_str
    - RunPlainQuery
    - brpc::ChannelOptions::ChannelOptions
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 317
    functionName: MysqlPreparedTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 328
    functionName: SKIP_IF_NO_SERVER
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SKIP_IF_NO_SERVER()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - sql
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 334
    functionName: PREPARE_OR_FAIL
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PREPARE_OR_FAIL(var, sql)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:338,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:343,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:343,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:346,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:347,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:347,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:350,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:351,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:351,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:354,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:355,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:355,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:360,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:360,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:361,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:363,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:364,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:365,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:365,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:365,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:366,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:366,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:368,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:368,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:369,1
    - Dst: column_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:370,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:370,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 371
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - ASSERT_FALSE
    - brpc::MysqlResponse::reply
    - param_count
    - EXPECT_EQ
    - SKIP_IF_NO_SERVER
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - PREPARE_OR_FAIL
    - is_resultset
    - column_count
    - ASSERT_GE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlResponse::reply_size
    - get
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, ParamCountsAndNoParamSelect)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:377,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:382,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:382,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:384,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:384,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:385,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:386,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:387,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:388,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:388,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:388,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:389,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:389,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:390,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:391,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:392,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:392,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:394,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:394,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:395,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:395,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:401,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:401,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:402,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:403,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:403,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:403,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:404,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:405,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:406,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:407,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:407,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:407,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:408,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:408,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:409,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:410,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:411,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:411,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:412,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:414,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:414,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:414,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:417,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:419,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:419,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:426,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:426,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:427,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:428,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:428,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:429,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:429,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:430,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:431,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:432,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:433,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:433,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:433,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:434,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:434,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:435,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:436,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:437,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:437,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:438,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:440,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:440,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:442,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:442,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:443,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:443,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:444,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:444,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:445,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:445,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:446,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:446,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:446,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:447,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:448,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 450
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - SKIP_IF_NO_SERVER
    - is_nil
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - PREPARE_OR_FAIL
    - is_integer
    - integer
    - is_string
    - next
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - param_count
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, BindAndExecuteIntStringAndArithmetic)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:455,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:459,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:463,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:464,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:465,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:465,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:466,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:467,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:468,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:469,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:469,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:469,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:470,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:470,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:471,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:472,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:473,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:473,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:474,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:475,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:475,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:476,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:476,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:482,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:483,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:484,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:484,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:485,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:486,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:487,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:488,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:488,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:488,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:489,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:489,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:490,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:491,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:492,1
    - Dst: column_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:493,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:493,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:494,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:497,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:498,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:498,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:498,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:503,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:503,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:504,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:504,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:507,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:508,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:508,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:508,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:509,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:509,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:512,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:512,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:513,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:513,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:514,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:514,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:516,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 454
    functionDepth: 1
    functionLinenumber: 454
    functionLinenumberEnd: 518
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - column_count
    - SKIP_IF_NO_SERVER
    - field
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - PREPARE_OR_FAIL
    - is_integer
    - integer
    - is_string
    - next
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - SCOPED_TRACE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, ReExecuteAndTypedColumnFetch)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:523,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:527,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:528,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:529,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:529,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:530,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:531,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:532,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:533,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:533,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:533,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:534,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:534,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:536,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:537,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:537,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:538,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:538,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:544,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:544,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:545,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:546,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:547,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:548,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:549,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:549,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:549,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:550,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:550,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:551,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:552,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:553,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:553,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:554,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 556
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - SKIP_IF_NO_SERVER
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - PREPARE_OR_FAIL
    - next
    - EXPECT_TRUE
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - param_count
    - ASSERT_GE
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, NullColumnAndLiteralNullAreNil)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:562,1
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:566,1
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:571,1
    - Dst: auto::get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:573,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:574,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:575,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:576,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:577,1
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:578,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:579,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:581,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:581,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:582,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:582,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:591,1
    - Dst: auto::param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:591,1
    - Dst: auto::get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:592,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:593,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:594,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:595,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:596,1
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:597,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:598,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:600,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:600,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:601,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:601,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 561
    functionDepth: 1
    functionLinenumber: 561
    functionLinenumberEnd: 606
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlStatement
    - SKIP_IF_NO_SERVER
    - brpc::Controller::Controller
    - auto::get
    - PREPARE_OR_FAIL
    - auto::param_count
    - ASSERT_GE
    - brpc::Controller::Failed
    - SUCCEED
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - ASSERT_EQ
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, MalformedAndParamMismatchSurfaceErrors)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:611,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:612,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:617,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:618,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:619,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:620,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:621,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:622,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:622,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:622,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:623,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:623,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:625,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:626,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:626,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:627,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:629,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:629,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:630,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:630,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:631,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:631,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:632,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:632,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:633,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:633,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:633,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:634,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:638,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:642,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:643,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:644,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:644,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:645,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:646,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:647,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:648,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:648,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:648,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:649,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:649,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:650,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:651,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:651,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - SKIP_IF_NO_SERVER
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - PREPARE_OR_FAIL
    - is_integer
    - integer
    - is_string
    - next
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - SCOPED_TRACE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, StatementReuseAndIndependentStatement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:677,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:712,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:714,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:714,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:715,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:716,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:717,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:718,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:719,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:719,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:719,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:720,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:720,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:721,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:722,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:722,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:723,1
    - Dst: column_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:724,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:724,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:725,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:728,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:728,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:733,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:734,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:735,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:736,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:737,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:737,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 740
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - column_count
    - SKIP_IF_NO_SERVER
    - strlen
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - string
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - PREPARE_OR_FAIL
    - is_string
    - next
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - SCOPED_TRACE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - param_count
    - ASSERT_GE
    - brpc::MysqlResponse::reply_size
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, BinaryTimeAndDateTimeParsing)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:107,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:108,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 111
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 10
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:115,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:117,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:118,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:118,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:119,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:120,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:120,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:121,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 123
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:128,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:133,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:135,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:135,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:136,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:136,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:137,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 142
    functionName: ProbeConnect
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 1
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeConnect()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:151,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:152,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:152,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:152,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:153,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:155,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:160,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:161,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:166,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:167,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:173,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:175,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:178,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:178,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:179,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:180,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:183,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:186,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:187,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:188,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:189,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:190,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:190,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:193,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:195,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:197,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:198,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:200,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:202,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:208,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:210,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:211,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:212,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:216,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:217,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:218,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:222,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:224,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:231,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:234,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:234,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:235,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:238,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:240,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 62
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 242
    functionName: StartServerOnce
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - ProbeConnect
    - printf
    - clear
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void StartServerOnce()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:247,1
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:253,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:255,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:255,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - channel
    argTypes:
    - brpc::Channel*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 246
    functionDepth: 1
    functionLinenumber: 246
    functionLinenumberEnd: 256
    functionName: InitChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 3
    functionsReached:
    - c_str
    - brpc::Channel*::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: int
    signature: int InitChannel(brpc::Channel* channel)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:262,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:263,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:266,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:267,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:268,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:269,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:272,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:275,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - channel
    - ' sql'
    argTypes:
    - brpc::Channel*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 276
    functionName: RunPlainQuery
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::MysqlResponse::reply
    - brpc::Controller::Controller
    - brpc::MysqlRequest::Query
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlResponse::reply_size
    - brpc::Channel*::CallMethod
    - brpc::MysqlRequest::MysqlRequest
    linkageType: ''
    returnType: bool
    signature: bool RunPlainQuery(brpc::Channel* channel, const std::string& sql)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:281,1
    - Dst: MysqlPreparedTest::NoServer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:282,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:288,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:291,1
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:296,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:298,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:298,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:299,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:302,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:303,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:304,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:305,1
    - Dst: RunPlainQuery
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:314,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:314,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 280
    functionDepth: 2
    functionLinenumber: 280
    functionLinenumberEnd: 315
    functionName: MysqlPreparedTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - MysqlPreparedTest::NoServer
    - InitChannel
    - ASSERT_EQ
    - brpc::Channel::Channel
    - c_str
    - RunPlainQuery
    - brpc::ChannelOptions::ChannelOptions
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 317
    functionName: MysqlPreparedTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 328
    functionName: SKIP_IF_NO_SERVER
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: SKIP_IF_NO_SERVER()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - sql
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 334
    functionName: PREPARE_OR_FAIL
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: PREPARE_OR_FAIL(var, sql)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:338,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:342,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:343,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:343,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:346,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:347,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:347,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:350,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:351,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:351,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:354,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:355,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:355,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:359,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:360,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:360,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:361,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:363,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:364,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:365,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:365,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:365,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:366,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:366,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:368,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:368,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:369,1
    - Dst: column_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:369,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:370,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:370,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 371
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 371
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - ASSERT_FALSE
    - brpc::MysqlResponse::reply
    - param_count
    - EXPECT_EQ
    - SKIP_IF_NO_SERVER
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - PREPARE_OR_FAIL
    - is_resultset
    - column_count
    - ASSERT_GE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlResponse::reply_size
    - get
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, ParamCountsAndNoParamSelect)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:377,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:381,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:382,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:382,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:383,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:384,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:384,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:385,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:386,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:387,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:388,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:388,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:388,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:389,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:389,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:390,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:391,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:391,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:392,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:392,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:393,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:394,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:394,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:395,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:395,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:400,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:401,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:401,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:402,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:403,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:403,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:403,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:404,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:405,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:406,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:407,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:407,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:407,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:408,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:408,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:409,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:410,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:410,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:411,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:411,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:412,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:414,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:414,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:414,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:416,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:417,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:417,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:419,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:419,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:426,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:426,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:427,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:428,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:428,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:429,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:429,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:430,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:431,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:432,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:433,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:433,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:433,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:434,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:434,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:435,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:436,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:437,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:437,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:438,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:440,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:440,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:442,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:442,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:443,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:443,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:444,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:444,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:445,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:445,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:446,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:446,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:446,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:447,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:448,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 450
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 450
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - SKIP_IF_NO_SERVER
    - is_nil
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - PREPARE_OR_FAIL
    - is_integer
    - integer
    - is_string
    - next
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - param_count
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, BindAndExecuteIntStringAndArithmetic)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:455,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:459,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:463,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:464,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:465,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:465,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:466,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:467,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:468,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:469,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:469,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:469,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:470,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:470,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:471,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:472,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:473,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:473,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:474,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:475,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:475,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:476,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:476,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:482,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:483,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:484,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:484,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:485,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:486,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:487,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:488,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:488,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:488,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:489,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:489,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:490,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:491,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:491,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:492,1
    - Dst: column_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:492,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:493,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:493,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:494,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:497,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:498,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:498,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:498,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:499,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:502,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:503,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:503,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:504,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:504,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:507,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:508,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:508,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:508,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:509,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:509,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:512,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:512,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:513,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:513,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:514,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:514,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:515,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:516,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 454
    functionDepth: 1
    functionLinenumber: 454
    functionLinenumberEnd: 518
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - column_count
    - SKIP_IF_NO_SERVER
    - field
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - PREPARE_OR_FAIL
    - is_integer
    - integer
    - is_string
    - next
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - SCOPED_TRACE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, ReExecuteAndTypedColumnFetch)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:523,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:527,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:528,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:529,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:529,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:530,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:531,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:532,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:533,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:533,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:533,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:534,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:534,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:536,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:537,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:537,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:538,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:538,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:543,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:544,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:544,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:545,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:546,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:547,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:548,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:549,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:549,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:549,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:550,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:550,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:551,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:552,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:553,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:553,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:554,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 556
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 556
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - SKIP_IF_NO_SERVER
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - PREPARE_OR_FAIL
    - next
    - EXPECT_TRUE
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - param_count
    - ASSERT_GE
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, NullColumnAndLiteralNullAreNil)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:562,1
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:566,1
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:571,1
    - Dst: auto::get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:573,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:574,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:575,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:576,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:577,1
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:578,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:579,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:581,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:581,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:582,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:582,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:590,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:591,1
    - Dst: auto::param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:591,1
    - Dst: auto::get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:592,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:593,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:594,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:595,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:596,1
    - Dst: SUCCEED
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:597,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:598,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:600,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:600,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:601,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:601,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 561
    functionDepth: 1
    functionLinenumber: 561
    functionLinenumberEnd: 606
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlStatement
    - SKIP_IF_NO_SERVER
    - brpc::Controller::Controller
    - auto::get
    - PREPARE_OR_FAIL
    - auto::param_count
    - ASSERT_GE
    - brpc::Controller::Failed
    - SUCCEED
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - ASSERT_EQ
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, MalformedAndParamMismatchSurfaceErrors)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:611,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:612,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:617,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:618,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:619,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:620,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:621,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:622,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:622,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:622,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:623,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:623,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:624,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:625,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:625,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:626,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:626,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:627,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:629,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:629,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:630,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:630,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:631,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:631,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:632,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:632,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:633,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:633,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:633,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:634,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:636,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:638,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:642,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:643,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:644,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:644,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:645,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:646,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:647,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:648,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:648,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:648,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:649,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:649,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:650,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:650,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:651,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:651,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 652
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - SKIP_IF_NO_SERVER
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - PREPARE_OR_FAIL
    - is_integer
    - integer
    - is_string
    - next
    - brpc::MysqlRequest::AddParam
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - SCOPED_TRACE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, StatementReuseAndIndependentStatement)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SKIP_IF_NO_SERVER
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:677,1
    - Dst: SCOPED_TRACE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:712,1
    - Dst: PREPARE_OR_FAIL
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:713,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:714,1
    - Dst: param_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:714,1
    - Dst: get
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:715,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:716,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:717,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:718,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:719,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:719,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:719,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:720,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:720,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:721,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:722,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:722,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:723,1
    - Dst: column_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:723,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:724,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:724,1
    - Dst: next
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:725,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:728,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:728,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:733,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:734,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:735,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:736,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:737,1
    - Dst: strlen
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:737,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 740
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_prepared_integration_unittest.cpp
    functionUses: 0
    functionsReached:
    - column_count
    - SKIP_IF_NO_SERVER
    - strlen
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - string
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - PREPARE_OR_FAIL
    - is_string
    - next
    - get
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - is_resultset
    - SCOPED_TRACE
    - brpc::Controller::Failed
    - row_count
    - brpc::MysqlResponse::MysqlResponse
    - param_count
    - ASSERT_GE
    - brpc::MysqlResponse::reply_size
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPreparedTest, BinaryTimeAndDateTimeParsing)
  - 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: 8
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_LT
    - Dequeue
    - bthread::TaskGroup::usleep
    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
    - Consume
    - butil::MPSCQueue::Enqueue
    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:
    - pthread_join
    - ASSERT_EQ
    - pthread_create
    - butil::MPSCQueue::MPSCQueue
    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:
    - auto::Enqueue
    - fetch_add
    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:
    - ASSERT_FALSE
    - BAIDU_SCOPED_LOCK
    - ASSERT_LT
    - Dequeue
    - bthread::TaskGroup::usleep
    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:
    - pthread_join
    - ASSERT_EQ
    - pthread_create
    - butil::MPSCQueue::MPSCQueue
    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:
    - butil::describe_objects<butil::MPSCQueueNode<MyObject>>
    - ASSERT_EQ
    - butil::ObjectPoolAllocator::Free
    - butil::ObjectPoolAllocator::Alloc
    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: 10
    functionsReached:
    - ASSERT_TRUE
    - ASSERT_EQ
    - ASSERT_LT
    - Dequeue
    - bthread::TaskGroup::usleep
    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
    - Consume
    - butil::MPSCQueue::Enqueue
    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:
    - pthread_join
    - ASSERT_EQ
    - pthread_create
    - butil::MPSCQueue::MPSCQueue
    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:
    - auto::Enqueue
    - fetch_add
    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:
    - ASSERT_FALSE
    - BAIDU_SCOPED_LOCK
    - ASSERT_LT
    - Dequeue
    - bthread::TaskGroup::usleep
    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:
    - pthread_join
    - ASSERT_EQ
    - pthread_create
    - butil::MPSCQueue::MPSCQueue
    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:
    - butil::describe_objects<butil::MPSCQueueNode<MyObject>>
    - ASSERT_EQ
    - butil::ObjectPoolAllocator::Free
    - butil::ObjectPoolAllocator::Alloc
    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_EQ
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::begin
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - SmallMap::end
    - butil::find
    - EXPECT_FALSE
    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: 0
    functionLinenumber: 95
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - begin
    - butil::find
    - end
    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_EQ
    - SmallMap::UsingFullMap
    - EXPECT_TRUE
    - butil::SmallMapEqual
    - EXPECT_FALSE
    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_EQ
    - SmallMap::insert
    - VLOG
    - SmallMap::size
    - SmallMap::empty
    - static_cast<size_t>
    - EXPECT_TRUE
    - SmallMap::find
    - SmallMap::end
    - std::make_pair
    - EXPECT_FALSE
    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_EQ
    - SmallMap::insert
    - hash_map::size
    - hash_map::insert
    - VLOG
    - SmallMap::size
    - hash_map::begin
    - EXPECT_TRUE
    - hash_map::end
    - SmallMap::find
    - SmallMap::end
    - std::make_pair
    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:
    - SmallMap::count
    - SmallMap::clear
    - EXPECT_EQ
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::begin
    - SmallMap::erase
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - SmallMap::end
    - EXPECT_FALSE
    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: 0
    functionLinenumber: 334
    functionLinenumberEnd: 402
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::begin
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - SmallMap::end
    - EXPECT_FALSE
    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: 0
    functionLinenumber: 443
    functionLinenumberEnd: 461
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - SmallMap::count
    - EXPECT_EQ
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    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: 0
    functionLinenumber: 463
    functionLinenumberEnd: 481
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - SmallMap::count
    - EXPECT_EQ
    - hash_map_add_item_initializer
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    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_EQ
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::begin
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - SmallMap::end
    - butil::find
    - EXPECT_FALSE
    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: 0
    functionLinenumber: 95
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - SmallMap::UsingFullMap
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - EXPECT_FALSE
    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:
    - begin
    - butil::find
    - end
    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_EQ
    - SmallMap::UsingFullMap
    - EXPECT_TRUE
    - butil::SmallMapEqual
    - EXPECT_FALSE
    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_EQ
    - SmallMap::insert
    - VLOG
    - SmallMap::size
    - SmallMap::empty
    - static_cast<size_t>
    - EXPECT_TRUE
    - SmallMap::find
    - SmallMap::end
    - std::make_pair
    - EXPECT_FALSE
    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_EQ
    - SmallMap::insert
    - hash_map::size
    - hash_map::insert
    - VLOG
    - SmallMap::size
    - hash_map::begin
    - EXPECT_TRUE
    - hash_map::end
    - SmallMap::find
    - SmallMap::end
    - std::make_pair
    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:
    - SmallMap::count
    - SmallMap::clear
    - EXPECT_EQ
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::begin
    - SmallMap::erase
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - SmallMap::end
    - EXPECT_FALSE
    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: 0
    functionLinenumber: 334
    functionLinenumberEnd: 402
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - SmallMap::UsingFullMap
    - SmallMap::begin
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    - SmallMap::end
    - EXPECT_FALSE
    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: 0
    functionLinenumber: 443
    functionLinenumberEnd: 461
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - SmallMap::count
    - EXPECT_EQ
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    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: 0
    functionLinenumber: 463
    functionLinenumberEnd: 481
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/small_map_unittest.cc
    functionUses: 0
    functionsReached:
    - SmallMap::count
    - EXPECT_EQ
    - hash_map_add_item_initializer
    - SmallMap::size
    - SmallMap::empty
    - EXPECT_TRUE
    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_EQ
    - AllocBlock
    - GetBlockSize
    - GetBlockType
    - EXPECT_TRUE
    - InitBlockPool
    - DeallocBlock
    - DestroyBlockPool
    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:
    - AllocBlock
    - EXPECT_EQ
    - GetBlockSize
    - GetBlockType
    - EXPECT_TRUE
    - DeallocBlock
    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:
    - bthread_join
    - butil::cpuwide_time_us
    - LOG
    - ASSERT_EQ
    - EXPECT_TRUE
    - InitBlockPool
    - DestroyBlockPool
    - bthread_start_background
    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_EQ
    - AllocBlock
    - GetBlockSize
    - EXPECT_TRUE
    - InitBlockPool
    - DeallocBlock
    - DestroyBlockPool
    - GetRegionNum
    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_EQ
    - AllocBlock
    - GetBlockSize
    - EXPECT_TRUE
    - GetRegionId
    - InitBlockPool
    - DeallocBlock
    - DestroyBlockPool
    - GetRegionNum
    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:
    - AllocBlock
    - EXPECT_EQ
    - GetBlockSize
    - EXPECT_TRUE
    - InitBlockPool
    - DeallocBlock
    - DestroyBlockPool
    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:
    - AllocBlock
    - EXPECT_TRUE
    - InitBlockPool
    - DeallocBlock
    - DestroyBlockPool
    - DumpMemoryPoolInfo
    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:
    - Socket::SetFailed
    - ASSERT_FALSE
    - brpc::NewCallback
    - brpc::Controller::NotifyOnCancel
    - brpc::Controller::Controller
    - Socket::Create
    - ASSERT_TRUE
    - Socket::SetSocketOptions
    - ASSERT_EQ
    - usleep
    - brpc::Controller::IsCanceled
    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_FALSE
    - brpc::NewCallback
    - brpc::Controller::Controller
    - Socket::Create
    - ASSERT_TRUE
    - Socket::SetSocketOptions
    - ASSERT_EQ
    - brpc::Controller*::IsCanceled
    - brpc::Controller*::NotifyOnCancel
    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: 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: 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:
    - CLOGE
    - logging::StringSink::clear
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - SetLogSink
    - brpc::Controller::set_request_id
    - CLOGW
    - startsWith
    - brpc::Controller::set_log_id
    - ASSERT_EQ
    - brpc::Controller::SessionKV
    - endsWith
    linkageType: ''
    returnType: void
    signature: void TEST_F(ControllerTest, SessionKV)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:34,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 36
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - RUN_ALL_TESTS
    - testing::InitGoogleTest
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:49,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:51,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:51,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:55,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:56,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:58,1
    - Dst: brpc::policy::ParseCouchbaseMessage
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:59,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 62
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - brpc::policy::ParseCouchbaseMessage
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, RejectOversizedResponseBeforeBufferingBody)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:65,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::Clear
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:66,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::helloRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:67,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::authenticateRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:68,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::selectBucketRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:69,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:70,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::getRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:71,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::upsertRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:72,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::deleteRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:73,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 75
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::CouchbaseRequest::addRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::deleteRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::getRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::Clear
    - brpc::CouchbaseOperations::CouchbaseRequest::helloRequest
    - EXPECT_TRUE
    - brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::upsertRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::authenticateRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::selectBucketRequest
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, RequestBuilders)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:88,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:96,1
    - Dst: brpc::CouchbaseOperations::Result::error_message::empty
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:97,1
    - Dst: brpc::CouchbaseOperations::Result::value::empty
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::Result::value::empty
    - EXPECT_EQ
    - brpc::CouchbaseOperations::Result::error_message::empty
    - EXPECT_TRUE
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, ResultStruct)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:113,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:114,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:115,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:117,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::popManifest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:119,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:119,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:119,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:123,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:124,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:125,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:127,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::popCollectionId
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:128,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:128,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 129
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
    - brpc::CouchbaseOperations::CouchbaseResponse::popManifest
    - EXPECT_EQ
    - brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
    - brpc::CouchbaseOperations::CouchbaseResponse::popCollectionId
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, CollectionResponseWithInconsistentBodyLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:132,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:133,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:134,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:135,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:136,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:136,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:137,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:138,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_TRUE
    - brpc::CouchbaseOperations::CouchbaseRequest::addRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, EdgeCases)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:49,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:49,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:51,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:51,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:55,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:56,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:58,1
    - Dst: brpc::policy::ParseCouchbaseMessage
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:59,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 62
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - brpc::policy::ParseCouchbaseMessage
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, RejectOversizedResponseBeforeBufferingBody)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:65,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::Clear
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:66,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::helloRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:67,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::authenticateRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:68,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::selectBucketRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:69,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:70,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::getRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:71,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::upsertRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:72,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::deleteRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:73,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 75
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::CouchbaseRequest::addRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::deleteRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::getRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::Clear
    - brpc::CouchbaseOperations::CouchbaseRequest::helloRequest
    - EXPECT_TRUE
    - brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::upsertRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::authenticateRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::selectBucketRequest
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, RequestBuilders)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:85,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:86,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:87,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:88,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:95,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:96,1
    - Dst: brpc::CouchbaseOperations::Result::error_message::empty
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:96,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:97,1
    - Dst: brpc::CouchbaseOperations::Result::value::empty
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:97,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 99
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::Result::value::empty
    - EXPECT_EQ
    - brpc::CouchbaseOperations::Result::error_message::empty
    - EXPECT_TRUE
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, ResultStruct)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:113,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:114,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:115,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:117,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::popManifest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:118,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:119,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:119,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:119,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:123,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:124,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:125,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:127,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::popCollectionId
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:128,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:128,1
    - Dst: brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 129
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
    - brpc::CouchbaseOperations::CouchbaseResponse::popManifest
    - EXPECT_EQ
    - brpc::CouchbaseOperations::CouchbaseResponse::rawBuffer
    - brpc::CouchbaseOperations::CouchbaseResponse::popCollectionId
    - std::string::size
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, CollectionResponseWithInconsistentBodyLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:132,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:133,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:134,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:135,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:136,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:136,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:137,1
    - Dst: brpc::CouchbaseOperations::CouchbaseRequest::addRequest
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:138,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_couchbase_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 131
    functionDepth: 1
    functionLinenumber: 131
    functionLinenumberEnd: 140
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_couchbase_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - EXPECT_TRUE
    - brpc::CouchbaseOperations::CouchbaseRequest::addRequest
    - brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    linkageType: ''
    returnType: void
    signature: void TEST_F(CouchbaseUnitTest, EdgeCases)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:38,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_memcache_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_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - RUN_ALL_TESTS
    - testing::InitGoogleTest
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:50,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:52,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:52,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:56,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:57,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:59,1
    - Dst: brpc::policy::ParseMemcacheMessage
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:60,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseMemcacheMessage
    - EXPECT_EQ
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void TEST(MemcacheParserTest, RejectOversizedResponseBeforeBufferingBody)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:80,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:81,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:84,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:87,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:88,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:89,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:92,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:93,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 94
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::raw_buffer
    - ASSERT_FALSE
    - brpc::MemcacheResponse::PopSet
    - ASSERT_EQ
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheResponse::LastError
    linkageType: ''
    returnType: void
    signature: void TEST(MemcacheParserTest, PopStoreRejectsNegativeValueSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:100,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:103,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:105,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:107,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:107,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 110
    functionName: RemoveMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMemcached()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:118,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:119,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:125,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:126,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:130,1
    - Dst: fork
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:132,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:134,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:137,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:141,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:142,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:143,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:147,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 148
    functionName: RunMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - execvp
    - system
    - usleep
    - puts
    - exit
    - atexit
    - fork
    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: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    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: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: 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: 157
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    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:162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:165,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:168,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:168,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:169,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:170,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:171,1
    - Dst: brpc::MemcacheRequest::Flush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:175,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:176,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:177,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:177,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:178,1
    - Dst: brpc::MemcacheResponse::PopFlush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:178,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:180,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:181,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:182,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:183,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:188,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:189,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:189,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:191,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:192,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:193,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:194,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:196,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:196,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:197,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:197,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:199,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:200,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:201,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:202,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:203,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:204,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:205,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:207,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:210,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:211,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:212,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:214,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:219,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:221,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:223,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:224,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:224,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:224,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:226,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:226,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 229
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Clear
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::MemcacheRequest::Flush
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::MemcacheRequest::Set
    - brpc::Channel::Channel
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheResponse::PopFlush
    - brpc::Controller::Failed
    - brpc::MemcacheResponse::PopSet
    - brpc::MemcacheRequest::Get
    - puts
    - brpc::MemcacheResponse::LastError
    - brpc::ChannelOptions::ChannelOptions
    - brpc::MemcacheResponse::PopGet
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:233,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:236,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:239,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:239,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:240,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:241,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:242,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:243,1
    - Dst: brpc::MemcacheRequest::Decrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:244,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:245,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:246,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:247,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:247,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:250,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:254,1
    - Dst: brpc::MemcacheResponse::PopDecrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:258,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::CallMethod
    - brpc::MemcacheRequest::Decrement
    - brpc::Controller::Failed
    - brpc::MemcacheResponse::PopDecrement
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::MemcacheRequest::Increment
    - brpc::Channel::Channel
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::MemcacheRequest
    - puts
    - brpc::MemcacheResponse::PopIncrement
    - brpc::ChannelOptions::ChannelOptions
    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:268,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:271,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:274,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:274,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:275,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:276,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:277,1
    - Dst: brpc::MemcacheRequest::Version
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:278,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:279,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:280,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:280,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:282,1
    - Dst: brpc::MemcacheResponse::PopVersion
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:282,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 284
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::MemcacheResponse::PopVersion
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::MemcacheResponse::LastError
    - brpc::Channel::Channel
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::MemcacheRequest
    - puts
    - brpc::MemcacheRequest::Version
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:50,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:50,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:52,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:52,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:56,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:57,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:58,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:59,1
    - Dst: brpc::policy::ParseMemcacheMessage
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:60,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:61,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 63
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseMemcacheMessage
    - EXPECT_EQ
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::HostToNet32
    linkageType: ''
    returnType: void
    signature: void TEST(MemcacheParserTest, RejectOversizedResponseBeforeBufferingBody)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:80,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:81,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:84,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:87,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:87,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:88,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:88,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:89,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:89,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:92,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:92,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:93,1
    - Dst: brpc::MemcacheResponse::raw_buffer
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 94
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheResponse::raw_buffer
    - ASSERT_FALSE
    - brpc::MemcacheResponse::PopSet
    - ASSERT_EQ
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheResponse::LastError
    linkageType: ''
    returnType: void
    signature: void TEST(MemcacheParserTest, PopStoreRejectsNegativeValueSize)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:100,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:103,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:105,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:107,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:107,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 110
    functionName: RemoveMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMemcached()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:117,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:118,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:119,1
    - Dst: system
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:125,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:126,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:130,1
    - Dst: fork
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:132,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:134,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:135,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:137,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:141,1
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:142,1
    - Dst: exit
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:143,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:147,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 148
    functionName: RunMemcached
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - execvp
    - system
    - usleep
    - puts
    - exit
    - atexit
    - fork
    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: 152
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 152
    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: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: 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: 157
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    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:162,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:165,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:168,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:168,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:169,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:170,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:171,1
    - Dst: brpc::MemcacheRequest::Flush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:175,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:176,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:177,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:177,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:177,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:178,1
    - Dst: brpc::MemcacheResponse::PopFlush
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:178,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:180,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:181,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:182,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:183,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:184,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:188,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:189,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:189,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:191,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:192,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:193,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:194,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:195,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:196,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:196,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:196,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:197,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:197,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:199,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:200,1
    - Dst: brpc::MemcacheRequest::Get
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:201,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:202,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:203,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:203,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:204,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:204,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:205,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:207,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:210,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:211,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:212,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:214,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:215,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:217,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:219,1
    - Dst: brpc::MemcacheRequest::Clear
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:220,1
    - Dst: brpc::MemcacheRequest::Set
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:221,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:223,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:224,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:224,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:224,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:226,1
    - Dst: brpc::MemcacheResponse::PopSet
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:226,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:228,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 160
    functionDepth: 1
    functionLinenumber: 160
    functionLinenumberEnd: 229
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MemcacheRequest::Clear
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::MemcacheRequest::Flush
    - brpc::Channel::CallMethod
    - brpc::Controller::Reset
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::MemcacheRequest::Set
    - brpc::Channel::Channel
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::MemcacheRequest
    - brpc::MemcacheResponse::PopFlush
    - brpc::Controller::Failed
    - brpc::MemcacheResponse::PopSet
    - brpc::MemcacheRequest::Get
    - puts
    - brpc::MemcacheResponse::LastError
    - brpc::ChannelOptions::ChannelOptions
    - brpc::MemcacheResponse::PopGet
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, sanity)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:233,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:236,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:239,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:239,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:240,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:241,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:242,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:243,1
    - Dst: brpc::MemcacheRequest::Decrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:244,1
    - Dst: brpc::MemcacheRequest::Increment
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:245,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:246,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:247,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:247,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:247,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:250,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:250,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:254,1
    - Dst: brpc::MemcacheResponse::PopDecrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:255,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:258,1
    - Dst: brpc::MemcacheResponse::PopIncrement
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::CallMethod
    - brpc::MemcacheRequest::Decrement
    - brpc::Controller::Failed
    - brpc::MemcacheResponse::PopDecrement
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::MemcacheRequest::Increment
    - brpc::Channel::Channel
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::MemcacheRequest
    - puts
    - brpc::MemcacheResponse::PopIncrement
    - brpc::ChannelOptions::ChannelOptions
    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:268,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:271,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:274,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:274,1
    - Dst: brpc::MemcacheRequest::MemcacheRequest
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:275,1
    - Dst: brpc::MemcacheResponse::MemcacheResponse
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:276,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:277,1
    - Dst: brpc::MemcacheRequest::Version
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:278,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:279,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:280,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:280,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:280,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:282,1
    - Dst: brpc::MemcacheResponse::PopVersion
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:282,1
    - Dst: brpc::MemcacheResponse::LastError
      Src: /src/brpc/test/brpc_memcache_unittest.cpp:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 284
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_memcache_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::CallMethod
    - brpc::Controller::Failed
    - brpc::MemcacheResponse::PopVersion
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::MemcacheResponse::LastError
    - brpc::Channel::Channel
    - brpc::MemcacheResponse::MemcacheResponse
    - brpc::MemcacheRequest::MemcacheRequest
    - puts
    - brpc::MemcacheRequest::Version
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(MemcacheTest, version)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: testing::InitGoogleTest
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:48,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:49,1
    - Dst: brpc::GlobalInitializeOrDie
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:50,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 52
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::GlobalInitializeOrDie
    - 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: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    functionName: EchoServiceImpl::EchoServiceImpl
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 35
    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: 61
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 61
    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:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:69,1
    - Dst: test::EchoRequest*::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:69,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:70,1
    - Dst: brpc::Controller*::is_ssl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:70,1
    - Dst: test::EchoResponse*::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:72,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:74,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:74,1
    - Dst: brpc::Controller*::request_protocol
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:75,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:76,1
    - Dst: test::EchoRequest*::sleep_us
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:76,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: 78
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 78
    functionName: EchoServiceImpl::Echo
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - test::EchoRequest*::sleep_us
    - test::EchoRequest*::message
    - fetch_add
    - LOG
    - EXPECT_TRUE
    - brpc::Controller*::is_ssl
    - brpc::Controller*::request_protocol
    - 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: 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::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: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    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:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 95
    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:99,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:102,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:104,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:106,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:106,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - channel
    - count
    argTypes:
    - brpc::Channel*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: SendMultipleRPC
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - test::EchoResponse::message
    - brpc::Controller::Controller
    - test::EchoService_Stub::Echo
    - brpc::Controller::ErrorText
    - 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:113,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:114,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:119,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:122,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:124,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:124,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:128,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:130,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      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: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:133,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:134,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:134,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:136,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:139,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:139,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:139,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:147,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      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: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:150,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:151,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:151,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:154,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:155,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:155,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:158,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:163,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:164,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:166,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:167,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:168,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:168,1
    - Dst: brpc::NewCallback
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:172,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:172,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:175,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:179,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:180,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:180,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 181
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ServerOptions::mutable_ssl_options
    - pthread_join
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - pthread_create
    - brpc::Controller::Controller
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - brpc::Server::Server
    - EXPECT_EQ
    - brpc::Server::Start
    - brpc::ChannelOptions::mutable_ssl_options
    - brpc::ChannelOptions::ChannelOptions
    - brpc::NewCallback
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    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:185,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:186,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:188,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:188,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:192,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:192,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:197,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:199,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:199,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:202,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:204,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      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: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:208,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:208,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:210,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:213,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:214,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:214,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:214,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:219,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:219,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:221,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:224,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:225,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:228,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:228,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:229,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 230
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ServerOptions::mutable_ssl_options
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - brpc::Server::Server
    - brpc::Server::Start
    - brpc::Controller::Failed
    - brpc::ChannelOptions::mutable_ssl_options
    - brpc::ChannelOptions::ChannelOptions
    - test::EchoResponse::message
    - brpc::Server::AddService
    - test::EchoService_Stub::Echo
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, force_ssl)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:235,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:236,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:238,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:240,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:241,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:243,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:246,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:246,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:247,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:247,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:247,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:251,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:252,1
    - Dst: test::EchoService_Stub::Echo
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:254,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:256,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:256,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:256,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:257,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:257,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:259,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:259,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 4
    argNames:
    - port
    - server_address
    - expected_peer_name
    - expect_success
    argTypes:
    - int
    - char*
    - char*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 261
    functionName: CallServerWithExpectedPeerName
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - std::string::c_str
    - brpc::Controller::Controller
    - EXPECT_EQ
    - test::EchoResponse::message
    - test::EchoService_Stub::Echo
    - std::string::append
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - test::EchoRequest::set_message
    - brpc::ChannelOptions::mutable_ssl_options
    - std::to_string
    - brpc::ChannelOptions::ChannelOptions
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: "void CallServerWithExpectedPeerName(int port, const char* server_address,\n
      \                                   const char* expected_peer_name,\n                                    bool
      expect_success)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:265,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:266,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: CallServerWithExpectedPeerName
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:277,1
    - Dst: CallServerWithExpectedPeerName
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:278,1
    - Dst: CallServerWithExpectedPeerName
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:282,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:283,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:283,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 263
    functionDepth: 2
    functionLinenumber: 263
    functionLinenumberEnd: 284
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::AddService
    - brpc::Server::Start
    - CallServerWithExpectedPeerName
    - brpc::ServerOptions::mutable_ssl_options
    - ASSERT_EQ
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Stop
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, verify_peer_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:287,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:289,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:289,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:293,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 294
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 294
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - EXPECT_EQ
    - brpc::CreateClientSSLContext
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, expected_peer_name_requires_peer_verification)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:299,1
    - Dst: brpc::SupportsPeerNameVerification
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:299,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:301,1
    - Dst: brpc::SupportsPeerNameVerification
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:301,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 303
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SupportsPeerNameVerification
    - EXPECT_TRUE
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, peer_name_verification_capability)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:309,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:309,1
    - Dst: brpc::policy::RpcMeta::response
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:311,1
    - Dst: brpc::policy::RpcResponseMeta::error_code
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:311,1
    - Dst: brpc::policy::RpcResponseMeta::error_text
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:311,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:313,1
    - Dst: brpc::policy::RpcMeta::correlation_id
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:313,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:315,1
    - Dst: bthread_id_lock
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:315,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:316,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:317,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:317,1
    - Dst: brpc::Controller*::response
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:318,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 319
    functionName: ProcessResponse
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - brpc::policy::RpcMeta::correlation_id
    - ASSERT_NE
    - brpc::policy::RpcMeta::response
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - brpc::policy::RpcResponseMeta::error_text
    - brpc::ParsePbFromIOBuf
    - bthread_id_lock
    - brpc::policy::RpcResponseMeta::error_code
    - brpc::Controller*::response
    - 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:327,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:327,1
    - Dst: brpc::InputMessenger::InputMessenger
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:333,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:334,1
    - Dst: brpc::InputMessenger::AddHandler
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:334,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:337,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:338,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:344,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:347,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:347,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:349,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:349,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:358,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:359,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:360,1
    - Dst: std::make_shared<brpc::SocketSSLContext>
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:362,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:367,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:367,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:369,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:369,1
    - Dst: test::EchoRequest::set_message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:372,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:375,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:376,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:377,1
    - Dst: brpc::Controller::call_id
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:379,1
    - Dst: brpc::SerializeRequestDefault
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:380,1
    - Dst: brpc::PackRpcRequest
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:381,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:384,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:384,1
    - Dst: brpc::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:385,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:386,1
    - Dst: test::EchoResponse::message
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:386,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:389,1
    - Dst: brpc::SocketUniquePtr::reset
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:391,1
    - Dst: brpc::Server::Stop
      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::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:392,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 393
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ServerOptions::mutable_ssl_options
    - ASSERT_EQ
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::SocketUniquePtr::reset
    - brpc::SocketUniquePtr::Write
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - brpc::InputMessenger::InputMessenger
    - brpc::PackRpcRequest
    - brpc::Controller::Controller
    - Socket::Create
    - test::EchoRequest::set_message
    - brpc::Server::Stop
    - brpc::Controller::call_id
    - brpc::Server::Server
    - brpc::CreateClientSSLContext
    - brpc::Server::Start
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - brpc::SerializeRequestDefault
    - RegisterProtocol
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Join
    - test::EchoResponse::message
    - brpc::Server::AddService
    - std::make_shared<brpc::SocketSSLContext>
    - ASSERT_NE
    - brpc::InputMessenger::AddHandler
    - butil::IOBuf::IOBuf
    - brpc::ServerOptions::ServerOptions
    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:397,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:398,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:399,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:400,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:400,1
    - Dst: SendMultipleRPC
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:402,1
    - Dst: brpc::SocketMapList
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:405,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:406,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:408,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:408,1
    - Dst: brpc::SocketUniquePtr::GetPeerCertificate
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:411,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:414,1
    - Dst: X509_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 2
    argNames:
    - cname
    - cert
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 395
    functionDepth: 1
    functionLinenumber: 395
    functionLinenumberEnd: 416
    functionName: CheckCert
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Channel::Init
    - brpc::SocketUniquePtr::GetPeerCertificate
    - brpc::ExtractHostnames
    - ASSERT_TRUE
    - brpc::SocketMapList
    - X509_free
    - brpc::SetTrackMeAddress
    - ASSERT_EQ
    - brpc::Channel::Channel
    - std::vector::size
    - brpc::ChannelOptions::mutable_ssl_options
    - SendMultipleRPC
    - brpc::ChannelOptions::ChannelOptions
    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:421,1
    - Dst: fileno
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:421,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:423,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - fname
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 425
    functionName: GetRawPemString
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - read
    - fileno
    - std::string::append
    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:431,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:432,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:437,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:438,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:442,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:443,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:444,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:445,1
    - Dst: push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:445,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:448,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:448,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:450,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:450,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:452,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:453,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:454,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:456,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 429
    functionDepth: 2
    functionLinenumber: 429
    functionLinenumberEnd: 458
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - brpc::Server::AddService
    - brpc::Server::Start
    - brpc::ServerOptions::mutable_ssl_options
    - brpc::CertInfo::sni_filters::push_back
    - CheckCert
    - GetRawPemString
    - ASSERT_EQ
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::Stop
    - push_back
    - brpc::ServerOptions::ServerOptions
    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:462,1
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:463,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:468,1
    - Dst: brpc::ServerOptions::mutable_ssl_options
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:469,1
    - Dst: EchoServiceImpl::EchoServiceImpl
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:471,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:472,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:472,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:474,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:474,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:476,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:479,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:480,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:481,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:482,1
    - Dst: brpc::Server::AddCertificate
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:482,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:484,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:488,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:490,1
    - Dst: brpc::Server::RemoveCertificate
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:490,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:492,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:496,1
    - Dst: GetRawPemString
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:497,1
    - Dst: brpc::CertInfo::sni_filters::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:498,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:500,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:501,1
    - Dst: brpc::Server::ResetCertificates
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:501,1
    - Dst: CheckCert
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:503,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:505,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:506,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 460
    functionDepth: 2
    functionLinenumber: 460
    functionLinenumberEnd: 507
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::Server
    - std::vector::push_back
    - brpc::Server::AddService
    - brpc::Server::Start
    - brpc::ServerOptions::mutable_ssl_options
    - brpc::Server::ResetCertificates
    - brpc::CertInfo::sni_filters::push_back
    - CheckCert
    - GetRawPemString
    - brpc::Server::Stop
    - brpc::Server::AddCertificate
    - ASSERT_EQ
    - brpc::Server::Join
    - EchoServiceImpl::EchoServiceImpl
    - brpc::Server::RemoveCertificate
    - brpc::ServerOptions::ServerOptions
    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:516,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:516,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:519,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:520,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:522,1
    - Dst: SSL_write
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:524,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:527,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:528,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:529,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 532
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 532
    functionName: ssl_perf_client
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - EXPECT_EQ
    - SSL_write
    - LOG
    - SSL_do_handshake
    - butil::Timer::start
    - 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:536,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:536,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:538,1
    - Dst: SSL_read
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:541,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 545
      start: 534
    functionDepth: 0
    functionLinenumber: 534
    functionLinenumberEnd: 545
    functionName: ssl_perf_server
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - SSL_read
    - SSL_do_handshake
    - EXPECT_EQ
    - ARRAY_SIZE
    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:550,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:551,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:552,1
    - Dst: accept
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:553,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:554,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:556,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:557,1
    - Dst: brpc::CreateServerSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:559,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:560,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:561,1
    - Dst: SSL_set_tlsext_host_name
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:563,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:568,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:569,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:570,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:571,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:571,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:573,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:574,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:575,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:576,1
    - Dst: close
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:577,1
    - Dst: close
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:578,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 547
    functionDepth: 1
    functionLinenumber: 547
    functionLinenumberEnd: 579
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - tcp_connect
    - pthread_create
    - close
    - brpc::CreateClientSSLContext
    - brpc::CreateServerSSLContext
    - pthread_join
    - SSL_set_tlsext_host_name
    - brpc::CreateSSLSession
    - ASSERT_EQ
    - ASSERT_GT
    - SSL_free
    - SSL_CTX_free
    - accept
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, ssl_perf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:586,1
    - Dst: SSL_do_handshake
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:586,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 588
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 588
    functionName: tls13_do_handshake
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - SSL_do_handshake
    - EXPECT_EQ
    linkageType: ''
    returnType: void
    signature: void * tls13_do_handshake(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:594,1
    - Dst: tcp_connect
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:595,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:596,1
    - Dst: accept
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:597,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:598,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:600,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:602,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:603,1
    - Dst: brpc::CreateServerSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:605,1
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:606,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:607,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:608,1
    - Dst: SSL_set_tlsext_host_name
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:610,1
    - Dst: brpc::CreateSSLSession
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:612,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:613,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:614,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:617,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:617,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:618,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:619,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:619,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:620,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:620,1
    - Dst: SSL_get_version
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:622,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:623,1
    - Dst: EXPECT_STREQ
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:624,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:626,1
    - Dst: SSL_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:627,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:628,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:629,1
    - Dst: close
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:630,1
    - Dst: close
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:631,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 632
      start: 590
    functionDepth: 1
    functionLinenumber: 590
    functionLinenumberEnd: 632
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - tcp_connect
    - pthread_create
    - ASSERT_TRUE
    - brpc::CreateClientSSLContext
    - close
    - brpc::CreateServerSSLContext
    - SSL_get_version
    - ASSERT_NE
    - SSL_set_tlsext_host_name
    - pthread_join
    - EXPECT_STREQ
    - brpc::CreateSSLSession
    - ASSERT_EQ
    - ASSERT_GT
    - SSL_free
    - SSL_CTX_free
    - accept
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, tls13_protocol_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:637,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:639,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:640,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_ssl_unittest.cpp:641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 642
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_ssl_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - SSL_CTX_free
    - ASSERT_TRUE
    - brpc::CreateClientSSLContext
    linkageType: ''
    returnType: void
    signature: void TEST_F(SSLTest, tls13_protocol_string)
  - 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
    - write
    - ASSERT_GT
    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:
    - butil::fd_guard::reset
    - ASSERT_EQ
    - open
    - write
    - ASSERT_GT
    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:
    - butil::fd_guard::release
    - ASSERT_EQ
    - open
    - ASSERT_GT
    - 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
    - write
    - ASSERT_GT
    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:
    - butil::fd_guard::reset
    - ASSERT_EQ
    - open
    - write
    - ASSERT_GT
    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:
    - butil::fd_guard::release
    - ASSERT_EQ
    - open
    - ASSERT_GT
    - 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:
    - insert
    - bthread::clear
    - EXPECT_EQ
    - ListOfABAFreeId::add
    - ListOfABAFreeId::get_sizes
    - size
    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:
    - insert
    - bthread::clear
    - EXPECT_EQ
    - ListOfABAFreeId::add
    - ListOfABAFreeId::get_sizes
    - size
    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:
    - EXPECT_EQ
    - const_cast<int*>
    - reinterpret_cast<DWORD*>
    - butil::GetModuleFromAddress
    - ::GetModuleHandle
    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
    - GetProcAddress
    - EXPECT_LE
    - EXPECT_NE
    - EXPECT_GT
    - ASSERT_NE
    - reinterpret_cast<HeapQueryFn>
    - GetProcessHeaps
    - GetModuleHandle
    - getenv
    - butil::EnableLowFragmentationHeap
    - heap_query
    - IsDebuggerPresent
    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:
    - malloc
    - ASSERT_EXIT
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::debug::Alias
    - testing::KilledBySignal
    - butil::EnableTerminationOnOutOfMemory
    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:
    - operator new
    - SetUpInDeathAssert
    - ASSERT_DEATH
    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:
    - SetUpInDeathAssert
    - char::char
    - ASSERT_DEATH
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - malloc
    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:
    - SetUpInDeathAssert
    - realloc
    - ASSERT_DEATH
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - calloc
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - valloc
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - pvalloc
    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:
    - memalign
    - SetUpInDeathAssert
    - ASSERT_DEATH
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - EXPECT_EQ
    - posix_memalign
    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
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - malloc_default_purgeable_zone
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - malloc_default_purgeable_zone
    - malloc_zone_realloc
    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
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - malloc_default_purgeable_zone
    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:
    - SetUpInDeathAssert
    - malloc_zone_valloc
    - ASSERT_DEATH
    - malloc_default_purgeable_zone
    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:
    - SetUpInDeathAssert
    - malloc_zone_memalign
    - ASSERT_DEATH
    - malloc_default_purgeable_zone
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - butil::AllocateViaCFAllocatorSystemDefault
    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:
    - SetUpInDeathAssert
    - butil::AllocateViaCFAllocatorMalloc
    - ASSERT_DEATH
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - butil::AllocateViaCFAllocatorMallocZone
    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:
    - SetUpInDeathAssert
    - ASSERT_DEATH
    - butil::AllocatePsychoticallyBigObjCObject
    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:
    - butil::UncheckedMalloc
    - EXPECT_TRUE
    - 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_EQ
    - butil::UncheckedCalloc
    - free
    - EXPECT_TRUE
    - static_cast<const char*>
    - EXPECT_FALSE
    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:
    - static_cast<void*>
    - EXPECT_EQ
    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:
    - static_cast<void*>
    - EXPECT_EQ
    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:
    - ZeroTestCounters
    - butil::AtExitManager::RegisterCallback
    - EXPECT_EQ
    - butil::AtExitManager::ProcessCallbacksNow
    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:
    - ZeroTestCounters
    - butil::AtExitManager::RegisterCallback
    - EXPECT_EQ
    - butil::AtExitManager::ProcessCallbacksNow
    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::RegisterCallback
    - butil::AtExitManager::ProcessCallbacksNow
    linkageType: ''
    returnType: void
    signature: void TEST_F(AtExitTest, Param)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:112,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:113,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 116
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 12
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:120,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:122,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:123,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:123,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:124,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:125,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:125,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:126,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:126,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: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:132,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:137,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:139,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:139,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:140,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:140,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:141,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:142,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 146
    functionName: ProbeConnect
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 2
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeConnect()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:154,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:155,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:155,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:156,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:158,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:161,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:162,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:167,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:168,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:174,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:175,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:178,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:178,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:179,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:180,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:183,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:186,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:187,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:188,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:189,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:190,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:190,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:193,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:195,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:197,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:198,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:200,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:202,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:209,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:211,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:212,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:213,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:217,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:218,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:219,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:223,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:225,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:228,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:230,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 232
    functionName: StartServerOnce
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - ProbeConnect
    - printf
    - clear
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void StartServerOnce()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:240,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:243,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:250,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - channel
    - out_auth
    argTypes:
    - brpc::Channel*
    - brpc::policy::MysqlAuthenticator**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 251
    functionName: InitShortChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - c_str
    - brpc::Channel*::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: int
    signature: "int InitShortChannel(brpc::Channel* channel,\n                            brpc::policy::MysqlAuthenticator**
      out_auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 256
    functionName: MysqlConnectionTypeTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:259,1
    - Dst: MysqlConnectionTypeTest::NoServer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:260,1
    - Dst: GTEST_SKIP
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:266,1
    - Dst: InitShortChannel
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:266,1
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:267,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 268
    functionName: MysqlConnectionTypeTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - GTEST_SKIP
    - MysqlConnectionTypeTest::NoServer
    - ASSERT_EQ
    - reset
    - InitShortChannel
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:292,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:292,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:296,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:296,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:298,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:299,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:300,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:302,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:302,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:302,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:303,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:303,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:304,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:304,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:307,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:308,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:308,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:310,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:312,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:312,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:313,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:313,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:314,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:314,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:315,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:315,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:316,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:316,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:316,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:318,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 320
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlStatementUniquePtr::param_count
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - is_integer
    - integer
    - is_string
    - brpc::MysqlRequest::AddParam
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - brpc::NewMysqlStatement
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlConnectionTypeTest, PreparedStatementUnderShortRePreparesAndSucceeds)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:328,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:329,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:329,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:331,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:332,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:333,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:335,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:335,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:335,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:336,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:336,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:337,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:337,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:339,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:340,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:340,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:342,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:344,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:344,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:345,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:345,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:346,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:346,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:347,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:347,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:348,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:348,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:348,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:350,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 351
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - brpc::MysqlRequest::Query
    - ASSERT_FALSE
    - string
    - is_bigint
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - is_integer
    - integer
    - is_string
    - brpc::MysqlRequest::MysqlRequest
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlConnectionTypeTest, PlainQueryUnderShortMustSucceed)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:112,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:113,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:115,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 116
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 14
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:120,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:122,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:123,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:123,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:124,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:125,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:125,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:126,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:126,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: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:132,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:137,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:139,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:139,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:140,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:140,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:141,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:142,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 146
    functionName: ProbeConnect
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 3
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeConnect()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:154,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:155,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:155,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:156,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:158,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:161,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:162,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:167,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:168,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:174,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:175,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:178,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:178,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:179,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:180,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:183,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:186,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:186,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:187,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:188,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:189,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:190,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:190,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:193,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:195,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:197,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:198,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:200,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:202,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:209,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:211,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:212,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:213,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:217,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:218,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:219,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:223,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:225,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:228,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:230,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 232
    functionName: StartServerOnce
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - ProbeConnect
    - printf
    - clear
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void StartServerOnce()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:240,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:243,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:250,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - channel
    - out_auth
    argTypes:
    - brpc::Channel*
    - brpc::policy::MysqlAuthenticator**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 237
    functionDepth: 1
    functionLinenumber: 237
    functionLinenumberEnd: 251
    functionName: InitShortChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 1
    functionsReached:
    - c_str
    - brpc::Channel*::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: int
    signature: "int InitShortChannel(brpc::Channel* channel,\n                            brpc::policy::MysqlAuthenticator**
      out_auth)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 256
    functionName: MysqlConnectionTypeTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:259,1
    - Dst: MysqlConnectionTypeTest::NoServer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:260,1
    - Dst: GTEST_SKIP
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:261,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:266,1
    - Dst: InitShortChannel
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:266,1
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:267,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 258
    functionDepth: 2
    functionLinenumber: 258
    functionLinenumberEnd: 268
    functionName: MysqlConnectionTypeTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - GTEST_SKIP
    - MysqlConnectionTypeTest::NoServer
    - ASSERT_EQ
    - reset
    - InitShortChannel
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:290,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:291,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:292,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:292,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:295,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:296,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:296,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:298,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:299,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:300,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:302,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:302,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:302,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:303,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:303,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:304,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:304,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:307,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:308,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:308,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:310,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:312,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:312,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:313,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:313,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:314,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:314,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:315,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:315,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:316,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:316,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:316,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:317,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:318,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 320
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlStatementUniquePtr::param_count
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - ASSERT_FALSE
    - string
    - is_bigint
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - is_integer
    - integer
    - is_string
    - brpc::MysqlRequest::AddParam
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - brpc::NewMysqlStatement
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlConnectionTypeTest, PreparedStatementUnderShortRePreparesAndSucceeds)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:328,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:329,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:329,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:331,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:332,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:333,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:335,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:335,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:335,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:336,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:336,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:337,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:337,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:338,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:339,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:339,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:340,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:340,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:342,1
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:344,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:344,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:345,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:345,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:346,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:346,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:347,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:347,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:348,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:348,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:348,1
    - Dst: FAIL
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:349,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp:350,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 351
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_connection_type_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - is_sinteger
    - FAIL
    - sbigint
    - is_sbigint
    - brpc::MysqlRequest::Query
    - ASSERT_FALSE
    - string
    - is_bigint
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - is_integer
    - integer
    - is_string
    - brpc::MysqlRequest::MysqlRequest
    - CallMethod
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - bigint
    - atoll
    - ASSERT_GE
    - sinteger
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlConnectionTypeTest, PlainQueryUnderShortMustSucceed)
  - 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: 18
    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:
    - EXPECT_EQ
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    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:
    - brpc::policy::PublicPbrpcServiceAdaptor::PublicPbrpcServiceAdaptor
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoRequest::SerializeToString
    - EXPECT_TRUE
    - brpc::policy::PublicPbrpcRequest*::mutable_requestbody
    - test::EchoRequest::set_message
    - brpc::policy::PublicPbrpcRequest*::SerializeToZeroCopyStream
    - brpc::policy::PublicPbrpcRequest*::requestbody_size
    - brpc::policy::MostCommonMessage*::meta::append
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::set_message
    - brpc::policy::PublicPbrpcResponse*::mutable_responsebody
    - brpc::policy::PublicPbrpcResponse*::responsebody_size
    - EXPECT_TRUE
    - test::EchoResponse::SerializeToString
    - brpc::policy::MostCommonMessage*::meta::append
    - brpc::policy::PublicPbrpcResponse*::SerializeToZeroCopyStream
    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:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - brpc::policy::PublicPbrpcResponse::responsehead
    - EXPECT_GT
    - EXPECT_TRUE
    - ioctl
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::policy::PublicPbrpcResponse::ParseFromZeroCopyStream
    - butil::IOPortal::append_from_file_descriptor
    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:
    - brpc::policy::RequestBody*::set_service
    - SetFailed
    - brpc::policy::RequestBody*::set_id
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    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:
    - brpc::policy::RequestBody*::set_service
    - brpc::policy::RequestBody*::set_id
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    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:
    - brpc::policy::RequestBody*::set_service
    - ASSERT_FALSE
    - brpc::policy::RequestBody*::set_id
    - ProcessMessage
    - Failed
    - brpc::policy::RequestBody*::set_method_id
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    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:
    - brpc::policy::ResponseBody*::set_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - Failed
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_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:
    - brpc::policy::ResponseBody*::set_id
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_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:
    - butil::IOPortal::IOPortal
    - brpc::Controller::set_request_compress_type
    - ASSERT_EQ
    - brpc::policy::PackPublicPbrpcRequest
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::Controller::call_id
    - ProcessMessage
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - VerifyMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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_FALSE
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - Failed
    - brpc::Controller::Failed
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::policy::PackPublicPbrpcRequest
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - test::EchoRequest::set_close_fd
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::Controller::call_id
    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: 18
    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:
    - EXPECT_EQ
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    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:
    - brpc::policy::PublicPbrpcServiceAdaptor::PublicPbrpcServiceAdaptor
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoRequest::SerializeToString
    - EXPECT_TRUE
    - brpc::policy::PublicPbrpcRequest*::mutable_requestbody
    - test::EchoRequest::set_message
    - brpc::policy::PublicPbrpcRequest*::SerializeToZeroCopyStream
    - brpc::policy::PublicPbrpcRequest*::requestbody_size
    - brpc::policy::MostCommonMessage*::meta::append
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::set_message
    - brpc::policy::PublicPbrpcResponse*::mutable_responsebody
    - brpc::policy::PublicPbrpcResponse*::responsebody_size
    - EXPECT_TRUE
    - test::EchoResponse::SerializeToString
    - brpc::policy::MostCommonMessage*::meta::append
    - brpc::policy::PublicPbrpcResponse*::SerializeToZeroCopyStream
    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:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - brpc::policy::PublicPbrpcResponse::responsehead
    - EXPECT_GT
    - EXPECT_TRUE
    - ioctl
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::policy::PublicPbrpcResponse::ParseFromZeroCopyStream
    - butil::IOPortal::append_from_file_descriptor
    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:
    - brpc::policy::RequestBody*::set_service
    - SetFailed
    - brpc::policy::RequestBody*::set_id
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    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:
    - brpc::policy::RequestBody*::set_service
    - brpc::policy::RequestBody*::set_id
    - ProcessMessage
    - brpc::policy::RequestBody*::set_method_id
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    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:
    - brpc::policy::RequestBody*::set_service
    - ASSERT_FALSE
    - brpc::policy::RequestBody*::set_id
    - ProcessMessage
    - Failed
    - brpc::policy::RequestBody*::set_method_id
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    - brpc::policy::PublicPbrpcRequest::add_requestbody
    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:
    - brpc::policy::ResponseBody*::set_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - Failed
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_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:
    - brpc::policy::ResponseBody*::set_id
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::policy::PublicPbrpcResponse::add_responsebody
    - brpc::policy::PublicPbrpcResponse::mutable_responsehead
    - brpc::Controller::ErrorCode
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_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:
    - butil::IOPortal::IOPortal
    - brpc::Controller::set_request_compress_type
    - ASSERT_EQ
    - brpc::policy::PackPublicPbrpcRequest
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::Controller::call_id
    - ProcessMessage
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - VerifyMessage
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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_FALSE
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - Failed
    - brpc::Controller::Failed
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::policy::PackPublicPbrpcRequest
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - test::EchoRequest::set_close_fd
    - brpc::policy::SerializePublicPbrpcRequest
    - brpc::Controller::call_id
    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:
    - srand
    - time
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - strlen
    - ASSERT_NE
    - ASSERT_EQ
    - strncmp
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - ASSERT_EQ
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - strlen
    - ASSERT_EQ
    - strncmp
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - strlen
    - ASSERT_EQ
    - strncmp
    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_FALSE
    - ASSERT_TRUE
    - strlen
    - butil::StringMultiSplitter::length
    - ASSERT_EQ
    - strncmp
    - butil::StringMultiSplitter::field
    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:
    - butil::StringSplitter::to_longlong
    - butil::StringSplitter::to_int8
    - ASSERT_TRUE
    - butil::StringSplitter::to_long
    - butil::StringSplitter::to_ulong
    - ASSERT_FLOAT_EQ
    - butil::StringSplitter::to_ulonglong
    - ASSERT_EQ
    - butil::StringSplitter::to_float
    - butil::StringSplitter::to_double
    - butil::StringSplitter::to_uint
    - butil::StringSplitter::to_int
    - butil::StringSplitter::to_uint8
    - ASSERT_DOUBLE_EQ
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - ASSERT_EQ
    - 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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - strlen
    - butil::StringSplitter::field
    - memcpy
    - ASSERT_EQ
    - char::char
    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_FALSE
    - std::string::c_str
    - ASSERT_TRUE
    - ASSERT_EQ
    - key
    - value
    - std::string::data
    - butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    - 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:
    - srand
    - time
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - strlen
    - ASSERT_NE
    - ASSERT_EQ
    - strncmp
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - ASSERT_EQ
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - strlen
    - ASSERT_EQ
    - strncmp
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - strlen
    - ASSERT_EQ
    - strncmp
    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_FALSE
    - ASSERT_TRUE
    - strlen
    - butil::StringMultiSplitter::length
    - ASSERT_EQ
    - strncmp
    - butil::StringMultiSplitter::field
    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:
    - butil::StringSplitter::to_longlong
    - butil::StringSplitter::to_int8
    - ASSERT_TRUE
    - butil::StringSplitter::to_long
    - butil::StringSplitter::to_ulong
    - ASSERT_FLOAT_EQ
    - butil::StringSplitter::to_ulonglong
    - ASSERT_EQ
    - butil::StringSplitter::to_float
    - butil::StringSplitter::to_double
    - butil::StringSplitter::to_uint
    - butil::StringSplitter::to_int
    - butil::StringSplitter::to_uint8
    - ASSERT_DOUBLE_EQ
    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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - butil::StringSplitter::field
    - ASSERT_EQ
    - 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_FALSE
    - butil::StringSplitter::length
    - ASSERT_TRUE
    - strlen
    - butil::StringSplitter::field
    - memcpy
    - ASSERT_EQ
    - char::char
    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_FALSE
    - std::string::c_str
    - ASSERT_TRUE
    - ASSERT_EQ
    - key
    - value
    - std::string::data
    - butil::KeyValuePairsSplitter::KeyValuePairsSplitter
    - 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
    - stat
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    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:
    - butil::TempFile::save
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - butil::TempFile::TempFile
    - 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:
    - butil::TempFile::save
    - strerror
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - ASSERT_EQ
    - stat
    - butil::TempFile::fname
    - ASSERT_STREQ
    - fopen
    - fgets
    - strrchr
    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:
    - std::string::c_str
    - ASSERT_EQ
    - stat
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    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
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - butil::TempFile::fname
    - fopen
    - butil::TempFile::TempFile
    - 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
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - butil::TempFile::fname
    - memset
    - fopen
    - butil::TempFile::TempFile
    - 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:
    - bzero
    - ASSERT_NE
    - fclose
    - fread
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - butil::TempFile::save_bin
    - butil::TempFile::TempFile
    - memcmp
    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
    - stat
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    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:
    - butil::TempFile::save
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - butil::TempFile::TempFile
    - 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:
    - butil::TempFile::save
    - strerror
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - ASSERT_EQ
    - stat
    - butil::TempFile::fname
    - ASSERT_STREQ
    - fopen
    - fgets
    - strrchr
    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:
    - std::string::c_str
    - ASSERT_EQ
    - stat
    - butil::TempFile::fname
    - butil::TempFile::TempFile
    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
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - butil::TempFile::fname
    - fopen
    - butil::TempFile::TempFile
    - 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
    - ASSERT_NE
    - fclose
    - EXPECT_STREQ
    - butil::TempFile::fname
    - memset
    - fopen
    - butil::TempFile::TempFile
    - 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:
    - bzero
    - ASSERT_NE
    - fclose
    - fread
    - ASSERT_EQ
    - butil::TempFile::fname
    - fopen
    - butil::TempFile::save_bin
    - butil::TempFile::TempFile
    - memcmp
    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: 23
    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:
    - CallbackSingletonWithLeakTrait::GetInstance
    - Delete
    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: 23
    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:
    - CallbackSingletonWithLeakTrait::GetInstance
    - Delete
    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:
    - DeleteLeakySingleton
    - EXPECT_EQ
    - SingletonLeak
    - SingletonNoLeak
    - GetLeakySingleton
    - Resurrect
    - EXPECT_TRUE
    - GetStaticSingleton
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - SingletonStatic
    - VerifiesCallbacks
    - SingletonInt
    - SingletonInt5
    - VerifiesCallbacksNotCalled
    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:
    - static_cast<PlayerArg*>
    - pthread_numeric_id
    - read
    - write
    - printf
    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
    - static_cast<PlayerArg*>
    - bthread::futex_wait_private
    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_wake
    - static_cast<PlayerArg*>
    - bthread::butex_wait
    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:
    - sleep
    - pthread_create
    - butil::Timer::stop
    - pipe
    - ASSERT_TRUE
    - printf
    - AlignedIntWrapper::AlignedIntWrapper
    - bthread::butex_create_checked<int>
    - bthread::butex_wake
    - ASSERT_EQ
    - bthread::futex_wake_private
    - PlayerArg::PlayerArg
    - butil::Timer::start
    - write
    - signal
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_background
    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:
    - static_cast<PlayerArg*>
    - pthread_numeric_id
    - read
    - write
    - printf
    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
    - static_cast<PlayerArg*>
    - bthread::futex_wait_private
    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_wake
    - static_cast<PlayerArg*>
    - bthread::butex_wait
    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:
    - sleep
    - pthread_create
    - butil::Timer::stop
    - pipe
    - ASSERT_TRUE
    - printf
    - AlignedIntWrapper::AlignedIntWrapper
    - bthread::butex_create_checked<int>
    - bthread::butex_wake
    - ASSERT_EQ
    - bthread::futex_wake_private
    - PlayerArg::PlayerArg
    - butil::Timer::start
    - write
    - signal
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - bthread_start_background
    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_FALSE
    - std::string::c_str
    - ASSERT_TRUE
    - brpc::URI::host
    - brpc::URI::scheme
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - brpc::URI::user_info
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::ParseURL
    - brpc::URI::port
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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_TRUE
    - brpc::URI::host
    - brpc::URI::scheme
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - brpc::URI::user_info
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::URI::QueryCount
    - brpc::URI::port
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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_TRUE
    - brpc::URI::host
    - brpc::URI::scheme
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - brpc::URI::user_info
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::URI::port
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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_TRUE
    - brpc::URI::host
    - brpc::URI::scheme
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - brpc::URI::user_info
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::URI::port
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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_FALSE
    - brpc::URI::status
    - brpc::URI::set_path
    - ASSERT_TRUE
    - brpc::URI::host
    - brpc::URI::scheme
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - brpc::URI::user_info
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::URI::port
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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_FALSE
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::URI::GetQuery
    - 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_EQ
    - brpc::URI::GetQuery
    - brpc::URI::URI
    - ASSERT_TRUE
    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
    - brpc::URI::SetQuery
    - ASSERT_EQ
    - brpc::URI::GetQuery
    - 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_TRUE
    - brpc::URI::SetH2Path
    - brpc::URI::path
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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::RemoveQuery
    - ASSERT_TRUE
    - brpc::URI::query
    - brpc::URI::SetH2Path
    - brpc::URI::path
    - brpc::URI::GenerateH2Path
    - ASSERT_EQ
    - brpc::URI::SetQuery
    - brpc::URI::QueryCount
    - brpc::URI::fragment
    - brpc::URI::GetQuery
    - brpc::URI::URI
    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_EQ
    - brpc::URI::GetQuery
    - brpc::URI::URI
    - ASSERT_TRUE
    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:
    - brpc::URI::host
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - ASSERT_EQ
    - brpc::URI::URI
    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:
    - brpc::URI::status
    - brpc::URI::SetHttpURL
    - ASSERT_EQ
    - ASSERT_STREQ
    - brpc::URI::URI
    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:311,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:314,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:314,1
    - Dst: brpc::URI::status
      Src: /src/brpc/test/brpc_uri_unittest.cpp:314,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:315,1
    - Dst: brpc::URI::host
      Src: /src/brpc/test/brpc_uri_unittest.cpp:315,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:316,1
    - Dst: brpc::URI::path
      Src: /src/brpc/test/brpc_uri_unittest.cpp:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:317,1
    - Dst: brpc::URI::query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:317,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:318,1
    - Dst: brpc::URI::fragment
      Src: /src/brpc/test/brpc_uri_unittest.cpp:318,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:323,1
    - Dst: brpc::ParseURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:323,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 306
    functionDepth: 1
    functionLinenumber: 306
    functionLinenumberEnd: 326
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::status
    - std::string::c_str
    - brpc::URI::host
    - brpc::URI::query
    - brpc::URI::SetHttpURL
    - brpc::URI::path
    - ASSERT_EQ
    - brpc::URI::fragment
    - brpc::ParseURL
    - brpc::URI::URI
    linkageType: ''
    returnType: void
    signature: void TEST(URITest, high_bit_bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::URI::URI
      Src: /src/brpc/test/brpc_uri_unittest.cpp:329,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:332,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:332,1
    - Dst: brpc::URI::Print
      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
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:336,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/test/brpc_uri_unittest.cpp:337,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:338,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:338,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
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:342,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_uri_unittest.cpp:343,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:344,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:344,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:345,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/test/brpc_uri_unittest.cpp:346,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:347,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:347,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:349,1
    - Dst: brpc::URI::SetQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:351,1
    - Dst: brpc::URI::RemoveQuery
      Src: /src/brpc/test/brpc_uri_unittest.cpp:351,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:352,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/test/brpc_uri_unittest.cpp:353,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:354,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:354,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:355,1
    - Dst: brpc::URI::PrintWithoutHost
      Src: /src/brpc/test/brpc_uri_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:357,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_uri_unittest.cpp:357,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 358
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::URI::RemoveQuery
    - brpc::URI::SetHttpURL
    - brpc::URI::PrintWithoutHost
    - ASSERT_EQ
    - brpc::URI::SetQuery
    - std::ostringstream::str
    - brpc::URI::URI
    - brpc::URI::Print
    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:361,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:363,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 365
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:371,1
    - Dst: brpc::QueryRemover::key
      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::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:374,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:375,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:375,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:377,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:377,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:378,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:378,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 381
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::value
    - brpc::QueryRemover::key
    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:386,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:387,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:388,1
    - Dst: brpc::QueryRemover::modified_query
      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:390,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:392,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:393,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:394,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:394,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:396,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:397,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:398,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:398,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 401
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    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:407,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:410,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:411,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:414,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:415,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 416
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    - ASSERT_TRUE
    - brpc::QueryRemover::modified_query
    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:422,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:426,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:429,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:434,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 435
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    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:440,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      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::modified_query
      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:444,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:445,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:445,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:447,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:448,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:448,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:450,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 451
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::remove_current_key_and_value
    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:456,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:457,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:457,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:458,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:460,1
    - Dst: brpc::QueryRemover::key
      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::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:461,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:463,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:463,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:464,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:464,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:467,1
    - Dst: brpc::QueryRemover::key
      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::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:468,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:471,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 453
    functionDepth: 1
    functionLinenumber: 453
    functionLinenumberEnd: 472
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::value
    - brpc::QueryRemover::remove_current_key_and_value
    - brpc::QueryRemover::key
    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:477,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:478,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:478,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:479,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:479,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:480,1
    - Dst: ASSERT_FALSE
      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::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:483,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 484
      start: 474
    functionDepth: 1
    functionLinenumber: 474
    functionLinenumberEnd: 484
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::value
    - brpc::QueryRemover::remove_current_key_and_value
    - brpc::QueryRemover::key
    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:489,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:490,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:490,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:491,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:491,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_uri_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:496,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:496,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 486
    functionDepth: 1
    functionLinenumber: 486
    functionLinenumberEnd: 497
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::value
    - brpc::QueryRemover::key
    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:502,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:504,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:504,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:505,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:505,1
    - Dst: brpc::QueryRemover::remove_current_key_and_value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:506,1
    - Dst: brpc::QueryRemover::modified_query
      Src: /src/brpc/test/brpc_uri_unittest.cpp:507,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:509,1
    - Dst: brpc::QueryRemover::key
      Src: /src/brpc/test/brpc_uri_unittest.cpp:509,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:510,1
    - Dst: brpc::QueryRemover::value
      Src: /src/brpc/test/brpc_uri_unittest.cpp:510,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 499
    functionDepth: 1
    functionLinenumber: 499
    functionLinenumberEnd: 511
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_uri_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::QueryRemover::modified_query
    - ASSERT_TRUE
    - ASSERT_EQ
    - brpc::QueryRemover::value
    - brpc::QueryRemover::remove_current_key_and_value
    - brpc::QueryRemover::key
    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:514,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_uri_unittest.cpp:515,1
    - Dst: brpc::URI::SetHttpURL
      Src: /src/brpc/test/brpc_uri_unittest.cpp:515,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 513
    functionDepth: 1
    functionLinenumber: 513
    functionLinenumberEnd: 516
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - StringTokenizer::Reset
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::token_is_delim
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - StringTokenizer::Reset
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::token_is_delim
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - StringTokenizer::Reset
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::token_is_delim
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - StringTokenizer::Reset
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::token_is_delim
    - StringTokenizer::set_options
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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:
    - string
    - StringTokenizer::token
    - EXPECT_EQ
    - StringTokenizer::set_quote_chars
    - EXPECT_TRUE
    - StringTokenizer::GetNext
    - EXPECT_FALSE
    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: 18
    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:
    - EXPECT_EQ
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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
    - EXPECT_TRUE
    - brpc::policy::VerifySofaRequest
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - SerializeToZeroCopyStream
    - test::EchoRequest::SerializeToZeroCopyStream
    - EXPECT_TRUE
    - 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:
    - test::EchoResponse::set_message
    - SerializeToZeroCopyStream
    - EXPECT_TRUE
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::SerializeToZeroCopyStream
    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:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - EXPECT_GT
    - EXPECT_TRUE
    - ioctl
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - brpc::policy::SofaRpcMeta::error_code
    - brpc::policy::SofaRpcMeta::ParseFromZeroCopyStream
    - brpc::policy::ParseSofaMessage
    - 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_FALSE
    - brpc::policy::PackSofaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - SofaTest::CheckResponseCode
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - SofaTest::ProcessMessage
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::call_id
    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:
    - SetFailed
    - ProcessMessage
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_type
    - _nerror_bvar::get_value
    - brpc::policy::SofaRpcMeta::set_sequence_id
    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:
    - ProcessMessage
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_type
    - _nerror_bvar::get_value
    - brpc::policy::SofaRpcMeta::set_sequence_id
    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:
    - ProcessMessage
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_type
    - _nerror_bvar::get_value
    - brpc::policy::SofaRpcMeta::set_sequence_id
    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:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - MakeResponseMessage
    - ASSERT_EQ
    - brpc::policy::SofaRpcMeta::set_error_code
    - brpc::policy::SofaRpcMeta::set_type
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::Controller::call_id
    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_FALSE
    - butil::IOPortal::IOPortal
    - brpc::policy::PackSofaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::call_id
    - 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_FALSE
    - brpc::policy::PackSofaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - Failed
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_close_fd
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::call_id
    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: 18
    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:
    - EXPECT_EQ
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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
    - EXPECT_TRUE
    - brpc::policy::VerifySofaRequest
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - SerializeToZeroCopyStream
    - test::EchoRequest::SerializeToZeroCopyStream
    - EXPECT_TRUE
    - 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:
    - test::EchoResponse::set_message
    - SerializeToZeroCopyStream
    - EXPECT_TRUE
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::SerializeToZeroCopyStream
    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:
    - butil::IOPortal::IOPortal
    - EXPECT_EQ
    - EXPECT_GT
    - EXPECT_TRUE
    - ioctl
    - static_cast<brpc::policy::MostCommonMessage*>
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - brpc::policy::SofaRpcMeta::error_code
    - brpc::policy::SofaRpcMeta::ParseFromZeroCopyStream
    - brpc::policy::ParseSofaMessage
    - 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_FALSE
    - brpc::policy::PackSofaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - SofaTest::CheckResponseCode
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::Failed
    - SofaTest::ProcessMessage
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::call_id
    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:
    - SetFailed
    - ProcessMessage
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_type
    - _nerror_bvar::get_value
    - brpc::policy::SofaRpcMeta::set_sequence_id
    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:
    - ProcessMessage
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_type
    - _nerror_bvar::get_value
    - brpc::policy::SofaRpcMeta::set_sequence_id
    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:
    - ProcessMessage
    - CheckResponseCode
    - ASSERT_EQ
    - MakeRequestMessage
    - brpc::policy::SofaRpcMeta::set_method
    - brpc::policy::SofaRpcMeta::set_type
    - _nerror_bvar::get_value
    - brpc::policy::SofaRpcMeta::set_sequence_id
    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:
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::policy::SofaRpcMeta::set_type
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - brpc::Controller::Controller
    - ProcessMessage
    - brpc::Controller::ErrorCode
    - MakeResponseMessage
    - ASSERT_EQ
    - brpc::policy::SofaRpcMeta::set_error_code
    - brpc::policy::SofaRpcMeta::set_type
    - brpc::policy::SofaRpcMeta::set_sequence_id
    - brpc::Controller::call_id
    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_FALSE
    - butil::IOPortal::IOPortal
    - brpc::policy::PackSofaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - VerifyMessage
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::call_id
    - 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_FALSE
    - brpc::policy::PackSofaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ProcessMessage
    - Failed
    - brpc::Controller::Failed
    - ASSERT_EQ
    - test::EchoRequest::set_message
    - brpc::ParseResult::error
    - brpc::ParseResult::message
    - brpc::SerializeRequestDefault
    - test::EchoRequest::set_close_fd
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseSofaMessage
    - brpc::Controller::call_id
    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:
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - TrivialThread::did_run
    - 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_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - butil::PlatformThread::Create
    - did_run
    - arraysize
    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:
    - EXPECT_EQ
    - butil::PlatformThread::CurrentId
    - butil::PlatformThread::YieldCurrentThread
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Sleep
    - butil::TrivialThread::ThreadMain
    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_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - EXPECT_EQ
    - EXPECT_NE
    - FunctionTestThread::did_run
    - butil::PlatformThread::CurrentId
    - butil::PlatformThread::Create
    - 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_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - thread_id
    - EXPECT_EQ
    - EXPECT_NE
    - butil::PlatformThread::CurrentId
    - did_run
    - butil::PlatformThread::Create
    - arraysize
    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:
    - ASSERT_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - TrivialThread::did_run
    - 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_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - butil::PlatformThread::Create
    - did_run
    - arraysize
    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:
    - EXPECT_EQ
    - butil::PlatformThread::CurrentId
    - butil::PlatformThread::YieldCurrentThread
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Sleep
    - butil::TrivialThread::ThreadMain
    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_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - EXPECT_EQ
    - EXPECT_NE
    - FunctionTestThread::did_run
    - butil::PlatformThread::CurrentId
    - butil::PlatformThread::Create
    - 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_FALSE
    - butil::PlatformThread::Join
    - ASSERT_TRUE
    - thread_id
    - EXPECT_EQ
    - EXPECT_NE
    - butil::PlatformThread::CurrentId
    - did_run
    - butil::PlatformThread::Create
    - arraysize
    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: 18
    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:
    - EXPECT_EQ
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - brpc::policy::NovaServiceAdaptor::NovaServiceAdaptor
    - AddService
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoRequest::SerializeToZeroCopyStream
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::MostCommonMessage*::meta::append
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::set_message
    - EXPECT_TRUE
    - memset
    - brpc::policy::MostCommonMessage*::meta::append
    - test::EchoResponse::SerializeToZeroCopyStream
    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:
    - SetFailed
    - ProcessMessage
    - CheckEmptyResponse
    - ASSERT_EQ
    - memset
    - MakeRequestMessage
    - _nerror_bvar::get_value
    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_TRUE
    - ProcessMessage
    - CheckEmptyResponse
    - Failed
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    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_TRUE
    - ProcessMessage
    - CheckEmptyResponse
    - Failed
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    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:
    - set_correlation_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - id
    - brpc::Controller::call_id
    - ProcessMessage
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - brpc::SerializeRequestDefault
    - VerifyMessage
    - brpc::policy::PackNovaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - id
    - brpc::Controller::call_id
    - ProcessMessage
    - Failed
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - brpc::SerializeRequestDefault
    - brpc::policy::PackNovaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoRequest::set_close_fd
    - butil::IOBuf::IOBuf
    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: 18
    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:
    - EXPECT_EQ
    - brpc::Controller*::CloseConnection
    - ::test::EchoRequest*::message
    - static_cast<brpc::Controller*>
    - ::test::EchoRequest*::close_fd
    - ::test::EchoResponse*::set_message
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - brpc::policy::NovaServiceAdaptor::NovaServiceAdaptor
    - AddService
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoRequest::SerializeToZeroCopyStream
    - EXPECT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::MostCommonMessage*::meta::append
    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:
    - TestRpcPBMessageFactory::Get
    - test::EchoResponse::set_message
    - EXPECT_TRUE
    - memset
    - brpc::policy::MostCommonMessage*::meta::append
    - test::EchoResponse::SerializeToZeroCopyStream
    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:
    - SetFailed
    - ProcessMessage
    - CheckEmptyResponse
    - ASSERT_EQ
    - memset
    - MakeRequestMessage
    - _nerror_bvar::get_value
    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_TRUE
    - ProcessMessage
    - CheckEmptyResponse
    - Failed
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    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_TRUE
    - ProcessMessage
    - CheckEmptyResponse
    - Failed
    - ASSERT_EQ
    - MakeRequestMessage
    - _nerror_bvar::get_value
    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:
    - set_correlation_id
    - brpc::Controller::Controller
    - test::EchoResponse::message
    - ProcessMessage
    - ASSERT_TRUE
    - Failed
    - ASSERT_EQ
    - MakeResponseMessage
    - brpc::Controller::call_id
    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:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - id
    - brpc::Controller::call_id
    - ProcessMessage
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - brpc::SerializeRequestDefault
    - VerifyMessage
    - brpc::policy::PackNovaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoResponse::message
    - butil::IOBuf::IOBuf
    - butil::IOPortal::append_from_file_descriptor
    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::ParseResult::message
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - test::EchoRequest::set_message
    - brpc::policy::ParseNsheadMessage
    - id
    - brpc::Controller::call_id
    - ProcessMessage
    - Failed
    - brpc::SetTrackMeAddress
    - brpc::Controller::Failed
    - brpc::ParseResult::error
    - brpc::SerializeRequestDefault
    - brpc::policy::PackNovaRequest
    - pbrpcframework::get_prototype_by_method_descriptor
    - test::EchoRequest::set_close_fd
    - butil::IOBuf::IOBuf
    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:
    - memcpy
    - std::min
    - size
    - data
    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:
    - butil::Record::Meta
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::Record::RemoveMeta
    - butil::Record::MetaCount
    - ASSERT_EQ
    - 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:
    - butil::Record::Meta
    - butil::IOBuf*::append
    - ASSERT_TRUE
    - butil::Record::MutableMeta
    - butil::Record::RemoveMeta
    - butil::Record::MetaCount
    - ASSERT_EQ
    - butil::IOBuf*::empty
    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:
    - ASSERT_FALSE
    - butil::IOBuf*::append
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::RecordWriter::Flush
    - butil::Record::MutableMeta
    - butil::RecordReader::offset
    - butil::Record::MetaCount
    - butil::RecordWriter::Write
    - ASSERT_EQ
    - butil::Record::MutablePayload
    - butil::Record::MetaAt
    - StringWriter::str
    - butil::RecordReader::ReadNext
    - butil::PrintedAsBinary
    - butil::Record::Payload
    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:
    - ASSERT_FALSE
    - butil::IOBuf*::append
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::RecordWriter::Flush
    - butil::Record::MutableMeta
    - butil::RecordReader::offset
    - butil::Record::MetaCount
    - butil::RecordWriter::Write
    - ASSERT_EQ
    - butil::Record::MetaAt
    - StringWriter::str
    - butil::RecordReader::ReadNext
    - butil::PrintedAsBinary
    - std::string::size
    - butil::Record::Payload
    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:
    - std::string::reserve
    - butil::fast_rand_in
    - std::string::push_back
    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::WriteFile
    - butil::RecordWriter::Flush
    - butil::Record::MutableMeta
    - butil::RecordReader::offset
    - ASSERT_EQ
    - std::vector::size
    - std::make_pair
    - std::map::end
    - ASSERT_TRUE
    - rand_string
    - butil::Record::MetaCount
    - butil::RecordReader::ReadNext
    - std::vector::push_back
    - std::map::begin
    - butil::FilePath
    - butil::fast_rand_less_than
    - butil::RecordWriter::Write
    - butil::Record::MetaAt
    - butil::RecordReader::last_error
    - butil::Record::ByteSize
    - ASSERT_LE
    - StringWriter::str
    - ASSERT_LT
    - butil::string_printf
    - std::string::data
    - std::map::size
    - std::string::size
    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:
    - memcpy
    - std::min
    - size
    - data
    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:
    - butil::Record::Meta
    - ASSERT_FALSE
    - ASSERT_TRUE
    - butil::Record::RemoveMeta
    - butil::Record::MetaCount
    - ASSERT_EQ
    - 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:
    - butil::Record::Meta
    - butil::IOBuf*::append
    - ASSERT_TRUE
    - butil::Record::MutableMeta
    - butil::Record::RemoveMeta
    - butil::Record::MetaCount
    - ASSERT_EQ
    - butil::IOBuf*::empty
    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:
    - ASSERT_FALSE
    - butil::IOBuf*::append
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::RecordWriter::Flush
    - butil::Record::MutableMeta
    - butil::RecordReader::offset
    - butil::Record::MetaCount
    - butil::RecordWriter::Write
    - ASSERT_EQ
    - butil::Record::MutablePayload
    - butil::Record::MetaAt
    - StringWriter::str
    - butil::RecordReader::ReadNext
    - butil::PrintedAsBinary
    - butil::Record::Payload
    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:
    - ASSERT_FALSE
    - butil::IOBuf*::append
    - ASSERT_TRUE
    - butil::RecordReader::last_error
    - butil::RecordWriter::Flush
    - butil::Record::MutableMeta
    - butil::RecordReader::offset
    - butil::Record::MetaCount
    - butil::RecordWriter::Write
    - ASSERT_EQ
    - butil::Record::MetaAt
    - StringWriter::str
    - butil::RecordReader::ReadNext
    - butil::PrintedAsBinary
    - std::string::size
    - butil::Record::Payload
    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:
    - std::string::reserve
    - butil::fast_rand_in
    - std::string::push_back
    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::WriteFile
    - butil::RecordWriter::Flush
    - butil::Record::MutableMeta
    - butil::RecordReader::offset
    - ASSERT_EQ
    - std::vector::size
    - std::make_pair
    - std::map::end
    - ASSERT_TRUE
    - rand_string
    - butil::Record::MetaCount
    - butil::RecordReader::ReadNext
    - std::vector::push_back
    - std::map::begin
    - butil::FilePath
    - butil::fast_rand_less_than
    - butil::RecordWriter::Write
    - butil::Record::MetaAt
    - butil::RecordReader::last_error
    - butil::Record::ByteSize
    - ASSERT_LE
    - StringWriter::str
    - ASSERT_LT
    - butil::string_printf
    - std::string::data
    - std::map::size
    - std::string::size
    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:
    - EXPECT_EQ
    - ::brpc::policy::MongoResponse*::mutable_header
    - length
    - ::brpc::policy::MongoResponse*::set_message
    - ::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:
    - butil::IOBuf*::append
    - static_cast<const void*>
    - length
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - brpc::policy::MostCommonMessage*::meta::append
    - brpc::policy::MostCommonMessage*::payload::append
    - TestRpcPBMessageFactory::Get
    - length
    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*>
    - ProcessMessage
    - butil::IOBuf::append
    - length
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - _nerror_bvar::get_value
    - get
    - brpc::policy::ParseMongoMessage
    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:
    - SetFailed
    - static_cast<const void*>
    - ProcessMessage
    - butil::IOBuf::append
    - length
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - _nerror_bvar::get_value
    - get
    - brpc::policy::ParseMongoMessage
    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:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::ParseResult::message
    - butil::IOBuf::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - static_cast<const void*>
    - length
    - ASSERT_STREQ
    - get
    - c_str
    - ProcessMessage
    - static_cast<const brpc::mongo_head_t*>
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - brpc::ParseResult::error
    - butil::IOPortal::cutn
    - butil::IOPortal::fetch
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseMongoMessage
    - butil::IOPortal::append_from_file_descriptor
    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:
    - EXPECT_EQ
    - ::brpc::policy::MongoResponse*::mutable_header
    - length
    - ::brpc::policy::MongoResponse*::set_message
    - ::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:
    - butil::IOBuf*::append
    - static_cast<const void*>
    - length
    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:
    - pipe
    - EXPECT_EQ
    - Socket::Create
    - brpc::SetTrackMeAddress
    - AddService
    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:
    - ReAddress
    - SetEOF
    - PostponeEOF
    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:
    - brpc::policy::MostCommonMessage*::meta::append
    - brpc::policy::MostCommonMessage*::payload::append
    - TestRpcPBMessageFactory::Get
    - length
    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*>
    - ProcessMessage
    - butil::IOBuf::append
    - length
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - _nerror_bvar::get_value
    - get
    - brpc::policy::ParseMongoMessage
    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:
    - SetFailed
    - static_cast<const void*>
    - ProcessMessage
    - butil::IOBuf::append
    - length
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - brpc::ParseResult::message
    - brpc::ParseResult::error
    - _nerror_bvar::get_value
    - get
    - brpc::policy::ParseMongoMessage
    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:
    - butil::IOPortal::IOPortal
    - ASSERT_EQ
    - brpc::ParseResult::message
    - butil::IOBuf::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - static_cast<const void*>
    - length
    - ASSERT_STREQ
    - get
    - c_str
    - ProcessMessage
    - static_cast<const brpc::mongo_head_t*>
    - brpc::Controller::Failed
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - brpc::ParseResult::error
    - butil::IOPortal::cutn
    - butil::IOPortal::fetch
    - butil::IOBuf::IOBuf
    - brpc::policy::ParseMongoMessage
    - butil::IOPortal::append_from_file_descriptor
    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:
    - A::A
    - B::B
    - ASSERT_TRUE
    - linked_ptr::get
    - Use
    - linked_ptr::Use
    - ASSERT_EQ
    - linked_ptr::reset
    - static_cast<A*>
    - linked_ptr::linked_ptr
    - get
    - 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:
    - printf
    - 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_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: 41
    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:
    - EchoServiceImpl::EchoAsync
    - Coroutine
    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::EchoRequest*::sleep_us
    - test::EchoRequest*::message
    - LOG
    - test::EchoRequest*::has_sleep_us
    - test::EchoResponse*::set_message
    - brpc::experimental::Coroutine::usleep
    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:
    - LOG
    - usleep
    - butil::monotonic_time_us
    - EXPECT_GE
    - brpc::experimental::Coroutine::usleep
    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: 5
    functionsReached:
    - EXPECT_EQ
    - brpc::Controller::Controller
    - AwaitableDone::awaitable
    - test::EchoResponse::message
    - inplace_func
    - exception_func
    - test::EchoService_Stub::Echo
    - brpc::Controller::Failed
    - LOG
    - Coroutine::awaitable
    - brpc::Controller::ErrorText
    - test::EchoRequest::set_sleep_us
    - usleep
    - test::EchoRequest::set_message
    - brpc::Controller::Reset
    - butil::monotonic_time_us
    - EXPECT_GE
    - EXPECT_FALSE
    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
    - brpc::Channel::Init
    - brpc::Server::AddService
    - brpc::Server::Start
    - inplace_func
    - LOG
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - func
    - brpc::Channel::Channel
    - Coroutine::join
    - usleep
    - EchoServiceImpl::EchoServiceImpl
    - brpc::ChannelOptions::ChannelOptions
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(CoroutineTest, coroutine)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:137,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:138,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 16
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:145,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:147,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:148,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:148,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:149,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:150,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:150,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:151,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 153
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:157,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:162,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:164,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:164,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:165,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:165,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:166,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:167,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 171
    functionName: ProbeConnect
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 4
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeConnect()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:180,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:181,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:181,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:181,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:182,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:184,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:187,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:188,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:193,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:194,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:200,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:202,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:204,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:205,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:205,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:206,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:207,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:210,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:213,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:213,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:214,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:215,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:216,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:216,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:217,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:217,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:220,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:222,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:224,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:225,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:229,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:236,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:238,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:239,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:240,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:244,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:245,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:246,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:250,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:252,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:255,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:257,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 259
    functionName: StartServerOnce
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - ProbeConnect
    - printf
    - clear
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void StartServerOnce()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:266,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:267,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:271,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:272,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:273,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:274,1
    - Dst: brpc::MysqlResponse*::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:277,1
    - Dst: brpc::MysqlResponse*::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:281,1
    - Dst: brpc::MysqlResponse*::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:282,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:284,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:285,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:285,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:286,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:286,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 4
    argNames:
    - ' channel'
    - ' sql'
    - resp
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - brpc::MysqlResponse*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 291
    functionName: RunPlain
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 14
    functionsReached:
    - brpc::MysqlResponse*::reply_size
    - CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - error
    - brpc::MysqlResponse*::reply
    - butil::string_printf
    - c_str
    - brpc::MysqlRequest::MysqlRequest
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunPlain(brpc::Channel& channel, const std::string& sql,\n                     brpc::MysqlResponse*
      resp, std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:298,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:302,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:303,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:304,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:305,1
    - Dst: brpc::MysqlResponse*::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:308,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 5
    argNames:
    - ' channel'
    - tx
    - ' sql'
    - resp
    - err
    argTypes:
    - brpc::Channel
    - brpc::MysqlTransaction*
    - std::string
    - brpc::MysqlResponse*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 313
    functionName: RunInTx
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 10
    functionsReached:
    - brpc::MysqlResponse*::reply_size
    - CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunInTx(brpc::Channel& channel, const brpc::MysqlTransaction*
      tx,\n                    const std::string& sql, brpc::MysqlResponse* resp,\n
      \                   std::string* err)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:317,1
    - Dst: reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:320,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:321,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:324,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:324,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' resp'
    argTypes:
    - brpc::MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 325
    functionName: ResultRowCount
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 8
    functionsReached:
    - is_resultset
    - reply_size
    - row_count
    - static_cast<int64_t>
    - reply
    linkageType: ''
    returnType: int64_t
    signature: int64_t ResultRowCount(const brpc::MysqlResponse& resp)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:330,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:330,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:331,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:331,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:332,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:332,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:333,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:333,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:334,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:334,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:334,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - ' f'
    - out
    argTypes:
    - brpc::MysqlReply::Field
    - long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 337
    functionName: FieldToLongLong
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - string
    - is_bigint
    - atoll
    - is_integer
    - integer
    - is_string
    - sinteger
    - is_sinteger
    - sbigint
    - bigint
    - is_sbigint
    linkageType: ''
    returnType: bool
    signature: bool FieldToLongLong(const brpc::MysqlReply::Field& f, long long* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:343,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:346,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:353,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - channel
    - out_auth
    - ' schema'
    argTypes:
    - brpc::Channel*
    - brpc::policy::MysqlAuthenticator**
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 354
    functionName: InitPooledChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - c_str
    - brpc::Channel*::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: int
    signature: "int InitPooledChannel(brpc::Channel* channel,\n                             brpc::policy::MysqlAuthenticator**
      out_auth,\n                             const std::string& schema)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 361
    functionName: MysqlPoolConcurrencyTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:364,1
    - Dst: MysqlPoolConcurrencyTest::NoServer
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:365,1
    - Dst: GTEST_SKIP
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:366,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:372,1
    - Dst: GFLAGS_NS::SetCommandLineOption
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:372,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:379,1
    - Dst: InitPooledChannel
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:379,1
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:380,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:381,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:383,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:388,1
    - Dst: InitPooledChannel
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:388,1
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:389,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 363
    functionDepth: 2
    functionLinenumber: 363
    functionLinenumberEnd: 390
    functionName: MysqlPoolConcurrencyTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - GTEST_SKIP
    - pthread_once
    - ASSERT_TRUE
    - RunPlain
    - InitPooledChannel
    - ASSERT_EQ
    - brpc::MysqlResponse::MysqlResponse
    - std::to_string
    - GFLAGS_NS::SetCommandLineOption
    - reset
    - MysqlPoolConcurrencyTest::NoServer
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:414,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:416,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:416,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:418,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:418,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:419,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:420,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:422,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:423,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:426,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:429,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:429,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:431,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:432,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:433,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:434,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:437,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:439,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:439,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:442,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 30
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 410
    functionDepth: 1
    functionLinenumber: 410
    functionLinenumberEnd: 446
    functionName: WU_TxnCommitVisible
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - FieldToLongLong
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlTransactionUniquePtr::commit
    - field
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - c_str
    - RunPlain
    linkageType: ''
    returnType: bool
    signature: "bool WU_TxnCommitVisible(brpc::Channel& ch, const std::string& table,\n
      \                               int iter, std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:453,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:455,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:455,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:457,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:457,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:458,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:459,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:461,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:462,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:465,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:468,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:468,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:469,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:471,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:472,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:474,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 478
    functionName: WU_TxnRollbackDiscards
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - c_str
    - brpc::MysqlTransactionUniquePtr::rollback
    - RunPlain
    linkageType: ''
    returnType: bool
    signature: "bool WU_TxnRollbackDiscards(brpc::Channel& ch, const std::string&
      table,\n                                   int iter, std::string* err)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:486,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:488,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:488,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:490,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:490,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:491,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:492,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:494,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:495,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:499,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:499,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:500,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:501,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:503,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:504,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:506,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 509
    functionName: WU_TxnReadsOwnWrite
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - c_str
    - brpc::MysqlTransactionUniquePtr::rollback
    linkageType: ''
    returnType: bool
    signature: "bool WU_TxnReadsOwnWrite(brpc::Channel& ch, const std::string& table,\n
      \                               int iter, std::string* err)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:518,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:520,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:520,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:521,1
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:524,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:525,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:526,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:528,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:530,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:531,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:532,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:533,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:534,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:534,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:535,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:535,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:538,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:541,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:543,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:543,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:544,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 547
    functionName: WU_PreparedBindInt
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlStatement
    - brpc::Controller::Controller
    - brpc::MysqlStatementUniquePtr::param_count
    - brpc::Controller::Failed
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::AddParam
    - butil::string_printf
    - brpc::MysqlResponse::reply_size
    - c_str
    - RunPlain
    linkageType: ''
    returnType: bool
    signature: "bool WU_PreparedBindInt(brpc::Channel& ch, const std::string& table,\n
      \                              int iter, std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:558,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:560,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:562,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:563,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:563,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:566,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:567,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:568,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:569,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:569,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:570,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:570,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:571,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:575,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:575,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:576,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 4
    argNames:
    - ' ch'
    - worker
    - iter
    - err
    argTypes:
    - brpc::Channel
    - int
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 552
    functionDepth: 1
    functionLinenumber: 552
    functionLinenumberEnd: 581
    functionName: WU_PreparedArithmetic
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - brpc::MysqlResponse::reply
    - FieldToLongLong
    - brpc::NewMysqlStatement
    - brpc::Controller::Controller
    - brpc::MysqlStatementUniquePtr::param_count
    - brpc::Controller::Failed
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::AddParam
    - butil::string_printf
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: bool
    signature: "bool WU_PreparedArithmetic(brpc::Channel& ch, int worker, int iter,\n
      \                                 std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<MixWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:593,1
    - Dst: MixWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:594,1
    - Dst: WU_TxnCommitVisible
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:603,1
    - Dst: WU_TxnRollbackDiscards
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:604,1
    - Dst: WU_TxnReadsOwnWrite
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:605,1
    - Dst: WU_PreparedBindInt
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:606,1
    - Dst: WU_PreparedArithmetic
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:607,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:610,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:611,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 617
    functionName: MixWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - WU_TxnRollbackDiscards
    - MixWorkerArgs*::error::clear
    - static_cast<MixWorkerArgs*>
    - WU_TxnReadsOwnWrite
    - butil::string_printf
    - WU_PreparedBindInt
    - WU_PreparedArithmetic
    - WU_TxnCommitVisible
    linkageType: ''
    returnType: void
    signature: void * MixWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:630,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:631,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:632,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:632,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:634,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:643,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:643,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:647,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:651,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:651,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:652,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:658,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:659,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 623
    functionDepth: 1
    functionLinenumber: 623
    functionLinenumberEnd: 661
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - error::empty
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::string_printf
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, ManyWorkersMixedScenarios)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AffinityWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:677,1
    - Dst: AffinityWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:678,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:685,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:685,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:687,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:689,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:690,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:690,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:691,1
    - Dst: AffinityWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:692,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:694,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:695,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:699,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:699,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:700,1
    - Dst: AffinityWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:700,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:702,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:705,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:705,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:709,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 712
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 712
    functionName: AffinityWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - FieldToLongLong
    - brpc::NewMysqlTransaction
    - RunInTx
    - brpc::MysqlTransactionUniquePtr::GetSocketId
    - AffinityWorkerArgs*::error::clear
    - static_cast<AffinityWorkerArgs*>
    - brpc::MysqlTransactionUniquePtr::commit
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - AffinityWorkerArgs*::table::c_str
    linkageType: ''
    returnType: void
    signature: void * AffinityWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:720,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:722,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:722,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:723,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:723,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:729,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:729,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:730,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:730,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:736,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:736,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:737,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:737,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:738,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:739,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:741,1
    - Dst: AffinityWorkerArgs::error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:741,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:742,1
    - Dst: AffinityWorkerArgs::error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:742,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:745,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:746,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:748,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:749,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:750,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:753,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:754,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:755,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:762,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 764
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - EXPECT_NE
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - AffinityWorkerArgs::error::empty
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, TwoTransactionsHoldDifferentPinnedSockets)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PreparedWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:776,1
    - Dst: PreparedWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:778,1
    - Dst: WU_PreparedArithmetic
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:781,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 775
    functionDepth: 2
    functionLinenumber: 775
    functionLinenumberEnd: 788
    functionName: PreparedWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - WU_PreparedArithmetic
    - PreparedWorkerArgs*::error::clear
    - static_cast<PreparedWorkerArgs*>
    linkageType: ''
    returnType: void
    signature: void * PreparedWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:796,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:797,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:797,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:798,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:798,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:802,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:808,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:808,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:809,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:809,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:810,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:813,1
    - Dst: AffinityWorkerArgs::error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:813,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:814,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:817,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:818,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:819,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:820,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:823,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 793
    functionDepth: 1
    functionLinenumber: 793
    functionLinenumberEnd: 824
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - EXPECT_NE
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - AffinityWorkerArgs::error::empty
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, TransactionPlusPreparedInParallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NS::SetCommandLineOption
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:842,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:843,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cap
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 844
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 844
    functionName: SetPoolCap
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NS::SetCommandLineOption
    - std::to_string
    linkageType: ''
    returnType: void
    signature: void SetPoolCap(int cap)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PinnedTxnWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:859,1
    - Dst: PinnedTxnWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:860,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:861,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:864,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:864,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:867,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:870,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:870,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:871,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:871,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:872,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:873,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:875,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:876,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:881,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:881,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:882,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:882,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:883,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:884,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:886,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:887,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:893,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:893,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:894,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:894,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:895,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:896,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:898,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:899,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:904,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:904,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:905,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:905,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:906,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:907,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:909,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:910,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:916,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 40
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 918
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 918
    functionName: PinnedTxnWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - brpc::NewMysqlTransaction
    - RunInTx
    - brpc::MysqlTransactionUniquePtr::GetSocketId
    - brpc::MysqlResponse::MysqlResponse
    - PinnedTxnWorkerArgs*::table::c_str
    - brpc::MysqlTransactionUniquePtr::get
    - PinnedTxnWorkerArgs*::socket_ids::clear
    - static_cast<PinnedTxnWorkerArgs*>
    - butil::string_printf
    - PinnedTxnWorkerArgs*::socket_ids::push_back
    - brpc::MysqlTransactionUniquePtr::rollback
    - PinnedTxnWorkerArgs*::error::clear
    linkageType: ''
    returnType: void
    signature: void * PinnedTxnWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetPoolCap
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:934,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:937,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:940,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:941,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:941,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:943,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:943,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:961,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:961,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:965,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:970,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:970,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:972,1
    - Dst: socket_ids::size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:972,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:979,1
    - Dst: socket_ids::size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:980,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:981,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:991,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:999,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1001
      start: 932
    functionDepth: 1
    functionLinenumber: 932
    functionLinenumberEnd: 1001
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - EXPECT_NE
    - error::empty
    - SetPoolCap
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - socket_ids::size
    - butil::string_printf
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, ConcurrentTxnsStayPinned)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AbortWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1016,1
    - Dst: AbortWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1017,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1019,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1020,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1023,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1024,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1024,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1025,1
    - Dst: AbortWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1026,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1028,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1029,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1033,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1015
    functionDepth: 1
    functionLinenumber: 1015
    functionLinenumberEnd: 1038
    functionName: AbortWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - AbortWorkerArgs*::table::c_str
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlTransaction
    - RunInTx
    - AbortWorkerArgs*::error::clear
    - static_cast<AbortWorkerArgs*>
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - brpc::MysqlTransactionUniquePtr::rollback
    linkageType: ''
    returnType: void
    signature: void * AbortWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetPoolCap
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1051,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1055,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1056,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1057,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1074,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1074,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1078,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1082,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1089,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1092,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1092,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1093,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1093,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1093,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1101,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1102,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1102,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - ResultRowCount
    - ASSERT_TRUE
    - FieldToLongLong
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - error::empty
    - SetPoolCap
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, ConcurrentTxnAbortAndAutoRollback)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReserveWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1117,1
    - Dst: ReserveWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1118,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1123,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1124,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1126,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1127,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1127,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1128,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1131
      start: 1116
    functionDepth: 1
    functionLinenumber: 1116
    functionLinenumberEnd: 1131
    functionName: ReserveWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::NewMysqlTransaction
    - RunInTx
    - static_cast<ReserveWorkerArgs*>
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - ReserveWorkerArgs*::error::clear
    - brpc::MysqlTransactionUniquePtr::rollback
    linkageType: ''
    returnType: void
    signature: void * ReserveWorker(void* p)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<StmtExecWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1144,1
    - Dst: StmtExecWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1145,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1149,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1150,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1151,1
    - Dst: StmtExecWorkerArgs*::channel::CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1152,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1153,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1153,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1154,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1154,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1155,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1159,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1159,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1160,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1143
    functionDepth: 1
    functionLinenumber: 1143
    functionLinenumberEnd: 1166
    functionName: StmtExecWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlResponse::reply
    - FieldToLongLong
    - brpc::Controller::Controller
    - static_cast<StmtExecWorkerArgs*>
    - brpc::Controller::Failed
    - StmtExecWorkerArgs*::error::clear
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::AddParam
    - brpc::MysqlResponse::reply_size
    - butil::string_printf
    - StmtExecWorkerArgs*::channel::CallMethod
    linkageType: ''
    returnType: void
    signature: void * StmtExecWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetPoolCap
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1188,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1191,1
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1196,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1196,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1201,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1201,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1202,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1203,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1204,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1204,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1205,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1205,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1205,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1207,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1207,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1221,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1221,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1229,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1229,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1233,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1236,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1240,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1240,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1244,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1244,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1248
      start: 1187
    functionDepth: 1
    functionLinenumber: 1187
    functionLinenumberEnd: 1248
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - FieldToLongLong
    - bthread_join
    - brpc::MysqlStatementUniquePtr::param_count
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - EXPECT_TRUE
    - brpc::MysqlRequest::AddParam
    - CallMethod
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlStatement
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - error::empty
    - SetPoolCap
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::reply_size
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, PreparedRePreparesWhenConnectionStolen)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getcwd
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:137,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:138,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:140,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: TestDataDir
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 18
    functionsReached:
    - std::string
    - getcwd
    linkageType: ''
    returnType: std::string
    signature: std::string TestDataDir()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:145,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:147,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:148,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:148,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:149,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:150,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:150,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:151,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 153
    functionName: RemoveMysqlServer
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - CHECK
    - system
    - usleep
    - snprintf
    - puts
    linkageType: ''
    returnType: void
    signature: void RemoveMysqlServer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:157,1
    - Dst: memset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:162,1
    - Dst: htons
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:164,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:164,1
    - Dst: inet_addr
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:165,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:165,1
    - Dst: connect
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:166,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:167,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 171
    functionName: ProbeConnect
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 5
    functionsReached:
    - inet_addr
    - static_cast<uint16_t>
    - memset
    - socket
    - connect
    - close
    - c_str
    - htons
    linkageType: ''
    returnType: int
    signature: int ProbeConnect()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:180,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:181,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:181,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:181,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:182,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:184,1
    - Dst: printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:187,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:188,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:193,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:194,1
    - Dst: clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:200,1
    - Dst: TestDataDir
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:202,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:204,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:205,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:205,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:206,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:207,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:210,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:213,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:213,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:214,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:215,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:216,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:216,1
    - Dst: CHECK
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:217,1
    - Dst: system
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:217,1
    - Dst: atexit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:220,1
    - Dst: fork
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:222,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:224,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:225,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:227,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:229,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:236,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:238,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:239,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:240,1
    - Dst: execvp
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:244,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:245,1
    - Dst: exit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:246,1
    - Dst: ProbeConnect
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:250,1
    - Dst: close
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:252,1
    - Dst: usleep
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:255,1
    - Dst: puts
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:257,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 60
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 259
    functionName: StartServerOnce
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - TestDataDir
    - std::string::c_str
    - ProbeConnect
    - printf
    - clear
    - CHECK
    - execvp
    - system
    - usleep
    - snprintf
    - puts
    - exit
    - close
    - c_str
    - atexit
    - fork
    linkageType: ''
    returnType: void
    signature: void StartServerOnce()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::MysqlRequest
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:266,1
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:267,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:271,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:272,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:273,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:274,1
    - Dst: brpc::MysqlResponse*::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:277,1
    - Dst: brpc::MysqlResponse*::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:281,1
    - Dst: brpc::MysqlResponse*::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:282,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:284,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:285,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:285,1
    - Dst: error
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:286,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:286,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 4
    argNames:
    - ' channel'
    - ' sql'
    - resp
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - brpc::MysqlResponse*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 291
    functionName: RunPlain
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 23
    functionsReached:
    - brpc::MysqlResponse*::reply_size
    - CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - error
    - brpc::MysqlResponse*::reply
    - butil::string_printf
    - c_str
    - brpc::MysqlRequest::MysqlRequest
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunPlain(brpc::Channel& channel, const std::string& sql,\n                     brpc::MysqlResponse*
      resp, std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::Query
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:298,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:302,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:303,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:304,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:305,1
    - Dst: brpc::MysqlResponse*::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:308,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 5
    argNames:
    - ' channel'
    - tx
    - ' sql'
    - resp
    - err
    argTypes:
    - brpc::Channel
    - brpc::MysqlTransaction*
    - std::string
    - brpc::MysqlResponse*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 313
    functionName: RunInTx
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 17
    functionsReached:
    - brpc::MysqlResponse*::reply_size
    - CallMethod
    - brpc::Controller::Controller
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::Query
    linkageType: ''
    returnType: bool
    signature: "bool RunInTx(brpc::Channel& channel, const brpc::MysqlTransaction*
      tx,\n                    const std::string& sql, brpc::MysqlResponse* resp,\n
      \                   std::string* err)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:317,1
    - Dst: reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:320,1
    - Dst: is_resultset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:321,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:324,1
    - Dst: row_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:324,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' resp'
    argTypes:
    - brpc::MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 325
    functionName: ResultRowCount
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 14
    functionsReached:
    - is_resultset
    - reply_size
    - row_count
    - static_cast<int64_t>
    - reply
    linkageType: ''
    returnType: int64_t
    signature: int64_t ResultRowCount(const brpc::MysqlResponse& resp)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: is_sbigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:330,1
    - Dst: sbigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:330,1
    - Dst: is_bigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:331,1
    - Dst: bigint
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:331,1
    - Dst: is_sinteger
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:332,1
    - Dst: sinteger
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:332,1
    - Dst: is_integer
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:333,1
    - Dst: integer
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:333,1
    - Dst: is_string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:334,1
    - Dst: atoll
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:334,1
    - Dst: string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:334,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - ' f'
    - out
    argTypes:
    - brpc::MysqlReply::Field
    - long long*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 337
    functionName: FieldToLongLong
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 6
    functionsReached:
    - string
    - is_bigint
    - atoll
    - is_integer
    - integer
    - is_string
    - sinteger
    - is_sinteger
    - sbigint
    - bigint
    - is_sbigint
    linkageType: ''
    returnType: bool
    signature: bool FieldToLongLong(const brpc::MysqlReply::Field& f, long long* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:343,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:346,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:353,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:353,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 3
    argNames:
    - channel
    - out_auth
    - ' schema'
    argTypes:
    - brpc::Channel*
    - brpc::policy::MysqlAuthenticator**
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 354
    functionName: InitPooledChannel
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - c_str
    - brpc::Channel*::Init
    - brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: int
    signature: "int InitPooledChannel(brpc::Channel* channel,\n                             brpc::policy::MysqlAuthenticator**
      out_auth,\n                             const std::string& schema)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 361
    functionDepth: 0
    functionLinenumber: 361
    functionLinenumberEnd: 361
    functionName: MysqlPoolConcurrencyTest::NoServer
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool NoServer()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:364,1
    - Dst: MysqlPoolConcurrencyTest::NoServer
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:365,1
    - Dst: GTEST_SKIP
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:366,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:372,1
    - Dst: GFLAGS_NS::SetCommandLineOption
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:372,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:379,1
    - Dst: InitPooledChannel
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:379,1
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:380,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:381,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:383,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:383,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:388,1
    - Dst: InitPooledChannel
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:388,1
    - Dst: reset
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:389,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 363
    functionDepth: 2
    functionLinenumber: 363
    functionLinenumberEnd: 390
    functionName: MysqlPoolConcurrencyTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_FALSE
    - GTEST_SKIP
    - pthread_once
    - ASSERT_TRUE
    - RunPlain
    - InitPooledChannel
    - ASSERT_EQ
    - brpc::MysqlResponse::MysqlResponse
    - std::to_string
    - GFLAGS_NS::SetCommandLineOption
    - reset
    - MysqlPoolConcurrencyTest::NoServer
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:414,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:416,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:416,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:418,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:418,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:419,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:420,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:422,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:423,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:426,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:429,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:429,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:431,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:432,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:433,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:434,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:437,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:439,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:439,1
    - Dst: field
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:442,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 30
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 410
    functionDepth: 1
    functionLinenumber: 410
    functionLinenumberEnd: 446
    functionName: WU_TxnCommitVisible
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - FieldToLongLong
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlTransactionUniquePtr::commit
    - field
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - c_str
    - RunPlain
    linkageType: ''
    returnType: bool
    signature: "bool WU_TxnCommitVisible(brpc::Channel& ch, const std::string& table,\n
      \                               int iter, std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:453,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:455,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:455,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:457,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:457,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:458,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:459,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:461,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:462,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:465,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:468,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:468,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:469,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:471,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:472,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:474,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 478
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 478
    functionName: WU_TxnRollbackDiscards
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - c_str
    - brpc::MysqlTransactionUniquePtr::rollback
    - RunPlain
    linkageType: ''
    returnType: bool
    signature: "bool WU_TxnRollbackDiscards(brpc::Channel& ch, const std::string&
      table,\n                                   int iter, std::string* err)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:486,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:488,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:488,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:490,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:490,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:491,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:492,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:494,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:495,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:499,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:499,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:500,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:501,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:503,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:504,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:506,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 509
    functionName: WU_TxnReadsOwnWrite
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - RunInTx
    - brpc::NewMysqlTransaction
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - c_str
    - brpc::MysqlTransactionUniquePtr::rollback
    linkageType: ''
    returnType: bool
    signature: "bool WU_TxnReadsOwnWrite(brpc::Channel& ch, const std::string& table,\n
      \                               int iter, std::string* err)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:518,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:520,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:520,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:521,1
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:524,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:525,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:526,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:528,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:530,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:531,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:532,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:533,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:534,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:534,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:535,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:535,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:538,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:541,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:543,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:543,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:544,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 33
    argCount: 4
    argNames:
    - ' ch'
    - ' table'
    - iter
    - err
    argTypes:
    - brpc::Channel
    - std::string
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 547
    functionName: WU_PreparedBindInt
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 1
    functionsReached:
    - CallMethod
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlStatement
    - brpc::Controller::Controller
    - brpc::MysqlStatementUniquePtr::param_count
    - brpc::Controller::Failed
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::AddParam
    - butil::string_printf
    - brpc::MysqlResponse::reply_size
    - c_str
    - RunPlain
    linkageType: ''
    returnType: bool
    signature: "bool WU_PreparedBindInt(brpc::Channel& ch, const std::string& table,\n
      \                              int iter, std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:558,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:560,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:562,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:563,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:563,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:566,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:567,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:568,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:569,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:569,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:570,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:570,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:571,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:575,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:575,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:576,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 4
    argNames:
    - ' ch'
    - worker
    - iter
    - err
    argTypes:
    - brpc::Channel
    - int
    - int
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 552
    functionDepth: 1
    functionLinenumber: 552
    functionLinenumberEnd: 581
    functionName: WU_PreparedArithmetic
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 2
    functionsReached:
    - CallMethod
    - brpc::MysqlResponse::reply
    - FieldToLongLong
    - brpc::NewMysqlStatement
    - brpc::Controller::Controller
    - brpc::MysqlStatementUniquePtr::param_count
    - brpc::Controller::Failed
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::AddParam
    - butil::string_printf
    - brpc::MysqlResponse::reply_size
    linkageType: ''
    returnType: bool
    signature: "bool WU_PreparedArithmetic(brpc::Channel& ch, int worker, int iter,\n
      \                                 std::string* err)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<MixWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:593,1
    - Dst: MixWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:594,1
    - Dst: WU_TxnCommitVisible
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:603,1
    - Dst: WU_TxnRollbackDiscards
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:604,1
    - Dst: WU_TxnReadsOwnWrite
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:605,1
    - Dst: WU_PreparedBindInt
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:606,1
    - Dst: WU_PreparedArithmetic
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:607,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:610,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:611,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 592
    functionDepth: 2
    functionLinenumber: 592
    functionLinenumberEnd: 617
    functionName: MixWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - WU_TxnRollbackDiscards
    - MixWorkerArgs*::error::clear
    - static_cast<MixWorkerArgs*>
    - WU_TxnReadsOwnWrite
    - butil::string_printf
    - WU_PreparedBindInt
    - WU_PreparedArithmetic
    - WU_TxnCommitVisible
    linkageType: ''
    returnType: void
    signature: void * MixWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:630,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:631,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:632,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:632,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:634,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:634,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:643,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:643,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:647,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:651,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:651,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:652,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:658,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:659,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 623
    functionDepth: 1
    functionLinenumber: 623
    functionLinenumberEnd: 661
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - error::empty
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::string_printf
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, ManyWorkersMixedScenarios)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AffinityWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:677,1
    - Dst: AffinityWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:678,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:685,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:685,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:687,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:689,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:690,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:690,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:691,1
    - Dst: AffinityWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:692,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:694,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:695,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:699,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:699,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:700,1
    - Dst: AffinityWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:700,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:702,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:705,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:705,1
    - Dst: brpc::MysqlTransactionUniquePtr::commit
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:709,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 712
      start: 676
    functionDepth: 1
    functionLinenumber: 676
    functionLinenumberEnd: 712
    functionName: AffinityWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - FieldToLongLong
    - brpc::NewMysqlTransaction
    - RunInTx
    - brpc::MysqlTransactionUniquePtr::GetSocketId
    - AffinityWorkerArgs*::error::clear
    - static_cast<AffinityWorkerArgs*>
    - brpc::MysqlTransactionUniquePtr::commit
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - AffinityWorkerArgs*::table::c_str
    linkageType: ''
    returnType: void
    signature: void * AffinityWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:720,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:722,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:722,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:723,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:723,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:729,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:729,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:730,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:730,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:736,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:736,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:737,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:737,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:738,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:739,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:741,1
    - Dst: AffinityWorkerArgs::error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:741,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:742,1
    - Dst: AffinityWorkerArgs::error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:742,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:745,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:746,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:747,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:748,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:749,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:750,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:753,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:754,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:755,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:762,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 764
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - EXPECT_NE
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - AffinityWorkerArgs::error::empty
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, TwoTransactionsHoldDifferentPinnedSockets)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PreparedWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:776,1
    - Dst: PreparedWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:778,1
    - Dst: WU_PreparedArithmetic
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:781,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 775
    functionDepth: 2
    functionLinenumber: 775
    functionLinenumberEnd: 788
    functionName: PreparedWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - WU_PreparedArithmetic
    - PreparedWorkerArgs*::error::clear
    - static_cast<PreparedWorkerArgs*>
    linkageType: ''
    returnType: void
    signature: void * PreparedWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:796,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:797,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:797,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:798,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:798,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:802,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:808,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:808,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:809,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:809,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:810,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:813,1
    - Dst: AffinityWorkerArgs::error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:813,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:814,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:817,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:818,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:819,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:820,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:823,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 793
    functionDepth: 1
    functionLinenumber: 793
    functionLinenumberEnd: 824
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - EXPECT_NE
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - AffinityWorkerArgs::error::empty
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, TransactionPlusPreparedInParallel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GFLAGS_NS::SetCommandLineOption
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:842,1
    - Dst: std::to_string
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:843,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cap
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 844
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 844
    functionName: SetPoolCap
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 3
    functionsReached:
    - GFLAGS_NS::SetCommandLineOption
    - std::to_string
    linkageType: ''
    returnType: void
    signature: void SetPoolCap(int cap)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<PinnedTxnWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:859,1
    - Dst: PinnedTxnWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:860,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:861,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:864,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:864,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:867,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:870,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:870,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:871,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:871,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:872,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:873,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:875,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:876,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:881,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:881,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:882,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:882,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:883,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:884,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:886,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:887,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:893,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:893,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:894,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:894,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:895,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:896,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:898,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:899,1
    - Dst: PinnedTxnWorkerArgs*::socket_ids::push_back
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:904,1
    - Dst: brpc::MysqlTransactionUniquePtr::GetSocketId
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:904,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:905,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:905,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:906,1
    - Dst: PinnedTxnWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:907,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:909,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:910,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:916,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 40
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 918
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 918
    functionName: PinnedTxnWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - ResultRowCount
    - brpc::NewMysqlTransaction
    - RunInTx
    - brpc::MysqlTransactionUniquePtr::GetSocketId
    - brpc::MysqlResponse::MysqlResponse
    - PinnedTxnWorkerArgs*::table::c_str
    - brpc::MysqlTransactionUniquePtr::get
    - PinnedTxnWorkerArgs*::socket_ids::clear
    - static_cast<PinnedTxnWorkerArgs*>
    - butil::string_printf
    - PinnedTxnWorkerArgs*::socket_ids::push_back
    - brpc::MysqlTransactionUniquePtr::rollback
    - PinnedTxnWorkerArgs*::error::clear
    linkageType: ''
    returnType: void
    signature: void * PinnedTxnWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetPoolCap
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:934,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:937,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:940,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:941,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:941,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:943,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:943,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:961,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:961,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:965,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:970,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:970,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:972,1
    - Dst: socket_ids::size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:972,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:979,1
    - Dst: socket_ids::size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:980,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:981,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:991,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:999,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1001
      start: 932
    functionDepth: 1
    functionLinenumber: 932
    functionLinenumberEnd: 1001
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - EXPECT_EQ
    - ASSERT_TRUE
    - EXPECT_NE
    - error::empty
    - SetPoolCap
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - socket_ids::size
    - butil::string_printf
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, ConcurrentTxnsStayPinned)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<AbortWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1016,1
    - Dst: AbortWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1017,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1019,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1020,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1023,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1024,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1024,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1025,1
    - Dst: AbortWorkerArgs*::table::c_str
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1026,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1028,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1029,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1033,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1015
    functionDepth: 1
    functionLinenumber: 1015
    functionLinenumberEnd: 1038
    functionName: AbortWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - AbortWorkerArgs*::table::c_str
    - brpc::MysqlTransactionOptions
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlTransaction
    - RunInTx
    - AbortWorkerArgs*::error::clear
    - static_cast<AbortWorkerArgs*>
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - butil::string_printf
    - brpc::MysqlTransactionUniquePtr::rollback
    linkageType: ''
    returnType: void
    signature: void * AbortWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetPoolCap
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1051,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1055,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1056,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1056,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1057,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1057,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1074,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1074,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1078,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1082,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1082,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1089,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1089,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1092,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1092,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1093,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1093,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1093,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1094,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1101,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1102,1
    - Dst: ResultRowCount
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1102,1
    - Dst: RunPlain
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1104,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1105
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1105
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - ResultRowCount
    - ASSERT_TRUE
    - FieldToLongLong
    - brpc::MysqlResponse::reply
    - EXPECT_EQ
    - error::empty
    - SetPoolCap
    - brpc::MysqlResponse::MysqlResponse
    - ASSERT_EQ
    - EXPECT_TRUE
    - bthread_start_background
    - RunPlain
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, ConcurrentTxnAbortAndAutoRollback)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReserveWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1117,1
    - Dst: ReserveWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1118,1
    - Dst: brpc::NewMysqlTransaction
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1123,1
    - Dst: brpc::MysqlTransactionOptions
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1124,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1126,1
    - Dst: RunInTx
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1127,1
    - Dst: brpc::MysqlTransactionUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1127,1
    - Dst: brpc::MysqlTransactionUniquePtr::rollback
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1128,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1131
      start: 1116
    functionDepth: 1
    functionLinenumber: 1116
    functionLinenumberEnd: 1131
    functionName: ReserveWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransactionOptions
    - brpc::NewMysqlTransaction
    - RunInTx
    - static_cast<ReserveWorkerArgs*>
    - brpc::MysqlResponse::MysqlResponse
    - brpc::MysqlTransactionUniquePtr::get
    - ReserveWorkerArgs*::error::clear
    - brpc::MysqlTransactionUniquePtr::rollback
    linkageType: ''
    returnType: void
    signature: void * ReserveWorker(void* p)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<StmtExecWorkerArgs*>
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1144,1
    - Dst: StmtExecWorkerArgs*::error::clear
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1145,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1149,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1150,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1151,1
    - Dst: StmtExecWorkerArgs*::channel::CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1152,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1153,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1153,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1154,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1154,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1155,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1159,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1159,1
    - Dst: butil::string_printf
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1160,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 1
    argNames:
    - p
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1143
    functionDepth: 1
    functionLinenumber: 1143
    functionLinenumberEnd: 1166
    functionName: StmtExecWorker
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlResponse::reply
    - FieldToLongLong
    - brpc::Controller::Controller
    - static_cast<StmtExecWorkerArgs*>
    - brpc::Controller::Failed
    - StmtExecWorkerArgs*::error::clear
    - brpc::MysqlResponse::MysqlResponse
    - brpc::Controller::ErrorText
    - brpc::MysqlRequest::AddParam
    - brpc::MysqlResponse::reply_size
    - butil::string_printf
    - StmtExecWorkerArgs*::channel::CallMethod
    linkageType: ''
    returnType: void
    signature: void * StmtExecWorker(void* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetPoolCap
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1188,1
    - Dst: brpc::MysqlResponse::MysqlResponse
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1191,1
    - Dst: brpc::NewMysqlStatement
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1195,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1196,1
    - Dst: brpc::MysqlStatementUniquePtr::param_count
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1196,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1200,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1201,1
    - Dst: brpc::MysqlRequest::AddParam
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1201,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1202,1
    - Dst: CallMethod
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1203,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1204,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1204,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1204,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1205,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1205,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1205,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1207,1
    - Dst: FieldToLongLong
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1207,1
    - Dst: brpc::MysqlResponse::reply
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1207,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1221,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1221,1
    - Dst: brpc::MysqlStatementUniquePtr::get
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1229,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1229,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1233,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1236,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1240,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1240,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1244,1
    - Dst: error::empty
      Src: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp:1244,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1248
      start: 1187
    functionDepth: 1
    functionLinenumber: 1187
    functionLinenumberEnd: 1248
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_mysql_pool_concurrency_unittest.cpp
    functionUses: 0
    functionsReached:
    - FieldToLongLong
    - bthread_join
    - brpc::MysqlStatementUniquePtr::param_count
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - EXPECT_TRUE
    - brpc::MysqlRequest::AddParam
    - CallMethod
    - brpc::MysqlResponse::reply
    - brpc::NewMysqlStatement
    - brpc::Controller::Failed
    - brpc::MysqlResponse::MysqlResponse
    - error::empty
    - SetPoolCap
    - brpc::MysqlStatementUniquePtr::get
    - brpc::MysqlResponse::reply_size
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TEST_F(MysqlPoolConcurrencyTest, PreparedRePreparesWhenConnectionStolen)
  - 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:
    - ::testing::InitGoogleTest
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - 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: 42
    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::EchoResponse*::set_message
    - ::test::EchoRequest*::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*::Failed
    - brpc::Controller*::ErrorCode
    - ASSERT_TRUE
    - brpc::NsheadMessage*::body::append
    - ASSERT_EQ
    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
    - Start
    - EXPECT_EQ
    - MyInterceptor::MyInterceptor
    - AddService
    - brpc::ServerOptions::ServerOptions
    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_FALSE
    - Echo
    - EXPECT_EQ
    - ASSERT_TRUE
    - brpc::Controller::Controller
    - brpc::Controller::ErrorCode
    - brpc::Controller::Failed
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - message
    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:
    - brpc::Channel::Init
    - CallMethod
    - brpc::Controller::Controller
    - ASSERT_EQ
    - brpc::Channel::Channel
    - brpc::NsheadMessage::body::to_string
    - brpc::Channel::CallMethod
    - brpc::NsheadMessage::NsheadMessage
    - ::test::EchoRequest::set_message
    - brpc::ChannelOptions::ChannelOptions
    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
    - Watchdog::Arm
    - butil::TimeDelta::FromMilliseconds
    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::alarm_counter
    - EXPECT_EQ
    - butil::TimeDelta::FromMinutes
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WatchdogCounter::Arm
    - butil::TimeDelta::FromMilliseconds
    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:
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    - butil::TimeDelta
    - butil::TimeDelta::FromMinutes
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    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::alarm_counter
    - EXPECT_EQ
    - WatchdogCounter::Arm
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Sleep
    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:
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    - butil::TimeDelta::FromMinutes
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - LOG
    - butil::TimeTicks::Now
    - WatchdogCounter::Arm
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMilliseconds
    - WatchdogCounter::Disarm
    - butil::PlatformThread::Sleep
    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
    - Watchdog::Arm
    - butil::TimeDelta::FromMilliseconds
    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::alarm_counter
    - EXPECT_EQ
    - butil::TimeDelta::FromMinutes
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - WatchdogCounter::Arm
    - butil::TimeDelta::FromMilliseconds
    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:
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    - butil::TimeDelta
    - butil::TimeDelta::FromMinutes
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    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::alarm_counter
    - EXPECT_EQ
    - WatchdogCounter::Arm
    - butil::TimeDelta::FromMilliseconds
    - butil::PlatformThread::Sleep
    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:
    - butil::TimeDelta::FromSeconds
    - WatchdogCounter::alarm_counter
    - EXPECT_EQ
    - butil::TimeDelta::FromMinutes
    - WatchdogCounter::ArmSomeTimeDeltaAgo
    - LOG
    - butil::TimeTicks::Now
    - WatchdogCounter::Arm
    - SPIN_FOR_TIMEDELTA_OR_UNTIL_TRUE
    - butil::TimeDelta::FromMilliseconds
    - WatchdogCounter::Disarm
    - butil::PlatformThread::Sleep
    linkageType: ''
    returnType: void
    signature: void TEST_F(WatchdogTest, DisarmTest)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:79,1
    - Dst: find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:81,1
    - Dst: substr
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:83,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:87,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:88,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:89,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:90,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 93
    functionName: HashSlot
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - substr
    - find
    - static_cast<uint16_t>
    - static_cast<uint8_t>
    - std::string::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t HashSlot(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: OwnerBySlot
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int OwnerBySlot(int slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 136
    functionName: ClusterMeta
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClusterMeta()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:139,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:140,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:143,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    functionName: OwnerOfKey
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - HashSlot
    - OwnerBySlot
    - find
    - end
    linkageType: ''
    returnType: int
    signature: int OwnerOfKey(const std::string& key) const
  - 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: Session::Session
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Session()
  - 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: Session::Destroy
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Session*>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:165,1
    - Dst: brpc::RedisConnContext*::get_session
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:165,1
    - Dst: Session::Session
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:167,1
    - Dst: brpc::RedisConnContext*::reset_session
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - brpc::RedisConnContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 171
    functionName: GetOrCreateSession
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Session*>
    - Session::Session
    - brpc::RedisConnContext*::reset_session
    - brpc::RedisConnContext*::get_session
    linkageType: ''
    returnType: Session
    signature: Session * GetOrCreateSession(brpc::RedisConnContext* ctx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:174,1
    - Dst: substr
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:178,1
    - Dst: atoi
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:179,1
    - Dst: substr
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' endpoint'
    - host
    - port
    argTypes:
    - std::string
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 181
    functionName: ParseEndpoint
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - substr
    - rfind
    - atoi
    linkageType: ''
    returnType: bool
    signature: bool ParseEndpoint(const std::string& endpoint, std::string* host,
      int* port)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetOrCreateSession
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:189,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ctx
    - output
    argTypes:
    - brpc::RedisConnContext*
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 195
    functionName: AskingHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - GetOrCreateSession
    - brpc::RedisReply*::SetStatus
    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*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - meta
    argTypes:
    - ClusterMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: ClusterCommandHandler::ClusterCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClusterCommandHandler(ClusterMeta* meta)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:206,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:207,1
    - Dst: slots_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:211,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:213,1
    - Dst: slots_override_slot::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:217,1
    - Dst: slots_override_owner::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:218,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:220,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:235,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:235,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:237,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:237,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:239,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:239,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:241,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:241,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:243,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:243,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:245,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:245,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:247,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:247,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:249,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:249,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:253,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:253,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:254,1
    - Dst: ClusterCommandHandler::FillSlotEntry
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:255,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:261,1
    - Dst: ClusterCommandHandler::FillSlotEntry
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:262,1
    - Dst: ClusterCommandHandler::FillSlotEntry
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:264,1
    - Dst: nodes_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:269,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:271,1
    - Dst: custom_nodes_payload::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:274,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:275,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:283,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:283,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:286,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 60
    argCount: 2
    argNames:
    - ' args'
    - output
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 288
    functionName: ClusterCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetArray
    - size
    - std::vector::push_back
    - brpc::RedisReply*::SetString
    - ClusterCommandHandler::SlotRange
    - ClusterCommandHandler::FillSlotEntry
    - custom_nodes_payload::empty
    - std::ostringstream::str
    - slots_override_owner::load
    - OwnerBySlot
    - std::vector::size
    - slots_calls::fetch_add
    - brpc::RedisReply*::SetError
    - nodes_calls::fetch_add
    - slots_override_slot::load
    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*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - s
    - e
    - o
    argTypes:
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 229
    functionName: ClusterCommandHandler::SlotRange
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SlotRange(int s, int e, int o)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ParseEndpoint
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:296,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:297,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:298,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:299,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:300,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:302,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:304,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 5
    argNames:
    - ' reply'
    - start
    - end
    - ' endpoint'
    - empty_host
    argTypes:
    - brpc::RedisReply
    - int
    - int
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 307
    functionName: ClusterCommandHandler::FillSlotEntry
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached:
    - SetString
    - SetInteger
    - SetArray
    - ParseEndpoint
    linkageType: ''
    returnType: void
    signature: "void FillSlotEntry(brpc::RedisReply& reply, int start, int end,\n
      \                             const std::string& endpoint,\n                              bool
      empty_host)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - data
    argTypes:
    - NodeData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 315
    functionName: KVCommandHandler::KVCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void KVCommandHandler(NodeData* data)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:321,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:322,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:325,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:327,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:331,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:334,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:335,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:339,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:340,1
    - Dst: meta::OwnerOfKey
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:341,1
    - Dst: meta::forced_error_by_key::find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:344,1
    - Dst: meta::forced_error_by_key::end
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:345,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:346,1
    - Dst: meta::redirect_loop_key::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:350,1
    - Dst: meta::moved_error_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:353,1
    - Dst: brpc::RedisReply*::FormatError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:354,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:355,1
    - Dst: meta::ask_error_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:362,1
    - Dst: brpc::RedisReply*::FormatError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:363,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:364,1
    - Dst: GetOrCreateSession
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:368,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:370,1
    - Dst: meta::accept_requests_on_wrong_owner::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:379,1
    - Dst: meta::moved_error_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:381,1
    - Dst: brpc::RedisReply*::FormatError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:382,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:382,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:387,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:388,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:391,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:392,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:393,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:397,1
    - Dst: kv::find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:398,1
    - Dst: kv::end
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:399,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:400,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:402,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:407,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:408,1
    - Dst: kv::erase
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:408,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:412,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:413,1
    - Dst: kv::count
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:413,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:417,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 77
    argCount: 3
    argNames:
    - ctx
    - ' args'
    - output
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 317
    functionDepth: 2
    functionLinenumber: 317
    functionLinenumberEnd: 419
    functionName: KVCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - meta::forced_error_by_key::end
    - empty
    - meta::moved_error_calls::fetch_add
    - brpc::RedisReply*::SetStatus
    - meta::forced_error_by_key::find
    - brpc::RedisReply*::FormatError
    - brpc::RedisReply*::SetInteger
    - GetOrCreateSession
    - as_string
    - kv::find
    - c_str
    - brpc::RedisReply*::SetError
    - size
    - kv::erase
    - BAIDU_SCOPED_LOCK
    - brpc::RedisReply*::SetString
    - meta::OwnerOfKey
    - meta::ask_error_calls::fetch_add
    - meta::redirect_loop_key::empty
    - brpc::RedisReply*::SetNullString
    - meta::accept_requests_on_wrong_owner::load
    - kv::count
    - kv::end
    - HashSlot
    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*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AskingHandler::AskingHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:428,1
    - Dst: ClusterCommandHandler::ClusterCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:429,1
    - Dst: KVCommandHandler::KVCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:430,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:431,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:431,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:432,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:432,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:433,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:433,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:434,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:434,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:435,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:435,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:436,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:436,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:437,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:437,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:438,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:438,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:439,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:439,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:440,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - NodeData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 441
    functionName: ClusterRedisService::ClusterRedisService
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - ClusterCommandHandler::ClusterCommandHandler
    - KVCommandHandler::KVCommandHandler
    - AskingHandler::AskingHandler
    - get
    - AddCommandHandler
    linkageType: ''
    returnType: void
    signature: void ClusterRedisService(NodeData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - e
    argTypes:
    - bthread::CountdownEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 451
    functionName: Done::Done
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Done(bthread::CountdownEvent* e)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    functionName: Done::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:460,1
    - Dst: ClusterMeta::ClusterMeta
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:460,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:461,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:463,1
    - Dst: RedisClusterChannelTest::StartServer
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:466,1
    - Dst: RedisClusterChannelTest::StartServer
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:467,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 468
    functionName: RedisClusterChannelTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset
    - ClusterMeta::ClusterMeta
    - RedisClusterChannelTest::StartServer
    - get
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:472,1
    - Dst: Join
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:475,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 477
    functionName: RedisClusterChannelTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - 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: RedisClusterChannelTest::SeedList
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string SeedList() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:487,1
    - Dst: brpc::RedisClusterChannel*::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:487,1
    - Dst: RedisClusterChannelTest::SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:487,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - channel
    argTypes:
    - brpc::RedisClusterChannel*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 488
    functionName: RedisClusterChannelTest::InitChannel
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - ASSERT_EQ
    - RedisClusterChannelTest::SeedList
    - brpc::RedisClusterChannel*::Init
    linkageType: ''
    returnType: void
    signature: void InitChannel(brpc::RedisClusterChannel* channel, int max_redirect
      = 5)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:494,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:494,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:494,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - node_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 499
    functionName: RedisClusterChannelTest::FindKeyForNode
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - HashSlot
    - OwnerBySlot
    linkageType: ''
    returnType: std::string
    signature: std::string FindKeyForNode(int node_id) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:503,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:504,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:507,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:507,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:507,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:508,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:508,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - node_id
    - count
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 512
    functionName: RedisClusterChannelTest::FindKeysForNode
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - HashSlot
    - std::vector::size
    - OwnerBySlot
    - std::ostringstream::str
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> FindKeysForNode(int node_id, size_t count)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:518,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:519,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:519,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:520,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - node_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 524
    functionName: RedisClusterChannelTest::FindHashTagForNode
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - HashSlot
    - OwnerBySlot
    linkageType: ''
    returnType: std::string
    signature: std::string FindHashTagForNode(int node_id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:528,1
    - Dst: ClusterRedisService::ClusterRedisService
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:531,1
    - Dst: Start
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:531,1
    - Dst: listen_address
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:533,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 527
    functionDepth: 2
    functionLinenumber: 527
    functionLinenumberEnd: 535
    functionName: RedisClusterChannelTest::StartServer
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached:
    - Start
    - listen_address
    - ASSERT_EQ
    - std::ostringstream::str
    - ClusterRedisService::ClusterRedisService
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void StartServer(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:544,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:545,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:547,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:548,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:551,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:552,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:553,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:555,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:556,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:556,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:557,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:557,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:558,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:559,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:559,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:563,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:564,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:567,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:568,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:568,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:569,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:569,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:570,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:571,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:572,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:572,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:573,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:573,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:573,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:577,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:578,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:579,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:581,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:582,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:582,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:583,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:583,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:587,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:588,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:591,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:592,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:592,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:593,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:593,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 543
    functionDepth: 2
    functionLinenumber: 543
    functionLinenumberEnd: 595
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, basic_routing_and_multi_key_commands)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:598,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:599,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:601,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:604,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:608,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:609,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:611,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:611,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:611,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:612,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:613,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:613,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:614,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:614,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:615,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:616,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:616,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 597
    functionDepth: 2
    functionLinenumber: 597
    functionLinenumberEnd: 617
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, moved_redirection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:620,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:621,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:626,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:628,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:632,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:633,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:635,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:635,1
    - Dst: ask_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:635,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:636,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:637,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:637,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:638,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:638,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:639,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:640,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 619
    functionDepth: 2
    functionLinenumber: 619
    functionLinenumberEnd: 641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - ask_key::c_str
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, ask_redirection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:644,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:645,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:650,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:652,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:657,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:658,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:659,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:660,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:660,1
    - Dst: ask_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:660,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:661,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:662,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:662,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:663,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:663,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:664,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:665,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:665,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 643
    functionDepth: 2
    functionLinenumber: 643
    functionLinenumberEnd: 667
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - ask_key::c_str
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, ask_redirection_does_not_override_slot_cache)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:671,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:672,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:674,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:675,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:676,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:677,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:678,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:678,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:678,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:679,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:680,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:680,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:680,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:681,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:682,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:682,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 669
    functionDepth: 2
    functionLinenumber: 669
    functionLinenumberEnd: 683
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, cluster_nodes_fallback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:686,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:687,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:689,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:690,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:693,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:694,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:699,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:699,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:700,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:701,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:701,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:702,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:702,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:703,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:703,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:704,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:705,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:705,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:709,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:710,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:711,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:712,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:712,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:712,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:713,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:714,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:714,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:715,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:715,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:716,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:717,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:717,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 685
    functionDepth: 2
    functionLinenumber: 685
    functionLinenumberEnd: 719
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisRequest::AddCommandByComponents
    - std::string::c_str
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, eval_and_evalsha)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:722,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:723,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:725,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:726,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:727,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:728,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:729,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:729,1
    - Dst: redirect_loop_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:729,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:730,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:731,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:731,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:732,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:732,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 721
    functionDepth: 2
    functionLinenumber: 721
    functionLinenumberEnd: 733
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - redirect_loop_key::c_str
    - brpc::RedisClusterChannel::CallMethod
    - brpc::Controller::ErrorText
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, redirect_retry_limit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:736,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:737,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:739,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:741,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:745,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:746,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:747,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:748,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:748,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:748,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:752,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:753,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:755,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:755,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:756,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:756,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:757,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:757,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:758,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:758,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 735
    functionDepth: 2
    functionLinenumber: 735
    functionLinenumberEnd: 759
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - bthread::CountdownEvent::wait
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_call)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:762,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:763,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:765,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:766,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:768,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:769,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:770,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:771,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:771,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:771,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:772,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:772,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:772,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:778,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:779,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:779,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:780,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:781,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:781,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:782,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:784,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:785,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:786,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:786,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:787,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:787,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:787,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:789,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:789,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:790,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:790,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:791,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:792,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:792,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:794,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:795,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:795,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:796,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:796,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:796,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:797,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:797,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:797,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 761
    functionDepth: 2
    functionLinenumber: 761
    functionLinenumberEnd: 798
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - is_nil
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_order_with_mixed_commands)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:801,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:802,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:804,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:805,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:806,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:807,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:807,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:808,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:808,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:809,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:810,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:810,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:810,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:811,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:812,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:812,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:813,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:813,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:814,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:815,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:815,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 800
    functionDepth: 2
    functionLinenumber: 800
    functionLinenumberEnd: 816
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - std::string
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, transaction_commands_are_not_supported)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:819,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:820,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:823,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:824,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:825,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:829,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:829,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:830,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:831,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:831,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:832,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:832,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:833,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:833,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:834,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:835,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:835,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:839,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:840,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:841,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:845,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:845,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:846,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:847,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:847,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:847,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:848,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:848,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:849,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:849,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:850,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:851,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:851,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 818
    functionDepth: 2
    functionLinenumber: 818
    functionLinenumberEnd: 853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::RedisRequest::AddCommandByComponents
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - std::string
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, eval_argument_validation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:856,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:857,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:858,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:860,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:861,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:862,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:863,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:863,1
    - Dst: redirect_loop_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:863,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:867,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:868,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:870,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:870,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:871,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:871,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 855
    functionDepth: 2
    functionLinenumber: 855
    functionLinenumberEnd: 872
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - bthread::CountdownEvent::wait
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - redirect_loop_key::c_str
    - brpc::RedisClusterChannel::CallMethod
    - brpc::Controller::ErrorText
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_failure_propagation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:875,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:876,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:878,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:881,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:885,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:886,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:888,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:888,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:888,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:889,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:891,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:891,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:892,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:892,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 893
      start: 874
    functionDepth: 2
    functionLinenumber: 874
    functionLinenumberEnd: 893
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, max_redirect_zero_fails_on_single_redirect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:896,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:897,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:899,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:902,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:906,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:907,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:911,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:912,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:913,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:914,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:914,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:914,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:915,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:916,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:916,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:916,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:917,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:918,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:918,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:920,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:920,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:921,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 895
    functionDepth: 2
    functionLinenumber: 895
    functionLinenumberEnd: 922
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - nodes_calls::load
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_GT
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - slots_calls::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, redirect_with_refresh_failure_still_returns_reply)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:925,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:926,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:928,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:934,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:938,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:938,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:946,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:951,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:952,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:953,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:954,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:954,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:954,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:955,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:955,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:956,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:956,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:956,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:958,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:959,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:959,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:959,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:960,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:961,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:962,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:963,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:963,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 924
    functionDepth: 2
    functionLinenumber: 924
    functionLinenumberEnd: 964
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - std::string::empty
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - OwnerBySlot
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - std::ostringstream::str
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - HashSlot
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_with_ask_and_moved_keeps_order)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:969,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:970,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:971,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:971,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:974,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:976,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:979,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:983,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:984,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:985,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:986,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:986,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:986,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:987,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:988,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:988,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:989,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:989,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:990,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:990,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 991
      start: 966
    functionDepth: 2
    functionLinenumber: 966
    functionLinenumberEnd: 991
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - nodes_calls::load
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_GT
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - slots_calls::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, fallback_to_nodes_then_recover_to_slots)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:995,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:996,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:998,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:999,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1000,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1001,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1002,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1002,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1002,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1003,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1004,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1004,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1005,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 993
    functionDepth: 2
    functionLinenumber: 993
    functionLinenumberEnd: 1006
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, cluster_slots_empty_host_uses_seed_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1009,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1013,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1013,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1014
      start: 1008
    functionDepth: 1
    functionLinenumber: 1008
    functionLinenumberEnd: 1014
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - ASSERT_EQ
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_accepts_whitespace_in_seed_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1017,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1018,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1018,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1019
      start: 1016
    functionDepth: 1
    functionLinenumber: 1016
    functionLinenumberEnd: 1019
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::Init
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_with_invalid_seed_tokens_should_fail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1025,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1026,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1028,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1028,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1028,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1029
      start: 1021
    functionDepth: 1
    functionLinenumber: 1021
    functionLinenumberEnd: 1029
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - ASSERT_NE
    - brpc::RedisClusterChannel::Init
    - brpc::RedisClusterChannel::RedisClusterChannel
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_fails_when_cluster_topology_unavailable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1032,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1033,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1035,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1036,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1037,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1038,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1038,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1039,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1040,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1040,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1040,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1041,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1041,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1042,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1042,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1043,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1031
    functionDepth: 2
    functionLinenumber: 1031
    functionLinenumberEnd: 1044
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, ping_without_key_uses_any_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1047,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1048,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1050,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1051,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1052,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1053,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1053,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1054,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1054,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1055,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1055,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1056,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1058,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1058,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1059,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1059,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1060,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1060,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1061,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1061,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1062,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1062,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1063
      start: 1046
    functionDepth: 2
    functionLinenumber: 1046
    functionLinenumberEnd: 1063
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, wrong_argument_count_commands_return_error_reply)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1066,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1067,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1069,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1072,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1073,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1074,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1075,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1075,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1075,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1076,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1078,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1078,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1078,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1079,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1079,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1080,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1080,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1081,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1082,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1082,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1083
      start: 1065
    functionDepth: 2
    functionLinenumber: 1065
    functionLinenumberEnd: 1083
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - std::string
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, malformed_redirect_error_is_returned_directly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1094,1
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1096,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1097,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1099,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1100,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1101,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1103,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1103,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1103,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1105,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1105,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1106,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1085
    functionDepth: 2
    functionLinenumber: 1085
    functionLinenumberEnd: 1107
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, cluster_nodes_parser_ignores_migration_tokens)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1110,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1111,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1113,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1114,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1119,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1119,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1120,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1122,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1122,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1123,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1124,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1125,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1126
      start: 1109
    functionDepth: 2
    functionLinenumber: 1109
    functionLinenumberEnd: 1126
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::RedisRequest::AddCommandByComponents
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, eval_numkeys_zero_routes_without_slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1129,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1130,1
    - Dst: FindKeysForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1133,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1133,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1136,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1137,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1138,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1142,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1143,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1145,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1145,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1146,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1147,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1148,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1149,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1151,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1151,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1152,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1153,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1153,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1154,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1155,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1155,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1158,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1159,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1161,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1161,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1162,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1163,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1163,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1164,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1165,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1165,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1168,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1169,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1171,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1171,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1171,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1172,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1173,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1174,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1176
      start: 1128
    functionDepth: 2
    functionLinenumber: 1128
    functionLinenumberEnd: 1176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - std::vector::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - FindKeysForNode
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, mset_stops_after_subcommand_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1179,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1180,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1182,1
    - Dst: FindKeysForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1184,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1184,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1189,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1193,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1199,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1200,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1201,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1202,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1202,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1203,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1203,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1203,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1204,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1206,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1206,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1207,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1208,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1208,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1209,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1210,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1210,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1212,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1213,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1215,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1215,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1215,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1217,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1217,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1218,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1219,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1220
      start: 1178
    functionDepth: 2
    functionLinenumber: 1178
    functionLinenumberEnd: 1220
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - std::vector::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - FindKeysForNode
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, integer_aggregate_stops_after_subcommand_error)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1223,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1224,1
    - Dst: FindKeysForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1227,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1227,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1230,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1238,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1253,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1253,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1254,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1254,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1255,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1255,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1256,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1256,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1269,1
    - Dst: AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1269,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1269,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1270,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1271,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1272,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1273,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1274,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1277,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1280,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1280,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1281,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1282,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1283,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1283,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1285,1
    - Dst: ask_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1285,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1286,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1286,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1287
      start: 1222
    functionDepth: 2
    functionLinenumber: 1222
    functionLinenumberEnd: 1287
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - moved_error_calls::load
    - FindKeyForNode
    - bthread::CountdownEvent::wait
    - ASSERT_EQ
    - std::vector::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ask_error_calls::load
    - Done::Done
    - FindKeysForNode
    - brpc::RedisClusterChannel::RedisClusterChannel
    - get
    - reply
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_GT
    - AddCommand
    - reset
    - brpc::RedisResponse::RedisResponse
    - reply_size
    - ErrorText
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_concurrent_calls_with_mixed_redirections)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1290,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1291,1
    - Dst: FindHashTagForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1293,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1297,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1298,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1302,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1304,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1304,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1305,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1305,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1306,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1307,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1307,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1308,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1309,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1309,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1310,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1310,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1311,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1311,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1289
    functionDepth: 2
    functionLinenumber: 1289
    functionLinenumberEnd: 1312
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - moved_error_calls::load
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - FindHashTagForNode
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_EQ
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, hashtag_keys_route_for_multi_key_commands)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1315,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1316,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1318,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1320,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1321,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1323,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1323,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1323,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1324,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1326,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1326,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1327,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1327,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1328,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1314
    functionDepth: 2
    functionLinenumber: 1314
    functionLinenumberEnd: 1329
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, missing_key_get_returns_nil_reply)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1332,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1333,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1335,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1336,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1342,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1346,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1346,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1349,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1354,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1355,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1356,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1357,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1357,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1357,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1358,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1358,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1358,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1359,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1359,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1359,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1360,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1360,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1360,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1361,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1363,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1363,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1364,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1364,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1365,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1366,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1366,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1367,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1368,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1368,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1369,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1370,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1371,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1372,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1372,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1373
      start: 1331
    functionDepth: 2
    functionLinenumber: 1331
    functionLinenumberEnd: 1373
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - std::string::empty
    - ASSERT_TRUE
    - std::string
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - OwnerBySlot
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - std::ostringstream::str
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    - HashSlot
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_with_string_nil_error_and_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1376,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1377,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1379,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1380,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1381,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1382,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1383,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1383,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1384,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1385
      start: 1375
    functionDepth: 2
    functionLinenumber: 1375
    functionLinenumberEnd: 1385
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, empty_request_should_fail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1388,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1389,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1391,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1392,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1395,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1399,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1400,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1402,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1402,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1402,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1403,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1403,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1403,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1404,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1406,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1406,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1407,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1407,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1408,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1408,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1409,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1410,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1411,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1412,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1413
      start: 1387
    functionDepth: 2
    functionLinenumber: 1387
    functionLinenumberEnd: 1413
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_continues_after_command_error_reply)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1416,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1417,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1419,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1422,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1428,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1429,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1430,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1431,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1431,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1431,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1432,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1433,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1433,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1434,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1434,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1436,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1437,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1438,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1439,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1439,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1439,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1440,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1441,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1441,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1442,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1444,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1445
      start: 1415
    functionDepth: 2
    functionLinenumber: 1415
    functionLinenumberEnd: 1445
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - moved_error_calls::load
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, redirect_updates_slot_cache_even_when_refresh_fails)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1448,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1453,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1453,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1453,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1456,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1459,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1463,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1465,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1466
      start: 1447
    functionDepth: 1
    functionLinenumber: 1447
    functionLinenumberEnd: 1466
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - ASSERT_TRUE
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - brpc::RedisClusterChannel::Init
    - ASSERT_EQ
    - brpc::RedisClusterChannel::RedisClusterChannel
    - nodes_calls::load
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_fallbacks_to_nodes_when_slots_fail)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1469,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1474,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1474,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1474,1
    - Dst: accept_requests_on_wrong_owner::store
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1476,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1478,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1479,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1479,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1482,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1486,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1490,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1491,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1493,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1493,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1493,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1494,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1495,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1495,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1496,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1496,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1497,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1498,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1498,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1500,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1501,1
    - Dst: slots_override_slot::store
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1502,1
    - Dst: slots_override_owner::store
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1503,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1507,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1508,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1509,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1510,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1510,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1510,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1511,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1512,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1512,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1513,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1513,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1514,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1514,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1515,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1519,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1521,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1522,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1523,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1523,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1524
      start: 1468
    functionDepth: 1
    functionLinenumber: 1468
    functionLinenumberEnd: 1524
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - moved_error_calls::load
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - slots_override_owner::store
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - static_cast<int>
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - SeedList
    - accept_requests_on_wrong_owner::store
    - BAIDU_SCOPED_LOCK
    - std::string::c_str
    - slots_override_slot::store
    - brpc::RedisClusterChannel::Init
    - brpc::Controller::Failed
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - OwnerBySlot
    - ASSERT_GT
    - brpc::RedisResponse::reply
    - bthread_usleep
    - brpc::RedisResponse::RedisResponse
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - HashSlot
    - slots_calls::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_updates_slot_cache_on_topology_change)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1527,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1528,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1530,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1531,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1533,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1534,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1536,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1536,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1536,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1537,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1537,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1537,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1543,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1544,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1546,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1546,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1547,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1548,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1549,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1549,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1550,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1551,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1551,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1552,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1552,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1553,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1554,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1555
      start: 1526
    functionDepth: 2
    functionLinenumber: 1526
    functionLinenumberEnd: 1555
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - bthread::CountdownEvent::wait
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_pipeline_mixed_commands)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1558,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1563,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1563,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1563,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1565,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1568,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1572,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1574,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1575
      start: 1557
    functionDepth: 1
    functionLinenumber: 1557
    functionLinenumberEnd: 1575
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - ASSERT_TRUE
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - brpc::RedisClusterChannel::Init
    - ASSERT_EQ
    - brpc::RedisClusterChannel::RedisClusterChannel
    - slots_calls::load
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_updates_topology_in_background)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1579,1
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1581,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1585,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1585,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1585,1
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1587,1
    - Dst: std::chrono::duration_cast<std::chrono::milliseconds>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1589,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1590,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1591
      start: 1577
    functionDepth: 1
    functionLinenumber: 1577
    functionLinenumberEnd: 1591
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - brpc::RedisClusterChannel::Init
    - ASSERT_EQ
    - std::chrono::duration_cast<std::chrono::milliseconds>
    - brpc::RedisClusterChannel::RedisClusterChannel
    - ASSERT_LT
    - butil::nanoseconds_from_now
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_thread_stops_quickly_on_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1594,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1595,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1596
      start: 1593
    functionDepth: 1
    functionLinenumber: 1593
    functionLinenumberEnd: 1596
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::Init
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_with_empty_seed_should_fail)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:79,1
    - Dst: find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:81,1
    - Dst: substr
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:83,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:87,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:88,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:89,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:90,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 93
    functionName: HashSlot
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 8
    functionsReached:
    - substr
    - find
    - static_cast<uint16_t>
    - static_cast<uint8_t>
    - std::string::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t HashSlot(const std::string& key)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - slot
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 97
    functionName: OwnerBySlot
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int OwnerBySlot(int slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 136
    functionName: ClusterMeta
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClusterMeta()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:139,1
    - Dst: end
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:140,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:143,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:143,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    functionName: OwnerOfKey
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached:
    - HashSlot
    - OwnerBySlot
    - find
    - end
    linkageType: ''
    returnType: int
    signature: int OwnerOfKey(const std::string& key) const
  - 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: Session::Session
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Session()
  - 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: Session::Destroy
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Destroy() override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Session*>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:165,1
    - Dst: brpc::RedisConnContext*::get_session
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:165,1
    - Dst: Session::Session
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:167,1
    - Dst: brpc::RedisConnContext*::reset_session
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:168,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - brpc::RedisConnContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 161
    functionDepth: 1
    functionLinenumber: 161
    functionLinenumberEnd: 171
    functionName: GetOrCreateSession
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 2
    functionsReached:
    - static_cast<Session*>
    - Session::Session
    - brpc::RedisConnContext*::reset_session
    - brpc::RedisConnContext*::get_session
    linkageType: ''
    returnType: Session
    signature: Session * GetOrCreateSession(brpc::RedisConnContext* ctx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:174,1
    - Dst: substr
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:178,1
    - Dst: atoi
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:179,1
    - Dst: substr
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' endpoint'
    - host
    - port
    argTypes:
    - std::string
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 181
    functionName: ParseEndpoint
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached:
    - substr
    - rfind
    - atoi
    linkageType: ''
    returnType: bool
    signature: bool ParseEndpoint(const std::string& endpoint, std::string* host,
      int* port)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetOrCreateSession
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:189,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ctx
    - output
    argTypes:
    - brpc::RedisConnContext*
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 195
    functionName: AskingHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - GetOrCreateSession
    - brpc::RedisReply*::SetStatus
    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*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - meta
    argTypes:
    - ClusterMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 200
    functionName: ClusterCommandHandler::ClusterCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ClusterCommandHandler(ClusterMeta* meta)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:206,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:207,1
    - Dst: slots_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:211,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:213,1
    - Dst: slots_override_slot::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:217,1
    - Dst: slots_override_owner::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:218,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:220,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:235,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:235,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:237,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:237,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:239,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:239,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:241,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:241,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:243,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:243,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:245,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:245,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:247,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:247,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:249,1
    - Dst: ClusterCommandHandler::SlotRange
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:249,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:253,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:253,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:254,1
    - Dst: ClusterCommandHandler::FillSlotEntry
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:255,1
    - Dst: brpc::RedisReply*::SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:261,1
    - Dst: ClusterCommandHandler::FillSlotEntry
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:262,1
    - Dst: ClusterCommandHandler::FillSlotEntry
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:264,1
    - Dst: nodes_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:269,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:271,1
    - Dst: custom_nodes_payload::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:274,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:275,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:283,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:283,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:286,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 60
    argCount: 2
    argNames:
    - ' args'
    - output
    argTypes:
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 202
    functionDepth: 2
    functionLinenumber: 202
    functionLinenumberEnd: 288
    functionName: ClusterCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisReply*::SetArray
    - size
    - std::vector::push_back
    - brpc::RedisReply*::SetString
    - ClusterCommandHandler::SlotRange
    - ClusterCommandHandler::FillSlotEntry
    - custom_nodes_payload::empty
    - std::ostringstream::str
    - slots_override_owner::load
    - OwnerBySlot
    - std::vector::size
    - slots_calls::fetch_add
    - brpc::RedisReply*::SetError
    - nodes_calls::fetch_add
    - slots_override_slot::load
    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*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - s
    - e
    - o
    argTypes:
    - int
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 229
    functionName: ClusterCommandHandler::SlotRange
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SlotRange(int s, int e, int o)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ParseEndpoint
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:296,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:297,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:298,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:299,1
    - Dst: SetArray
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:300,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:302,1
    - Dst: SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:304,1
    - Dst: SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 5
    argNames:
    - ' reply'
    - start
    - end
    - ' endpoint'
    - empty_host
    argTypes:
    - brpc::RedisReply
    - int
    - int
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 307
    functionName: ClusterCommandHandler::FillSlotEntry
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 2
    functionsReached:
    - SetString
    - SetInteger
    - SetArray
    - ParseEndpoint
    linkageType: ''
    returnType: void
    signature: "void FillSlotEntry(brpc::RedisReply& reply, int start, int end,\n
      \                             const std::string& endpoint,\n                              bool
      empty_host)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - data
    argTypes:
    - NodeData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 315
    functionDepth: 0
    functionLinenumber: 315
    functionLinenumberEnd: 315
    functionName: KVCommandHandler::KVCommandHandler
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void KVCommandHandler(NodeData* data)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:321,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:322,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:325,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:327,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:331,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:334,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:335,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:339,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:340,1
    - Dst: meta::OwnerOfKey
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:341,1
    - Dst: meta::forced_error_by_key::find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:344,1
    - Dst: meta::forced_error_by_key::end
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:345,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:346,1
    - Dst: meta::redirect_loop_key::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:350,1
    - Dst: meta::moved_error_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:353,1
    - Dst: brpc::RedisReply*::FormatError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:354,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:355,1
    - Dst: meta::ask_error_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:362,1
    - Dst: brpc::RedisReply*::FormatError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:363,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:364,1
    - Dst: GetOrCreateSession
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:368,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:370,1
    - Dst: meta::accept_requests_on_wrong_owner::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:379,1
    - Dst: meta::moved_error_calls::fetch_add
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:381,1
    - Dst: brpc::RedisReply*::FormatError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:382,1
    - Dst: c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:382,1
    - Dst: size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:387,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:388,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:391,1
    - Dst: as_string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:392,1
    - Dst: brpc::RedisReply*::SetStatus
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:393,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:397,1
    - Dst: kv::find
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:398,1
    - Dst: kv::end
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:399,1
    - Dst: brpc::RedisReply*::SetNullString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:400,1
    - Dst: brpc::RedisReply*::SetString
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:402,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:407,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:408,1
    - Dst: kv::erase
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:408,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:412,1
    - Dst: brpc::RedisReply*::SetInteger
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:413,1
    - Dst: kv::count
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:413,1
    - Dst: brpc::RedisReply*::SetError
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:417,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 77
    argCount: 3
    argNames:
    - ctx
    - ' args'
    - output
    argTypes:
    - brpc::RedisConnContext*
    - std::vector<butil::StringPiece>
    - brpc::RedisReply*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 317
    functionDepth: 2
    functionLinenumber: 317
    functionLinenumberEnd: 419
    functionName: KVCommandHandler::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - meta::forced_error_by_key::end
    - empty
    - meta::moved_error_calls::fetch_add
    - brpc::RedisReply*::SetStatus
    - meta::forced_error_by_key::find
    - brpc::RedisReply*::FormatError
    - brpc::RedisReply*::SetInteger
    - GetOrCreateSession
    - as_string
    - kv::find
    - c_str
    - brpc::RedisReply*::SetError
    - size
    - kv::erase
    - BAIDU_SCOPED_LOCK
    - brpc::RedisReply*::SetString
    - meta::OwnerOfKey
    - meta::ask_error_calls::fetch_add
    - meta::redirect_loop_key::empty
    - brpc::RedisReply*::SetNullString
    - meta::accept_requests_on_wrong_owner::load
    - kv::count
    - kv::end
    - HashSlot
    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*/) override"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: AskingHandler::AskingHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:428,1
    - Dst: ClusterCommandHandler::ClusterCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:429,1
    - Dst: KVCommandHandler::KVCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:430,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:431,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:431,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:432,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:432,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:433,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:433,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:434,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:434,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:435,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:435,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:436,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:436,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:437,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:437,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:438,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:438,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:439,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:439,1
    - Dst: AddCommandHandler
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:440,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 1
    argNames:
    - data
    argTypes:
    - NodeData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 441
    functionName: ClusterRedisService::ClusterRedisService
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached:
    - ClusterCommandHandler::ClusterCommandHandler
    - KVCommandHandler::KVCommandHandler
    - AskingHandler::AskingHandler
    - get
    - AddCommandHandler
    linkageType: ''
    returnType: void
    signature: void ClusterRedisService(NodeData* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - e
    argTypes:
    - bthread::CountdownEvent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 451
    functionDepth: 0
    functionLinenumber: 451
    functionLinenumberEnd: 451
    functionName: Done::Done
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Done(bthread::CountdownEvent* e)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: signal
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:452,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    functionName: Done::Run
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - signal
    linkageType: ''
    returnType: void
    signature: void Run() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:460,1
    - Dst: ClusterMeta::ClusterMeta
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:460,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:461,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:463,1
    - Dst: RedisClusterChannelTest::StartServer
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:466,1
    - Dst: RedisClusterChannelTest::StartServer
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:467,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 459
    functionDepth: 3
    functionLinenumber: 459
    functionLinenumberEnd: 468
    functionName: RedisClusterChannelTest::SetUp
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - reset
    - ClusterMeta::ClusterMeta
    - RedisClusterChannelTest::StartServer
    - get
    linkageType: ''
    returnType: void
    signature: void SetUp() override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:472,1
    - Dst: Join
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:475,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 477
    functionName: RedisClusterChannelTest::TearDown
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void TearDown() override
  - 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: RedisClusterChannelTest::SeedList
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string SeedList() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:484,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:487,1
    - Dst: brpc::RedisClusterChannel*::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:487,1
    - Dst: RedisClusterChannelTest::SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:487,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - channel
    argTypes:
    - brpc::RedisClusterChannel*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 488
    functionName: RedisClusterChannelTest::InitChannel
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - ASSERT_EQ
    - RedisClusterChannelTest::SeedList
    - brpc::RedisClusterChannel*::Init
    linkageType: ''
    returnType: void
    signature: void InitChannel(brpc::RedisClusterChannel* channel, int max_redirect
      = 5)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:494,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:494,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:494,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:495,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - node_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 499
    functionName: RedisClusterChannelTest::FindKeyForNode
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - HashSlot
    - OwnerBySlot
    linkageType: ''
    returnType: std::string
    signature: std::string FindKeyForNode(int node_id) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:503,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:504,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:507,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:507,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:507,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:508,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:508,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - node_id
    - count
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 512
    functionName: RedisClusterChannelTest::FindKeysForNode
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - HashSlot
    - std::vector::size
    - OwnerBySlot
    - std::ostringstream::str
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> FindKeysForNode(int node_id, size_t count)
      const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:518,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:519,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:519,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:520,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - node_id
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 514
    functionDepth: 1
    functionLinenumber: 514
    functionLinenumberEnd: 524
    functionName: RedisClusterChannelTest::FindHashTagForNode
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - HashSlot
    - OwnerBySlot
    linkageType: ''
    returnType: std::string
    signature: std::string FindHashTagForNode(int node_id) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ServerOptions::ServerOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:528,1
    - Dst: ClusterRedisService::ClusterRedisService
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:531,1
    - Dst: Start
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:531,1
    - Dst: listen_address
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:533,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:534,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 535
      start: 527
    functionDepth: 2
    functionLinenumber: 527
    functionLinenumberEnd: 535
    functionName: RedisClusterChannelTest::StartServer
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 2
    functionsReached:
    - Start
    - listen_address
    - ASSERT_EQ
    - std::ostringstream::str
    - ClusterRedisService::ClusterRedisService
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: void
    signature: void StartServer(int index)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:544,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:545,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:547,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:548,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:551,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:552,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:553,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:554,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:555,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:556,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:556,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:556,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:557,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:557,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:558,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:558,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:559,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:559,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:563,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:564,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:565,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:566,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:567,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:568,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:568,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:568,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:569,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:569,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:570,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:570,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:571,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:572,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:572,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:573,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:573,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:573,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:577,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:578,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:579,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:580,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:581,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:582,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:582,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:583,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:583,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:587,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:588,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:589,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:590,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:591,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:592,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:592,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:592,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:593,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:593,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 543
    functionDepth: 2
    functionLinenumber: 543
    functionLinenumberEnd: 595
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, basic_routing_and_multi_key_commands)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:598,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:599,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:601,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:604,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:608,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:609,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:610,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:611,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:611,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:611,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:612,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:613,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:613,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:613,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:614,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:614,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:615,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:615,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:616,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:616,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 597
    functionDepth: 2
    functionLinenumber: 597
    functionLinenumberEnd: 617
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, moved_redirection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:620,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:621,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:626,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:628,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:632,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:633,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:634,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:635,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:635,1
    - Dst: ask_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:635,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:636,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:637,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:637,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:638,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:638,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:639,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:640,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 619
    functionDepth: 2
    functionLinenumber: 619
    functionLinenumberEnd: 641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - ask_key::c_str
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, ask_redirection)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:644,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:645,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:650,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:652,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:657,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:658,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:659,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:660,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:660,1
    - Dst: ask_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:660,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:661,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:662,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:662,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:663,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:663,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:664,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:664,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:665,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:665,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 643
    functionDepth: 2
    functionLinenumber: 643
    functionLinenumberEnd: 667
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - ask_key::c_str
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, ask_redirection_does_not_override_slot_cache)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:671,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:672,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:674,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:675,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:676,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:677,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:678,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:678,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:678,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:679,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:680,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:680,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:680,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:681,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:682,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:682,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 669
    functionDepth: 2
    functionLinenumber: 669
    functionLinenumberEnd: 683
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, cluster_nodes_fallback)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:686,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:687,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:689,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:690,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:693,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:694,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:695,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:699,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:699,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:700,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:701,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:701,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:701,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:702,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:702,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:703,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:703,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:704,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:705,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:705,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:709,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:710,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:711,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:712,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:712,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:712,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:713,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:714,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:714,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:714,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:715,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:715,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:716,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:717,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:717,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 719
      start: 685
    functionDepth: 2
    functionLinenumber: 685
    functionLinenumberEnd: 719
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisRequest::AddCommandByComponents
    - std::string::c_str
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, eval_and_evalsha)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:722,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:723,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:725,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:726,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:727,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:728,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:729,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:729,1
    - Dst: redirect_loop_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:729,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:730,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:731,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:731,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:732,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:732,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 721
    functionDepth: 2
    functionLinenumber: 721
    functionLinenumberEnd: 733
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - redirect_loop_key::c_str
    - brpc::RedisClusterChannel::CallMethod
    - brpc::Controller::ErrorText
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, redirect_retry_limit)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:736,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:737,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:739,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:741,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:745,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:746,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:747,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:748,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:748,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:748,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:752,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:753,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:755,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:755,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:755,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:756,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:756,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:757,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:757,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:758,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:758,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 759
      start: 735
    functionDepth: 2
    functionLinenumber: 735
    functionLinenumberEnd: 759
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - bthread::CountdownEvent::wait
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_call)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:762,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:763,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:765,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:766,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:768,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:769,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:770,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:771,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:771,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:771,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:772,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:772,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:772,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:773,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:774,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:775,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:776,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:778,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:779,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:779,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:779,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:780,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:780,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:781,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:781,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:782,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:782,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:784,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:785,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:785,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:786,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:786,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:786,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:787,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:787,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:787,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:789,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:789,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:790,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:790,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:791,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:791,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:792,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:792,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:794,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:794,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:795,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:795,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:796,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:796,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:796,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:797,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:797,1
    - Dst: is_nil
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:797,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 761
    functionDepth: 2
    functionLinenumber: 761
    functionLinenumberEnd: 798
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - is_nil
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_order_with_mixed_commands)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:801,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:802,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:804,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:805,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:806,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:807,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:807,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:808,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:808,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:809,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:810,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:810,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:810,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:811,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:811,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:812,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:812,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:813,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:813,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:814,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:815,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:815,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 800
    functionDepth: 2
    functionLinenumber: 800
    functionLinenumberEnd: 816
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - std::string
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, transaction_commands_are_not_supported)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:819,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:820,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:823,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:824,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:825,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:829,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:829,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:830,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:831,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:831,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:831,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:832,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:832,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:833,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:833,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:834,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:835,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:835,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:839,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:840,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:841,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:845,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:845,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:846,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:847,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:847,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:847,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:848,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:848,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:849,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:849,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:850,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:851,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:851,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 818
    functionDepth: 2
    functionLinenumber: 818
    functionLinenumberEnd: 853
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::RedisRequest::AddCommandByComponents
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - std::string
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, eval_argument_validation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:856,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:857,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:858,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:860,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:861,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:862,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:863,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:863,1
    - Dst: redirect_loop_key::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:863,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:867,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:868,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:870,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:870,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:871,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:871,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 855
    functionDepth: 2
    functionLinenumber: 855
    functionLinenumberEnd: 872
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - bthread::CountdownEvent::wait
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - redirect_loop_key::c_str
    - brpc::RedisClusterChannel::CallMethod
    - brpc::Controller::ErrorText
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_failure_propagation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:875,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:876,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:878,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:881,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:885,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:886,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:887,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:888,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:888,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:888,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:889,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:891,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:891,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:892,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:892,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 893
      start: 874
    functionDepth: 2
    functionLinenumber: 874
    functionLinenumberEnd: 893
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, max_redirect_zero_fails_on_single_redirect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:896,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:897,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:899,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:902,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:906,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:907,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:911,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:912,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:913,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:914,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:914,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:914,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:915,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:916,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:916,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:916,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:917,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:917,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:918,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:918,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:920,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:920,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:921,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:921,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 895
    functionDepth: 2
    functionLinenumber: 895
    functionLinenumberEnd: 922
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - nodes_calls::load
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_GT
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - slots_calls::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, redirect_with_refresh_failure_still_returns_reply)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:925,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:926,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:928,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:933,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:934,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:938,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:938,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:946,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:951,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:952,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:953,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:954,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:954,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:954,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:955,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:955,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:955,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:956,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:956,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:956,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:958,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:959,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:959,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:959,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:960,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:960,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:961,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:961,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:962,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:962,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:963,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:963,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 924
    functionDepth: 2
    functionLinenumber: 924
    functionLinenumberEnd: 964
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - std::string::empty
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - OwnerBySlot
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - std::ostringstream::str
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - HashSlot
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_with_ask_and_moved_keeps_order)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:969,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:970,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:971,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:971,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:974,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:976,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:979,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:983,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:984,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:985,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:986,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:986,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:986,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:987,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:988,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:988,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:988,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:989,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:989,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:990,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:990,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 991
      start: 966
    functionDepth: 2
    functionLinenumber: 966
    functionLinenumberEnd: 991
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - nodes_calls::load
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_GT
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - slots_calls::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, fallback_to_nodes_then_recover_to_slots)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:995,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:996,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:998,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:999,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1000,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1001,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1002,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1002,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1002,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1003,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1004,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1004,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1004,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1005,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1005,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1006
      start: 993
    functionDepth: 2
    functionLinenumber: 993
    functionLinenumberEnd: 1006
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, cluster_slots_empty_host_uses_seed_host)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1009,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1010,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1013,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1013,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1014
      start: 1008
    functionDepth: 1
    functionLinenumber: 1008
    functionLinenumberEnd: 1014
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - ASSERT_EQ
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::Init
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_accepts_whitespace_in_seed_list)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1017,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1018,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1018,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1019
      start: 1016
    functionDepth: 1
    functionLinenumber: 1016
    functionLinenumberEnd: 1019
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::Init
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_with_invalid_seed_tokens_should_fail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1025,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1026,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1028,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1028,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1028,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1029
      start: 1021
    functionDepth: 1
    functionLinenumber: 1021
    functionLinenumberEnd: 1029
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - ASSERT_NE
    - brpc::RedisClusterChannel::Init
    - brpc::RedisClusterChannel::RedisClusterChannel
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_fails_when_cluster_topology_unavailable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1032,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1033,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1035,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1036,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1037,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1038,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1038,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1039,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1040,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1040,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1040,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1041,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1041,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1042,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1042,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1043,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1031
    functionDepth: 2
    functionLinenumber: 1031
    functionLinenumberEnd: 1044
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, ping_without_key_uses_any_endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1047,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1048,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1050,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1051,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1052,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1053,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1053,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1054,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1054,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1055,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1055,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1056,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1058,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1058,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1058,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1059,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1059,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1060,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1060,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1061,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1061,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1062,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1062,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1063
      start: 1046
    functionDepth: 2
    functionLinenumber: 1046
    functionLinenumberEnd: 1063
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, wrong_argument_count_commands_return_error_reply)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1066,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1067,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1069,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1072,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1073,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1074,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1075,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1075,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1075,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1076,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1078,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1078,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1078,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1079,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1079,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1080,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1080,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1081,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1082,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1082,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1083
      start: 1065
    functionDepth: 2
    functionLinenumber: 1065
    functionLinenumberEnd: 1083
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - std::string
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, malformed_redirect_error_is_returned_directly)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1094,1
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1096,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1097,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1099,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1100,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1101,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1102,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1103,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1103,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1103,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1104,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1105,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1105,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1105,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1106,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1085
    functionDepth: 2
    functionLinenumber: 1085
    functionLinenumberEnd: 1107
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    - std::ostringstream::str
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, cluster_nodes_parser_ignores_migration_tokens)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1110,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1111,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1113,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1114,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1115,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1119,1
    - Dst: brpc::RedisRequest::AddCommandByComponents
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1119,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1120,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1122,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1122,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1123,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1123,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1124,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1125,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1126
      start: 1109
    functionDepth: 2
    functionLinenumber: 1109
    functionLinenumberEnd: 1126
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - brpc::RedisRequest::AddCommandByComponents
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, eval_numkeys_zero_routes_without_slot)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1129,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1130,1
    - Dst: FindKeysForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1133,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1133,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1136,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1137,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1138,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1142,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1143,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1144,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1145,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1145,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1146,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1147,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1148,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1149,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1151,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1151,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1151,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1152,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1152,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1153,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1153,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1154,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1155,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1155,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1158,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1159,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1160,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1161,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1161,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1161,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1162,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1163,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1163,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1163,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1164,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1165,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1165,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1168,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1169,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1170,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1171,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1171,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1171,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1172,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1173,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1173,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1174,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1176
      start: 1128
    functionDepth: 2
    functionLinenumber: 1128
    functionLinenumberEnd: 1176
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - std::vector::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - FindKeysForNode
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, mset_stops_after_subcommand_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1179,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1180,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1182,1
    - Dst: FindKeysForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1184,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1184,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1189,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1193,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1199,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1200,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1201,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1202,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1202,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1203,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1203,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1203,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1204,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1206,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1206,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1207,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1207,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1208,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1208,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1209,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1210,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1210,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1212,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1213,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1214,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1215,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1215,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1215,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1216,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1217,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1217,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1217,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1218,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1219,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1219,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1220
      start: 1178
    functionDepth: 2
    functionLinenumber: 1178
    functionLinenumberEnd: 1220
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - std::vector::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - FindKeysForNode
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, integer_aggregate_stops_after_subcommand_error)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1223,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1224,1
    - Dst: FindKeysForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1226,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1227,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1227,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1230,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1238,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1253,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1253,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1254,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1254,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1255,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1255,1
    - Dst: reset
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1256,1
    - Dst: Done::Done
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1256,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1269,1
    - Dst: AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1269,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1269,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1270,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1271,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1272,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1273,1
    - Dst: get
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1274,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1277,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1280,1
    - Dst: Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1280,1
    - Dst: ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1281,1
    - Dst: reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1281,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1282,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1282,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1283,1
    - Dst: reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1283,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1285,1
    - Dst: ask_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1285,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1286,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1286,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1287
      start: 1222
    functionDepth: 2
    functionLinenumber: 1222
    functionLinenumberEnd: 1287
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - moved_error_calls::load
    - FindKeyForNode
    - bthread::CountdownEvent::wait
    - ASSERT_EQ
    - std::vector::size
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - ask_error_calls::load
    - Done::Done
    - FindKeysForNode
    - brpc::RedisClusterChannel::RedisClusterChannel
    - get
    - reply
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_GT
    - AddCommand
    - reset
    - brpc::RedisResponse::RedisResponse
    - reply_size
    - ErrorText
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_concurrent_calls_with_mixed_redirections)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1290,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1291,1
    - Dst: FindHashTagForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1293,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1297,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1298,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1299,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1301,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1302,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1304,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1304,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1304,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1305,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1305,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1306,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1306,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1307,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1307,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1308,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1308,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1309,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1309,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1310,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1310,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1310,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1311,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1311,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1289
    functionDepth: 2
    functionLinenumber: 1289
    functionLinenumberEnd: 1312
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - moved_error_calls::load
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - FindHashTagForNode
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - ASSERT_EQ
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, hashtag_keys_route_for_multi_key_commands)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1315,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1316,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1318,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1320,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1321,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1322,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1323,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1323,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1323,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1324,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1326,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1326,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1326,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1327,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1327,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1328,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1314
    functionDepth: 2
    functionLinenumber: 1314
    functionLinenumberEnd: 1329
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, missing_key_get_returns_nil_reply)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1332,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1333,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1335,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1336,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1341,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1342,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1346,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1346,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1349,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1354,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1355,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1356,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1357,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1357,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1357,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1358,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1358,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1358,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1359,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1359,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1359,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1360,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1360,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1360,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1361,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1363,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1363,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1363,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1364,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1364,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1365,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1366,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1366,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1367,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1368,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1368,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1369,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1370,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1370,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1371,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1372,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1372,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1373
      start: 1331
    functionDepth: 2
    functionLinenumber: 1331
    functionLinenumberEnd: 1373
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - std::string::empty
    - ASSERT_TRUE
    - std::string
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - OwnerBySlot
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - std::ostringstream::str
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    - HashSlot
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_with_string_nil_error_and_string)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1376,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1377,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1379,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1380,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1381,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1382,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1383,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1383,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1384,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1385
      start: 1375
    functionDepth: 2
    functionLinenumber: 1375
    functionLinenumberEnd: 1385
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    - brpc::Controller::Failed
    - InitChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::CallMethod
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, empty_request_should_fail)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1388,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1389,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1391,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1392,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1395,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1399,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1400,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1401,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1402,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1402,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1402,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1403,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1403,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1403,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1404,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1406,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1406,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1406,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1407,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1407,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1408,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1408,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1409,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1410,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1410,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1411,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1411,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1412,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1413
      start: 1387
    functionDepth: 2
    functionLinenumber: 1387
    functionLinenumberEnd: 1413
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - std::string
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Failed
    - InitChannel
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::reply
    - brpc::RedisResponse::RedisResponse
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, pipeline_continues_after_command_error_reply)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1416,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1417,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1419,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1422,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1428,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1429,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1430,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1431,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1431,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1431,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1432,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1433,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1433,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1434,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1434,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1436,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1437,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1438,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1439,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1439,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1439,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1440,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1441,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1441,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1442,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1444,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1445
      start: 1415
    functionDepth: 2
    functionLinenumber: 1415
    functionLinenumberEnd: 1445
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - moved_error_calls::load
    - FindKeyForNode
    - std::string::c_str
    - BAIDU_SCOPED_LOCK
    - brpc::Controller::Controller
    - brpc::RedisResponse::RedisResponse
    - ASSERT_TRUE
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, redirect_updates_slot_cache_even_when_refresh_fails)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1448,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1453,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1453,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1453,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1456,1
    - Dst: nodes_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1459,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1463,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1465,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1466
      start: 1447
    functionDepth: 1
    functionLinenumber: 1447
    functionLinenumberEnd: 1466
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - ASSERT_TRUE
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - brpc::RedisClusterChannel::Init
    - ASSERT_EQ
    - brpc::RedisClusterChannel::RedisClusterChannel
    - nodes_calls::load
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_fallbacks_to_nodes_when_slots_fail)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1469,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1470,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1474,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1474,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1474,1
    - Dst: accept_requests_on_wrong_owner::store
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1476,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1478,1
    - Dst: static_cast<int>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1479,1
    - Dst: HashSlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1479,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1482,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1486,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1490,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1491,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1493,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1493,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1493,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1494,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1495,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1495,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1496,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1496,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1497,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1497,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1498,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1498,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1500,1
    - Dst: OwnerBySlot
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1501,1
    - Dst: slots_override_slot::store
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1502,1
    - Dst: slots_override_owner::store
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1503,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1507,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1508,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1509,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1510,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1510,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1510,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1511,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1512,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1512,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1513,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1513,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1514,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1514,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1515,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1519,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1521,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1522,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1522,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1523,1
    - Dst: moved_error_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1523,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1524
      start: 1468
    functionDepth: 1
    functionLinenumber: 1468
    functionLinenumberEnd: 1524
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - moved_error_calls::load
    - FindKeyForNode
    - ASSERT_EQ
    - brpc::Controller::ErrorText
    - slots_override_owner::store
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - static_cast<int>
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - SeedList
    - accept_requests_on_wrong_owner::store
    - BAIDU_SCOPED_LOCK
    - std::string::c_str
    - slots_override_slot::store
    - brpc::RedisClusterChannel::Init
    - brpc::Controller::Failed
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - OwnerBySlot
    - ASSERT_GT
    - brpc::RedisResponse::reply
    - bthread_usleep
    - brpc::RedisResponse::RedisResponse
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - HashSlot
    - slots_calls::load
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_updates_slot_cache_on_topology_change)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1527,1
    - Dst: InitChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1528,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1530,1
    - Dst: FindKeyForNode
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1531,1
    - Dst: brpc::RedisRequest::RedisRequest
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1533,1
    - Dst: brpc::RedisResponse::RedisResponse
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1534,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1535,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1536,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1536,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1536,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1537,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1537,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1537,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1538,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: brpc::RedisRequest::AddCommand
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: std::string::c_str
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1539,1
    - Dst: brpc::RedisClusterChannel::CallMethod
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1543,1
    - Dst: bthread::CountdownEvent::wait
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1544,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1546,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1546,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1546,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1547,1
    - Dst: brpc::RedisResponse::reply_size
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1547,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1548,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1549,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1549,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1550,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1550,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1551,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1551,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1552,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1552,1
    - Dst: data
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1552,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1553,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1553,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1554,1
    - Dst: brpc::RedisResponse::reply
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1555
      start: 1526
    functionDepth: 2
    functionLinenumber: 1526
    functionLinenumberEnd: 1555
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisRequest::RedisRequest
    - ASSERT_FALSE
    - FindKeyForNode
    - std::string::c_str
    - brpc::Controller::Controller
    - ASSERT_TRUE
    - brpc::RedisResponse::RedisResponse
    - bthread::CountdownEvent::wait
    - brpc::Controller::Failed
    - InitChannel
    - ASSERT_EQ
    - brpc::RedisRequest::AddCommand
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::Controller::ErrorText
    - brpc::RedisClusterChannel::CallMethod
    - brpc::RedisResponse::reply_size
    - data
    - brpc::RedisResponse::reply
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, async_pipeline_mixed_commands)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1558,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1559,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1563,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1563,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1563,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1565,1
    - Dst: slots_calls::load
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1568,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1572,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1574,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1575
      start: 1557
    functionDepth: 1
    functionLinenumber: 1557
    functionLinenumberEnd: 1575
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - ASSERT_TRUE
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - brpc::RedisClusterChannel::Init
    - ASSERT_EQ
    - brpc::RedisClusterChannel::RedisClusterChannel
    - slots_calls::load
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_updates_topology_in_background)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1579,1
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1581,1
    - Dst: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1585,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1585,1
    - Dst: SeedList
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1585,1
    - Dst: butil::nanoseconds_from_now
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1587,1
    - Dst: std::chrono::duration_cast<std::chrono::milliseconds>
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1589,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1590,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1591
      start: 1577
    functionDepth: 1
    functionLinenumber: 1577
    functionLinenumberEnd: 1591
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    - brpc::RedisClusterChannel::Init
    - ASSERT_EQ
    - std::chrono::duration_cast<std::chrono::milliseconds>
    - brpc::RedisClusterChannel::RedisClusterChannel
    - ASSERT_LT
    - butil::nanoseconds_from_now
    - SeedList
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, periodic_refresh_thread_stops_quickly_on_destroy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::RedisClusterChannel
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1594,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1595,1
    - Dst: brpc::RedisClusterChannel::Init
      Src: /src/brpc/test/brpc_redis_cluster_unittest.cpp:1595,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1596
      start: 1593
    functionDepth: 1
    functionLinenumber: 1593
    functionLinenumberEnd: 1596
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_redis_cluster_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannel::RedisClusterChannel
    - brpc::RedisClusterChannel::Init
    - ASSERT_NE
    linkageType: ''
    returnType: void
    signature: void TEST_F(RedisClusterChannelTest, init_with_empty_seed_should_fail)
  - 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:
    - ASSERT_FALSE
    - empty_optional
    - ASSERT_TRUE
    - butil::optional::optional
    - ASSERT_EQ
    - butil::optional::has_value
    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_FALSE
    - ASSERT_EQ
    - ASSERT_TRUE
    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_EQ
    - ASSERT_FALSE
    - ASSERT_TRUE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - std::move
    - butil::optional::optional
    - ASSERT_EQ
    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:
    - ASSERT_FALSE
    - butil::optional::optional
    - 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_THROW
    - butil::optional::optional
    - ASSERT_EQ
    - butil::optional::value_or
    - butil::optional::value
    - butil::optional<double>
    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_TRUE
    - butil::optional::optional
    - ASSERT_EQ
    - butil::optional::emplace
    - butil::optional::value
    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_FALSE
    - ASSERT_TRUE
    - noexcept
    - butil::optional::optional
    - ASSERT_EQ
    - value
    - swap
    - butil::optional::value
    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:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::make_optional
    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:
    - ASSERT_FALSE
    - butil::optional::optional
    - 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:
    - ASSERT_FALSE
    - empty_optional
    - ASSERT_TRUE
    - butil::optional::optional
    - ASSERT_EQ
    - butil::optional::has_value
    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_FALSE
    - ASSERT_EQ
    - ASSERT_TRUE
    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_EQ
    - ASSERT_FALSE
    - ASSERT_TRUE
    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:
    - ASSERT_FALSE
    - ASSERT_TRUE
    - std::move
    - butil::optional::optional
    - ASSERT_EQ
    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:
    - ASSERT_FALSE
    - butil::optional::optional
    - 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_THROW
    - butil::optional::optional
    - ASSERT_EQ
    - butil::optional::value_or
    - butil::optional::value
    - butil::optional<double>
    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_TRUE
    - butil::optional::optional
    - ASSERT_EQ
    - butil::optional::emplace
    - butil::optional::value
    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_FALSE
    - ASSERT_TRUE
    - noexcept
    - butil::optional::optional
    - ASSERT_EQ
    - value
    - swap
    - butil::optional::value
    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:
    - ASSERT_EQ
    - ASSERT_TRUE
    - butil::make_optional
    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:
    - ASSERT_FALSE
    - butil::optional::optional
    - 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:
    - butil::StringPrintf
    - EXPECT_EQ
    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:
    - butil::StringPrintf
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - butil::StringAppendF
    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:
    - EXPECT_EQ
    - butil::StringAppendF
    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:
    - EXPECT_EQ
    - butil::StringAppendF
    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
    - butil::SStringPrintf
    - EXPECT_STREQ
    - std::wstring::c_str
    - arraysize
    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:
    - butil::snprintf
    - std::string::c_str
    - butil::SStringPrintf
    - EXPECT_STREQ
    - char::char
    - sprintf_s
    - arraysize
    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:
    - butil::StringAppendVTestHelper
    - EXPECT_EQ
    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:
    - butil::SStringPrintf
    - std::wstring::c_str
    - 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:
    - butil::StringPrintf
    - butil::StringAppendVTestHelper
    - EXPECT_EQ
    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:
    - butil::StringPrintf
    - EXPECT_EQ
    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:
    - butil::StringPrintf
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - butil::StringAppendF
    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:
    - EXPECT_EQ
    - butil::StringAppendF
    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:
    - EXPECT_EQ
    - butil::StringAppendF
    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
    - butil::SStringPrintf
    - EXPECT_STREQ
    - std::wstring::c_str
    - arraysize
    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:
    - butil::snprintf
    - std::string::c_str
    - butil::SStringPrintf
    - EXPECT_STREQ
    - char::char
    - sprintf_s
    - arraysize
    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:
    - butil::StringAppendVTestHelper
    - EXPECT_EQ
    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:
    - butil::SStringPrintf
    - std::wstring::c_str
    - 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:
    - butil::StringPrintf
    - butil::StringAppendVTestHelper
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ScopedInt::swap
    - std::vector::clear
    - ScopedInt::Pass
    - ScopedInt::release
    - butil::InvalidValue
    - ScopedInt::get
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::vector::size
    - std::vector::empty
    - ScopedInt::reset
    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: 1
    functionLinenumber: 100
    functionLinenumberEnd: 126
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached:
    - ScopedInt::is_valid
    - EXPECT_TRUE
    - 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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - ScopedInt::swap
    - std::vector::clear
    - ScopedInt::Pass
    - ScopedInt::release
    - butil::InvalidValue
    - ScopedInt::get
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::vector::size
    - std::vector::empty
    - ScopedInt::reset
    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: 1
    functionLinenumber: 100
    functionLinenumberEnd: 126
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/scoped_generic_unittest.cc
    functionUses: 0
    functionsReached:
    - ScopedInt::is_valid
    - EXPECT_TRUE
    - 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*::fail_state
    - AssertReporter::AssertReporter
    - 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_RECURSIVE_LOCK
    - DFAKE_SCOPED_LOCK
    - EXPECT_FALSE
    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:
    - EXPECT_NDEBUG_FALSE_DEBUG_TRUE
    - AssertReporter::AssertReporter
    - AssertReporter*::reset
    - AssertReporter*::fail_state
    - 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:
    - EXPECT_NDEBUG_FALSE_DEBUG_TRUE
    - DFAKE_SCOPED_LOCK_THREAD_LOCKED
    - AssertReporter::AssertReporter
    - pop
    - butil::DelegateSimpleThread::Join
    - AssertReporter*::fail_state
    - push
    - butil::DelegateSimpleThread::Start
    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:
    - butil::TimeDelta::FromSeconds
    - DFAKE_SCOPED_LOCK
    - EXPECT_NDEBUG_FALSE_DEBUG_TRUE
    - AssertReporter::AssertReporter
    - pop
    - butil::DelegateSimpleThread::Join
    - AssertReporter*::fail_state
    - push
    - butil::DelegateSimpleThread::Start
    - butil::PlatformThread::Sleep
    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::TimeDelta::FromSeconds
    - butil::PlatformThread::Sleep
    - 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:
    - butil::TimeDelta::FromSeconds
    - DFAKE_SCOPED_LOCK
    - AssertReporter::AssertReporter
    - pop
    - butil::DelegateSimpleThread::Join
    - AssertReporter*::fail_state
    - push
    - butil::DelegateSimpleThread::Start
    - butil::PlatformThread::Sleep
    - 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::TimeDelta::FromSeconds
    - butil::PlatformThread::Sleep
    - 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:
    - butil::TimeDelta::FromSeconds
    - AssertReporter::AssertReporter
    - pop
    - bar
    - butil::DelegateSimpleThread::Join
    - AssertReporter*::fail_state
    - DFAKE_SCOPED_RECURSIVE_LOCK
    - push
    - butil::DelegateSimpleThread::Start
    - butil::PlatformThread::Sleep
    - EXPECT_FALSE
    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:
    - butil::TimeDelta::FromSeconds
    - butil::PlatformThread::Sleep
    - NonThreadSafeQueue::bar
    - DFAKE_SCOPED_RECURSIVE_LOCK
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - EXPECT_EQ
    - ClassA::ClassA
    - ClassB::ClassB
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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:
    - butil::debug::LeakTracker::NumLiveInstances
    - scoped_ptr::reset
    - EXPECT_EQ
    - ClassA::ClassA
    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: size
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:33,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:34,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:35,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:36,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:37,1
    - Dst: std::string*::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - out
    - seq
    - ' payload'
    argTypes:
    - std::string*
    - uint8_t
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 39
    functionName: AppendPacket
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::push_back
    - size
    linkageType: ''
    returnType: void
    signature: void AppendPacket(std::string* out, uint8_t seq, const std::string&
      payload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:45,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:47,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:48,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:49,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:50,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:51,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:52,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:53,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:54,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 57
    functionName: MakeColumnDef
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string MakeColumnDef()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:61,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 64
    functionName: MakeEof
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string MakeEof()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:71,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:71,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:72,1
    - Dst: MakeColumnDef
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:72,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:73,1
    - Dst: MakeEof
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:73,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:74,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:76,1
    - Dst: MakeEof
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' field_payload'
    - with_trailing_eof
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 2
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: MakeTextResultSet
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - MakeColumnDef
    - AppendPacket
    - MakeEof
    linkageType: ''
    returnType: std::string
    signature: "std::string MakeTextResultSet(const std::string& field_payload,\n
      \                             bool with_trailing_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:88,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:89,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:90,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:91,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:93,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:94,1
    - Dst: MakeTextResultSet
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:94,1
    - Dst: brpc::MysqlReply::MysqlReply
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:96,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:97,1
    - Dst: brpc::MysqlReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 86
    functionDepth: 3
    functionLinenumber: 86
    functionLinenumberEnd: 102
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - brpc::MysqlReply::MysqlReply
    - butil::IOBuf::append
    - std::string::push_back
    - ASSERT_EQ
    - brpc::MysqlReply::ConsumePartialIOBuf
    - butil::IOBuf::IOBuf
    - MakeTextResultSet
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlReplyParseTest, RejectOversizedTextFieldLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:108,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:109,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:111,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:112,1
    - Dst: MakeTextResultSet
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:112,1
    - Dst: brpc::MysqlReply::MysqlReply
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:114,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:115,1
    - Dst: brpc::MysqlReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:119,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:120,1
    - Dst: brpc::MysqlReply::is_resultset
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:121,1
    - Dst: brpc::MysqlReply::column_count
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:122,1
    - Dst: brpc::MysqlReply::row_count
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:123,1
    - Dst: brpc::MysqlReply::next
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 106
    functionDepth: 3
    functionLinenumber: 106
    functionLinenumberEnd: 124
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlReply::column_count
    - ASSERT_TRUE
    - brpc::MysqlReply::row_count
    - butil::Arena::Arena
    - brpc::MysqlReply::MysqlReply
    - std::string::append
    - butil::IOBuf::append
    - std::string::push_back
    - brpc::MysqlReply::next
    - ASSERT_EQ
    - brpc::MysqlReply::is_resultset
    - brpc::MysqlReply::ConsumePartialIOBuf
    - butil::IOBuf::IOBuf
    - MakeTextResultSet
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlReplyParseTest, AcceptWellFormedTextField)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:33,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:34,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:35,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:36,1
    - Dst: std::string*::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:37,1
    - Dst: std::string*::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - out
    - seq
    - ' payload'
    argTypes:
    - std::string*
    - uint8_t
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 39
    functionName: AppendPacket
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::push_back
    - size
    linkageType: ''
    returnType: void
    signature: void AppendPacket(std::string* out, uint8_t seq, const std::string&
      payload)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:45,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:47,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:48,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:49,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:50,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:51,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:52,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:53,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:54,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:55,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 57
    functionName: MakeColumnDef
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string MakeColumnDef()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:61,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 64
    functionName: MakeEof
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 1
    functionsReached:
    - std::string::append
    - std::string::push_back
    linkageType: ''
    returnType: std::string
    signature: std::string MakeEof()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:71,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:71,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:72,1
    - Dst: MakeColumnDef
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:72,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:73,1
    - Dst: MakeEof
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:73,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:74,1
    - Dst: AppendPacket
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:76,1
    - Dst: MakeEof
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' field_payload'
    - with_trailing_eof
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 2
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: MakeTextResultSet
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 2
    functionsReached:
    - std::string
    - MakeColumnDef
    - AppendPacket
    - MakeEof
    linkageType: ''
    returnType: std::string
    signature: "std::string MakeTextResultSet(const std::string& field_payload,\n
      \                             bool with_trailing_eof)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:88,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:89,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:90,1
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:91,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:93,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:94,1
    - Dst: MakeTextResultSet
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:94,1
    - Dst: brpc::MysqlReply::MysqlReply
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:96,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:97,1
    - Dst: brpc::MysqlReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:99,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 86
    functionDepth: 3
    functionLinenumber: 86
    functionLinenumberEnd: 102
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena::Arena
    - brpc::MysqlReply::MysqlReply
    - butil::IOBuf::append
    - std::string::push_back
    - ASSERT_EQ
    - brpc::MysqlReply::ConsumePartialIOBuf
    - butil::IOBuf::IOBuf
    - MakeTextResultSet
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlReplyParseTest, RejectOversizedTextFieldLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:108,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:109,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:111,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:112,1
    - Dst: MakeTextResultSet
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:112,1
    - Dst: brpc::MysqlReply::MysqlReply
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:114,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:115,1
    - Dst: brpc::MysqlReply::ConsumePartialIOBuf
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:117,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:119,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:120,1
    - Dst: brpc::MysqlReply::is_resultset
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:120,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:121,1
    - Dst: brpc::MysqlReply::column_count
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:122,1
    - Dst: brpc::MysqlReply::row_count
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:122,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:123,1
    - Dst: brpc::MysqlReply::next
      Src: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 106
    functionDepth: 3
    functionLinenumber: 106
    functionLinenumberEnd: 124
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_reply_parse_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::MysqlReply::column_count
    - ASSERT_TRUE
    - brpc::MysqlReply::row_count
    - butil::Arena::Arena
    - brpc::MysqlReply::MysqlReply
    - std::string::append
    - butil::IOBuf::append
    - std::string::push_back
    - brpc::MysqlReply::next
    - ASSERT_EQ
    - brpc::MysqlReply::is_resultset
    - brpc::MysqlReply::ConsumePartialIOBuf
    - butil::IOBuf::IOBuf
    - MakeTextResultSet
    linkageType: ''
    returnType: void
    signature: void TEST(MysqlReplyParseTest, AcceptWellFormedTextField)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - p
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    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: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    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:58,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_getspecific
      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_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:76,1
    - Dst: ThreadLocal::reset
      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::get
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 84
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - ASSERT_TRUE
    - butil::thread_getspecific
    - ThreadLocal::reset
    - int::int
    - ASSERT_NE
    - ASSERT_EQ
    - butil::thread_key_create
    - butil::thread_key_delete
    - ThreadLocal::get
    - ThreadKeyData::ThreadKeyData
    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:90,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:92,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: butil::thread_key_create
      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: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 113
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - ASSERT_TRUE
    - butil::fast_rand_less_than
    - ASSERT_EQ
    - butil::thread_key_create
    - std::vector::erase
    - std::vector::size
    - std::vector::begin
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::resize
    - KEY_UNUSED
    - std::vector::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:118,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_TRUE
    - butil::thread_key_create
    - butil::thread_key_delete
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:133,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - pthread_join
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - ASSERT_EQ
    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:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:145,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:152,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 157
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - butil::fast_rand_less_than
    - butil::get
    - EXPECT_TRUE
    - auto::size
    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:164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:173,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:176,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - ASSERT_TRUE
    - ThreadLocal<int>::ThreadLocal<int>
    - pthread_join
    - butil::get
    - ASSERT_EQ
    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:186,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:189,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 200
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::get
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - EXPECT_NE
    - butil::fast_rand_less_than
    - auto::reset
    - butil::fetch_add
    - auto::load
    - butil::atomic<int>::atomic<int>
    - auto::store
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:212,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:215,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 222
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - ThreadLocal::for_each
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - butil::load
    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: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    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:233,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:247,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:250,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:260,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 263
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - EXPECT_EQ
    - bthread_usleep
    - butil::thread_getspecific
    - butil::fast_rand_less_than
    - int::int
    - EXPECT_TRUE
    - auto::size
    - static_cast<int*>
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:290,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 317
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - pthread_create
    - sleep
    - std::vector::push_back
    - ASSERT_TRUE
    - butil::thread_getspecific
    - int::int
    - pthread_join
    - ThreadKey::ThreadKey
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - butil::thread_key_delete
    - static_cast<int*>
    - std::vector::back
    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: 333
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 333
    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: 332
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 332
    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:338,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:351,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:356,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:360,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:361,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 363
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - butil::Timer::stop
    - bthread_usleep
    - butil::thread_getspecific
    - int::int
    - pthread_setspecific
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - pthread_getspecific
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:399,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:403,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:417,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 421
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - pthread_join
    - butil::ThreadKey::ThreadKey
    - LOG
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - pthread_key_delete
    - butil::thread_key_delete
    - pthread_key_create
    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: 432
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 432
    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: 431
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 431
    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:437,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:437,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:445,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:447,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:450,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:451,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 453
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::tl::get
    - butil::Timer::stop
    - bthread_usleep
    - EXPECT_TRUE
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:463,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:463,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:476,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:480,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 492
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - pthread_join
    - LOG
    - ASSERT_EQ
    - usleep
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:497,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:498,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:502,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:503,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:506,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:507,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 510
    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: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    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: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    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:58,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_getspecific
      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_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:76,1
    - Dst: ThreadLocal::reset
      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::get
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 84
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - ASSERT_TRUE
    - butil::thread_getspecific
    - ThreadLocal::reset
    - int::int
    - ASSERT_NE
    - ASSERT_EQ
    - butil::thread_key_create
    - butil::thread_key_delete
    - ThreadLocal::get
    - ThreadKeyData::ThreadKeyData
    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:90,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:92,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: butil::thread_key_create
      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: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 113
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - ASSERT_TRUE
    - butil::fast_rand_less_than
    - ASSERT_EQ
    - butil::thread_key_create
    - std::vector::erase
    - std::vector::size
    - std::vector::begin
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::resize
    - KEY_UNUSED
    - std::vector::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:118,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_TRUE
    - butil::thread_key_create
    - butil::thread_key_delete
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:133,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - pthread_join
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - ASSERT_EQ
    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:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:145,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:152,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 157
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - butil::fast_rand_less_than
    - butil::get
    - EXPECT_TRUE
    - auto::size
    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:164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:173,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:176,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - ASSERT_TRUE
    - ThreadLocal<int>::ThreadLocal<int>
    - pthread_join
    - butil::get
    - ASSERT_EQ
    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:186,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:189,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 200
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::get
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - EXPECT_NE
    - butil::fast_rand_less_than
    - auto::reset
    - butil::fetch_add
    - auto::load
    - butil::atomic<int>::atomic<int>
    - auto::store
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:212,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:215,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 222
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - ThreadLocal::for_each
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - butil::load
    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: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    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:233,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:247,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:250,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:260,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 263
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - EXPECT_EQ
    - bthread_usleep
    - butil::thread_getspecific
    - butil::fast_rand_less_than
    - int::int
    - EXPECT_TRUE
    - auto::size
    - static_cast<int*>
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:290,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 317
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - pthread_create
    - sleep
    - std::vector::push_back
    - ASSERT_TRUE
    - butil::thread_getspecific
    - int::int
    - pthread_join
    - ThreadKey::ThreadKey
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - butil::thread_key_delete
    - static_cast<int*>
    - std::vector::back
    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: 333
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 333
    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: 332
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 332
    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:338,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:351,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:356,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:360,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:361,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 363
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - butil::Timer::stop
    - bthread_usleep
    - butil::thread_getspecific
    - int::int
    - pthread_setspecific
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - pthread_getspecific
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:399,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:403,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:417,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 421
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - pthread_join
    - butil::ThreadKey::ThreadKey
    - LOG
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - pthread_key_delete
    - butil::thread_key_delete
    - pthread_key_create
    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: 432
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 432
    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: 431
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 431
    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:437,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:437,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:445,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:447,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:450,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:451,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 453
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::tl::get
    - butil::Timer::stop
    - bthread_usleep
    - EXPECT_TRUE
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:463,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:463,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:476,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:480,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 492
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 1
    functionsReached:
    - pthread_create
    - pthread_join
    - LOG
    - ASSERT_EQ
    - usleep
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:497,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:498,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:502,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:503,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:506,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:507,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 510
    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: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    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: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    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:58,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_getspecific
      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_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:76,1
    - Dst: ThreadLocal::reset
      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::get
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 84
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - ASSERT_TRUE
    - butil::thread_getspecific
    - ThreadLocal::reset
    - int::int
    - ASSERT_NE
    - ASSERT_EQ
    - butil::thread_key_create
    - butil::thread_key_delete
    - ThreadLocal::get
    - ThreadKeyData::ThreadKeyData
    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:90,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:92,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: butil::thread_key_create
      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: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 113
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - ASSERT_TRUE
    - butil::fast_rand_less_than
    - ASSERT_EQ
    - butil::thread_key_create
    - std::vector::erase
    - std::vector::size
    - std::vector::begin
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::resize
    - KEY_UNUSED
    - std::vector::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:118,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_TRUE
    - butil::thread_key_create
    - butil::thread_key_delete
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:133,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - pthread_join
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - ASSERT_EQ
    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:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:145,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:152,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 157
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - butil::fast_rand_less_than
    - butil::get
    - EXPECT_TRUE
    - auto::size
    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:164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:173,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:176,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - ASSERT_TRUE
    - ThreadLocal<int>::ThreadLocal<int>
    - pthread_join
    - butil::get
    - ASSERT_EQ
    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:186,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:189,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 200
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::get
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - EXPECT_NE
    - butil::fast_rand_less_than
    - auto::reset
    - butil::fetch_add
    - auto::load
    - butil::atomic<int>::atomic<int>
    - auto::store
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:212,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:215,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 222
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - ThreadLocal::for_each
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - butil::load
    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: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    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:233,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:247,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:250,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:260,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 263
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - EXPECT_EQ
    - bthread_usleep
    - butil::thread_getspecific
    - butil::fast_rand_less_than
    - int::int
    - EXPECT_TRUE
    - auto::size
    - static_cast<int*>
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:290,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 317
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - pthread_create
    - sleep
    - std::vector::push_back
    - ASSERT_TRUE
    - butil::thread_getspecific
    - int::int
    - pthread_join
    - ThreadKey::ThreadKey
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - butil::thread_key_delete
    - static_cast<int*>
    - std::vector::back
    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: 333
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 333
    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: 332
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 332
    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:338,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:351,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:356,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:360,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:361,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 363
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - butil::Timer::stop
    - bthread_usleep
    - butil::thread_getspecific
    - int::int
    - pthread_setspecific
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - pthread_getspecific
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:399,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:403,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:417,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 421
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 2
    functionsReached:
    - pthread_create
    - pthread_join
    - butil::ThreadKey::ThreadKey
    - LOG
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - pthread_key_delete
    - butil::thread_key_delete
    - pthread_key_create
    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: 432
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 432
    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: 431
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 431
    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:437,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:437,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:445,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:447,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:450,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:451,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 453
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::tl::get
    - butil::Timer::stop
    - bthread_usleep
    - EXPECT_TRUE
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:463,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:463,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:476,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:480,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 492
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 2
    functionsReached:
    - pthread_create
    - pthread_join
    - LOG
    - ASSERT_EQ
    - usleep
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:497,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:498,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:502,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:503,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:506,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:507,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 510
    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: 33
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 33
    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: 41
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 41
    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:58,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:59,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:60,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:62,1
    - Dst: butil::thread_getspecific
      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_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:63,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:64,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:66,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:67,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:68,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:74,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:75,1
    - Dst: ThreadKeyData::ThreadKeyData
      Src: /src/brpc/test/thread_key_unittest.cpp:76,1
    - Dst: ThreadLocal::reset
      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::get
      Src: /src/brpc/test/thread_key_unittest.cpp:79,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:80,1
    - Dst: ThreadLocal::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:81,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    - Dst: ThreadLocal::get
      Src: /src/brpc/test/thread_key_unittest.cpp:82,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 84
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - ASSERT_TRUE
    - butil::thread_getspecific
    - ThreadLocal::reset
    - int::int
    - ASSERT_NE
    - ASSERT_EQ
    - butil::thread_key_create
    - butil::thread_key_delete
    - ThreadLocal::get
    - ThreadKeyData::ThreadKeyData
    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:90,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:91,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:92,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:95,1
    - Dst: butil::thread_key_create
      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: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:96,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:97,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:98,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:100,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:102,1
    - Dst: std::vector::empty
      Src: /src/brpc/test/thread_key_unittest.cpp:105,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: std::vector::size
      Src: /src/brpc/test/thread_key_unittest.cpp:106,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:107,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:108,1
    - Dst: std::vector::erase
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/thread_key_unittest.cpp:109,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 113
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - ASSERT_TRUE
    - butil::fast_rand_less_than
    - ASSERT_EQ
    - butil::thread_key_create
    - std::vector::erase
    - std::vector::size
    - std::vector::begin
    - butil::thread_key_delete
    - std::vector::empty
    - std::vector::resize
    - KEY_UNUSED
    - std::vector::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:118,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:118,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: KEY_UNUSED
      Src: /src/brpc/test/thread_key_unittest.cpp:119,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:120,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 123
    functionName: butil::THreadKeyCreateAndDeleteFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EXPECT_TRUE
    - butil::thread_key_create
    - butil::thread_key_delete
    - KEY_UNUSED
    linkageType: ''
    returnType: void
    signature: void * THreadKeyCreateAndDeleteFunc(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/test/thread_key_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:131,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:133,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 138
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - pthread_join
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - ASSERT_EQ
    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:142,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:144,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:145,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:149,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:151,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:152,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 140
    functionDepth: 1
    functionLinenumber: 140
    functionLinenumberEnd: 157
    functionName: butil::ThreadLocalFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - butil::fast_rand_less_than
    - butil::get
    - EXPECT_TRUE
    - auto::size
    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:164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: butil::get
      Src: /src/brpc/test/thread_key_unittest.cpp:165,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:170,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:173,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:176,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 181
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - pthread_create
    - ASSERT_TRUE
    - ThreadLocal<int>::ThreadLocal<int>
    - pthread_join
    - butil::get
    - ASSERT_EQ
    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:186,1
    - Dst: auto::get
      Src: /src/brpc/test/thread_key_unittest.cpp:187,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/thread_key_unittest.cpp:188,1
    - Dst: auto::store
      Src: /src/brpc/test/thread_key_unittest.cpp:189,1
    - Dst: auto::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:191,1
    - Dst: butil::fetch_add
      Src: /src/brpc/test/thread_key_unittest.cpp:192,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:193,1
    - Dst: auto::load
      Src: /src/brpc/test/thread_key_unittest.cpp:195,1
    - Dst: butil::atomic<int>::atomic<int>
      Src: /src/brpc/test/thread_key_unittest.cpp:194,1
    - Dst: auto::reset
      Src: /src/brpc/test/thread_key_unittest.cpp:196,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 185
    functionDepth: 1
    functionLinenumber: 185
    functionLinenumberEnd: 200
    functionName: butil::ThreadLocalForEachFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::fetch_add
    - auto::get
    - static_cast<ThreadLocal<butil::atomic<int>>*>
    - EXPECT_NE
    - butil::fast_rand_less_than
    - auto::reset
    - butil::fetch_add
    - auto::load
    - butil::atomic<int>::atomic<int>
    - auto::store
    linkageType: ''
    returnType: void
    signature: void * ThreadLocalForEachFunc(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:208,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:212,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:215,1
    - Dst: ThreadLocal::for_each
      Src: /src/brpc/test/thread_key_unittest.cpp:218,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    - Dst: butil::load
      Src: /src/brpc/test/thread_key_unittest.cpp:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 222
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - sleep
    - ThreadLocal::for_each
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - butil::load
    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: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    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:233,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:235,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:237,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:238,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:239,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:240,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: auto::size
      Src: /src/brpc/test/thread_key_unittest.cpp:244,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:245,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:246,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:247,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:250,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:255,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:259,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:260,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 263
    functionName: butil::ThreadKeyFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - EXPECT_EQ
    - bthread_usleep
    - butil::thread_getspecific
    - butil::fast_rand_less_than
    - int::int
    - EXPECT_TRUE
    - auto::size
    - static_cast<int*>
    - std::vector::back
    linkageType: ''
    returnType: void
    signature: void * ThreadKeyFunc(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/test/thread_key_unittest.cpp:271,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ThreadKey::ThreadKey
      Src: /src/brpc/test/thread_key_unittest.cpp:273,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:274,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:275,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:277,1
    - Dst: std::vector::emplace_back
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: int::int
      Src: /src/brpc/test/thread_key_unittest.cpp:278,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: static_cast<int*>
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: std::vector::back
      Src: /src/brpc/test/thread_key_unittest.cpp:280,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:287,1
    - Dst: sleep
      Src: /src/brpc/test/thread_key_unittest.cpp:290,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:303,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:306,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:312,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 317
    functionName: butil::TEST
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::vector::emplace_back
    - std::vector::reserve
    - butil::thread_setspecific
    - pthread_create
    - sleep
    - std::vector::push_back
    - ASSERT_TRUE
    - butil::thread_getspecific
    - int::int
    - pthread_join
    - ThreadKey::ThreadKey
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - butil::thread_key_delete
    - static_cast<int*>
    - std::vector::back
    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: 333
      start: 319
    functionDepth: 0
    functionLinenumber: 319
    functionLinenumberEnd: 333
    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: 332
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 332
    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:338,1
    - Dst: pthread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:340,1
    - Dst: butil::thread_setspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/test/thread_key_unittest.cpp:342,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:344,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:349,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:351,1
    - Dst: pthread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:354,1
    - Dst: butil::thread_getspecific
      Src: /src/brpc/test/thread_key_unittest.cpp:356,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:360,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:361,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 363
    functionName: butil::ThreadKeyPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::thread_setspecific
    - std::unique_ptr::get
    - butil::Timer::stop
    - bthread_usleep
    - butil::thread_getspecific
    - int::int
    - pthread_setspecific
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - butil::Timer::Timer
    - pthread_getspecific
    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:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: pthread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: butil::thread_key_create
      Src: /src/brpc/test/thread_key_unittest.cpp:374,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:386,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:399,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:403,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:408,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: pthread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:413,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: butil::thread_key_delete
      Src: /src/brpc/test/thread_key_unittest.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:417,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 44
    argCount: 2
    argNames:
    - thread_num
    - test_pthread_key
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 421
    functionName: butil::ThreadKeyPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 3
    functionsReached:
    - pthread_create
    - pthread_join
    - butil::ThreadKey::ThreadKey
    - LOG
    - ASSERT_EQ
    - butil::thread_key_create
    - usleep
    - pthread_key_delete
    - butil::thread_key_delete
    - pthread_key_create
    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: 432
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 432
    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: 431
      start: 429
    functionDepth: 0
    functionLinenumber: 429
    functionLinenumberEnd: 431
    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:437,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:437,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/thread_key_unittest.cpp:438,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:443,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/thread_key_unittest.cpp:445,1
    - Dst: auto::tl::get
      Src: /src/brpc/test/thread_key_unittest.cpp:447,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/thread_key_unittest.cpp:450,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/thread_key_unittest.cpp:451,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 434
    functionDepth: 1
    functionLinenumber: 434
    functionLinenumberEnd: 453
    functionName: butil::ThreadLocalPerfFunc
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 0
    functionsReached:
    - auto::tl::get
    - butil::Timer::stop
    - bthread_usleep
    - EXPECT_TRUE
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - 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:463,1
    - Dst: pthread_create
      Src: /src/brpc/test/thread_key_unittest.cpp:463,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:476,1
    - Dst: usleep
      Src: /src/brpc/test/thread_key_unittest.cpp:480,1
    - Dst: pthread_join
      Src: /src/brpc/test/thread_key_unittest.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/test/thread_key_unittest.cpp:489,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - thread_num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 492
    functionName: butil::ThreadLocalPerfTest
    functionSourceFile: /src/brpc/test/thread_key_unittest.cpp
    functionUses: 3
    functionsReached:
    - pthread_create
    - pthread_join
    - LOG
    - ASSERT_EQ
    - usleep
    linkageType: ''
    returnType: void
    signature: void ThreadLocalPerfTest(int thread_num)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:496,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:497,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:498,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:501,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:502,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:503,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:506,1
    - Dst: butil::ThreadKeyPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:507,1
    - Dst: butil::ThreadLocalPerfTest
      Src: /src/brpc/test/thread_key_unittest.cpp:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 510
    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::UintToString
    - butil::Int64ToString16
    - EXPECT_EQ
    - butil::Uint64ToString16
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::IntToString16
    - butil::UTF8ToUTF16
    - brpc::GetJsService::jquery_min
    - butil::UintToString16
    - butil::Int64ToString
    - butil::Uint64ToString
    - butil::IntToString
    - arraysize
    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:
    - butil::Uint64ToString
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::Uint64ToString
    - ARRAYSIZE_UNSAFE
    - 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
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToInt
    - arraysize
    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
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToUint
    - arraysize
    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:
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - GG_INT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToInt64
    - arraysize
    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:
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - GG_UINT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToUint64
    - arraysize
    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:
    - butil::StringToSizeT
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringPrintf
    - arraysize
    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:
    - EXPECT_EQ
    - arraysize
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::HexStringToInt
    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:
    - EXPECT_EQ
    - arraysize
    - butil::HexStringToUInt
    - ARRAYSIZE_UNSAFE
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - GG_INT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::HexStringToInt64
    - arraysize
    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:
    - butil::HexStringToUInt64
    - EXPECT_EQ
    - GG_INT64_C
    - GG_UINT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - arraysize
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - std::vector::end
    - butil::HexStringToBytes
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::vector::begin
    - ARRAYSIZE_UNSAFE
    - std::vector::size
    - static_cast<uint8_t>
    - std::equal
    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:
    - EXPECT_EQ
    - butil::StringToDouble
    - EXPECT_DOUBLE_EQ
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - arraysize
    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:
    - butil::DoubleToString
    - EXPECT_EQ
    - memcpy
    - ARRAYSIZE_UNSAFE
    - arraysize
    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:
    - std::string::length
    - EXPECT_EQ
    - std::string::compare
    - butil::HexEncode
    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::UintToString
    - butil::Int64ToString16
    - EXPECT_EQ
    - butil::Uint64ToString16
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::IntToString16
    - butil::UTF8ToUTF16
    - brpc::GetJsService::jquery_min
    - butil::UintToString16
    - butil::Int64ToString
    - butil::Uint64ToString
    - butil::IntToString
    - arraysize
    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:
    - butil::Uint64ToString
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::Uint64ToString
    - ARRAYSIZE_UNSAFE
    - 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
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToInt
    - arraysize
    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
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToUint
    - arraysize
    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:
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - GG_INT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToInt64
    - arraysize
    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:
    - EXPECT_EQ
    - butil::UTF8ToUTF16
    - GG_UINT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringToUint64
    - arraysize
    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:
    - butil::StringToSizeT
    - EXPECT_EQ
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::UTF8ToUTF16
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::StringPrintf
    - arraysize
    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:
    - EXPECT_EQ
    - arraysize
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::HexStringToInt
    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:
    - EXPECT_EQ
    - arraysize
    - butil::HexStringToUInt
    - ARRAYSIZE_UNSAFE
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - GG_INT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - butil::HexStringToInt64
    - arraysize
    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:
    - butil::HexStringToUInt64
    - EXPECT_EQ
    - GG_INT64_C
    - GG_UINT64_C
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - arraysize
    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:
    - EXPECT_EQ
    - std::vector::push_back
    - std::vector::end
    - butil::HexStringToBytes
    - ASSERT_EQ
    - EXPECT_TRUE
    - std::vector::begin
    - ARRAYSIZE_UNSAFE
    - std::vector::size
    - static_cast<uint8_t>
    - std::equal
    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:
    - EXPECT_EQ
    - butil::StringToDouble
    - EXPECT_DOUBLE_EQ
    - EXPECT_FALSE
    - ARRAYSIZE_UNSAFE
    - arraysize
    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:
    - butil::DoubleToString
    - EXPECT_EQ
    - memcpy
    - ARRAYSIZE_UNSAFE
    - arraysize
    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:
    - std::string::length
    - EXPECT_EQ
    - std::string::compare
    - butil::HexEncode
    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:71,1
    - Dst: GFLAGS_NAMESPACE::ParseCommandLineFlags
      Src: /src/brpc/test/brpc_socket_unittest.cpp:72,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:80,1
    - Dst: RegisterProtocol
      Src: /src/brpc/test/brpc_socket_unittest.cpp:80,1
    - Dst: RUN_ALL_TESTS
      Src: /src/brpc/test/brpc_socket_unittest.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 82
    functionName: main
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - EXPECT_EQ
    - RUN_ALL_TESTS
    - RegisterProtocol
    - 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: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    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:93,1
    - Dst: static_cast<WaitData*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:94,1
    - Dst: static_cast<WaitData*>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:95,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:96,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: 97
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 97
    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: 102
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 102
    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: 103
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 103
    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:114,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - brpc::Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 118
    functionName: CheckRecycle::BeforeRecycle
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - ASSERT_TRUE
    linkageType: ''
    returnType: void
    signature: void BeforeRecycle(brpc::Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:124,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:124,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:126,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:127,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:127,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:131,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:132,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:132,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:135,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:135,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:136,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:137,1
    - Dst: brpc::SocketUniquePtr::get
      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::fd
      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::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:139,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:140,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:140,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:141,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:141,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:142,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:144,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:145,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:148,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 149
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - ASSERT_EQ
    - butil::EndPoint::EndPoint
    - CheckRecycle::CheckRecycle
    - close
    - socketpair
    - str2endpoint
    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:155,1
    - Dst: brpc::Socket*::FightAuthentication
      Src: /src/brpc/test/brpc_socket_unittest.cpp:158,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_socket_unittest.cpp:159,1
    - Dst: brpc::Socket*::SetAuthentication
      Src: /src/brpc/test/brpc_socket_unittest.cpp:160,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 165
    functionName: auth_fighter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Socket*::SetAuthentication
    - EXPECT_EQ
    - bthread_usleep
    - fetch_add
    - brpc::Socket*::FightAuthentication
    linkageType: ''
    returnType: void
    signature: void * auth_fighter(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:170,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:170,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:172,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:172,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_start_urgent
      Src: /src/brpc/test/brpc_socket_unittest.cpp:176,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:176,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:178,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:179,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:179,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:182,1
    - Dst: load
      Src: /src/brpc/test/brpc_socket_unittest.cpp:182,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:186,1
    - Dst: brpc::SocketUniquePtr::FightAuthentication
      Src: /src/brpc/test/brpc_socket_unittest.cpp:186,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:187,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:189,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:189,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:189,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 190
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - load
    - bthread_join
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SetTrackMeAddress
    - ASSERT_NE
    - ASSERT_EQ
    - brpc::SocketUniquePtr::FightAuthentication
    - bthread_start_urgent
    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: 196
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 196
    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:199,1
    - Dst: fetch_add
      Src: /src/brpc/test/brpc_socket_unittest.cpp:201,1
    - Dst: butil::Status::OK
      Src: /src/brpc/test/brpc_socket_unittest.cpp:204,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - out_buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 205
    functionName: MyMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - fetch_add
    - butil::IOBuf*::append
    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: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    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: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 219
    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:225,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:225,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:227,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:228,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:228,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:233,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:236,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:236,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:237,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:238,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:238,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:239,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:240,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:241,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:241,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:245,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:247,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:248,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:248,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/test/brpc_socket_unittest.cpp:251,1
    - Dst: MyErrorMessage::MyErrorMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:254,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:257,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:258,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:258,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:259,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:261,1
    - Dst: reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:271,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:271,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:273,1
    - Dst: reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:275,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:275,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:280,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:280,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:283,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:286,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:287,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:288,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:288,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:289,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:290,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:290,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:293,1
    - Dst: read
      Src: /src/brpc/test/brpc_socket_unittest.cpp:293,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:294,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_socket_unittest.cpp:294,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:296,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:296,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:298,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:299,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 56
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 223
    functionDepth: 2
    functionLinenumber: 223
    functionLinenumberEnd: 300
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_create2
    - ASSERT_EQ
    - read
    - BuiltinServiceTest::TestStatus
    - brpc::SocketUniquePtr::Write
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - snprintf
    - CheckRecycle::CheckRecycle
    - MyMessage::MyMessage
    - str2endpoint
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::fd
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - bthread_id_join
    - reset
    - socketpair
    - memcmp
    - butil::IOBuf::length
    - MyErrorMessage::MyErrorMessage
    - butil::IOBuf::empty
    - ASSERT_LT
    - close
    - butil::IOBuf::IOBuf
    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:305,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:306,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:307,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:308,1
    - Dst: brpc::DestroyingPtr::socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:308,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - brpc::InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 302
    functionDepth: 0
    functionLinenumber: 302
    functionLinenumberEnd: 309
    functionName: EchoProcessHuluRequest
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append
    - 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: 313
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 313
    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:317,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 321
    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:323,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 322
    functionDepth: 1
    functionLinenumber: 322
    functionLinenumberEnd: 324
    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: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: 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: 328
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 328
    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:338,1
    - Dst: ANNOTATE_LEAKING_OBJECT_PTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:339,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:349,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:354,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:355,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:355,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:356,1
    - Dst: brpc::Acceptor*::AddHandler
      Src: /src/brpc/test/brpc_socket_unittest.cpp:356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:357,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:357,1
    - Dst: std::make_shared<MyConnect>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:362,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:364,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:365,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:368,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:368,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:369,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:370,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:371,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:371,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:372,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:372,1
    - Dst: brpc::SocketUniquePtr::local_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:373,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:373,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:374,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:374,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:379,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:382,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:390,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:391,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:391,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:393,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:394,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:395,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:396,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:396,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:397,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:397,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:402,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:403,1
    - Dst: std::shared_ptr::is_start_connect_called
      Src: /src/brpc/test/brpc_socket_unittest.cpp:403,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:404,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:404,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:405,1
    - Dst: std::shared_ptr::MakeConnectDone
      Src: /src/brpc/test/brpc_socket_unittest.cpp:406,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:407,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:409,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:410,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:411,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:412,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:412,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:415,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_socket_unittest.cpp:415,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:415,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:417,1
    - Dst: bthread_fd_wait
      Src: /src/brpc/test/brpc_socket_unittest.cpp:417,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:420,1
    - Dst: read
      Src: /src/brpc/test/brpc_socket_unittest.cpp:420,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:421,1
    - Dst: memcmp
      Src: /src/brpc/test/brpc_socket_unittest.cpp:421,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:423,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:423,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:428,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:428,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:430,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:431,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:432,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:432,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:433,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:434,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:438,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:438,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:440,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:440,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:441,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:441,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:442,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:442,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:443,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:443,1
    - Dst: brpc::SocketUniquePtr::local_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:443,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:444,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:444,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 69
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 445
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::is_start_connect_called
    - bthread_fd_wait
    - ASSERT_EQ
    - brpc::SocketUniquePtr::local_side
    - read
    - brpc::SocketUniquePtr::Write
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - memcpy
    - brpc::Acceptor::Acceptor
    - fcntl
    - std::make_shared<MyConnect>
    - CheckRecycle::CheckRecycle
    - snprintf
    - MyMessage::MyMessage
    - butil::EndPoint
    - tcp_listen
    - brpc::SocketUniquePtr::id
    - brpc::Acceptor*::StartAccept
    - brpc::SocketUniquePtr::fd
    - brpc::Acceptor*::AddHandler
    - brpc::Acceptor*::Join
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - brpc::SocketUniquePtr::SetFailed
    - ASSERT_GT
    - memcmp
    - bthread_usleep
    - butil::IOBuf::length
    - berror
    - std::shared_ptr::MakeConnectDone
    - brpc::Acceptor*::listened_fd
    - brpc::Acceptor*::StopAccept
    - butil::IOBuf::empty
    - butil::make_non_blocking
    - ASSERT_LT
    - ANNOTATE_LEAKING_OBJECT_PTR
    - butil::IOBuf::IOBuf
    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:456,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:458,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:459,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:465,1
    - Dst: bthread_id_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:465,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:466,1
    - Dst: BAIDU_SYMBOLSTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:466,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:468,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:469,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:472,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:473,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:473,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 479
      start: 455
    functionDepth: 1
    functionLinenumber: 455
    functionLinenumberEnd: 479
    functionName: FailedWriter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - brpc::SocketUniquePtr::Write
    - static_cast<WriterArg*>
    - bthread_id_join
    - snprintf
    - BAIDU_SYMBOLSTR
    - printf
    - butil::IOBuf::IOBuf
    - bthread_id_create
    linkageType: ''
    returnType: void
    signature: void * FailedWriter(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:487,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:488,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:491,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:491,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:492,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:493,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:494,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:495,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:495,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:496,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:496,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:498,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:499,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:503,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:503,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:505,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:506,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:506,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:508,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:508,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:509,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:509,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:512,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:514,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:515,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:515,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:517,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:517,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:520,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:520,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 481
    functionDepth: 1
    functionLinenumber: 481
    functionLinenumberEnd: 521
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::remote_side
    - ARRAY_SIZE
    - pthread_create
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - brpc::SocketUniquePtr::fd
    - bthread_usleep
    - brpc::SetTrackMeAddress
    - pthread_join
    - butil::cpuwide_time_us
    - brpc::SocketUniquePtr::SetFailed
    - ASSERT_EQ
    - CheckRecycle::CheckRecycle
    - ASSERT_LT
    - Socket::Status
    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:528,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:530,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:533,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:533,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:534,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:535,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:535,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:536,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:536,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:537,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:537,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:538,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:538,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:543,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:546,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:550,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:551,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:552,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:552,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:556,1
    - Dst: bthread_id_create2
      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: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:560,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:561,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:562,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:563,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_socket_unittest.cpp:563,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:566,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:566,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:569,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:569,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:570,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:570,1
    - Dst: brpc::SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/test/brpc_socket_unittest.cpp:571,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:577,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:579,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:580,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:580,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:582,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:582,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 523
    functionDepth: 1
    functionLinenumber: 523
    functionLinenumberEnd: 583
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::SocketUniquePtr::ReleaseHCRelatedReference
    - bthread_id_create2
    - ASSERT_EQ
    - brpc::SocketUniquePtr::Write
    - brpc::SocketUniquePtr::remote_side
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - memcpy
    - butil::BasicStringPiece::BasicStringPiece
    - snprintf
    - CheckRecycle::CheckRecycle
    - Socket::Status
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::fd
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - bthread_usleep
    - butil::IOBuf::length
    - butil::IOBuf::empty
    - ASSERT_LT
    - butil::IOBuf::IOBuf
    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: 588
      start: 587
    functionDepth: 0
    functionLinenumber: 587
    functionLinenumberEnd: 588
    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: 589
      start: 589
    functionDepth: 0
    functionLinenumber: 589
    functionLinenumberEnd: 589
    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:598,1
    - Dst: brpc::Controller*::response_attachment
      Src: /src/brpc/test/brpc_socket_unittest.cpp:601,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: 602
      start: 591
    functionDepth: 1
    functionLinenumber: 591
    functionLinenumberEnd: 602
    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:609,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:610,1
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/test/brpc_socket_unittest.cpp:613,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/test/brpc_socket_unittest.cpp:616,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:617,1
    - Dst: brpc::Channel::Init
      Src: /src/brpc/test/brpc_socket_unittest.cpp:617,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_socket_unittest.cpp:619,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_socket_unittest.cpp:620,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_socket_unittest.cpp:621,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:622,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:623,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_socket_unittest.cpp:623,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:629,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:630,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:634,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:635,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_socket_unittest.cpp:637,1
    - Dst: HealthCheckTestServiceImpl::HealthCheckTestServiceImpl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:638,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:639,1
    - Dst: brpc::Server::AddService
      Src: /src/brpc/test/brpc_socket_unittest.cpp:639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:640,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_socket_unittest.cpp:640,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_socket_unittest.cpp:645,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_socket_unittest.cpp:646,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_socket_unittest.cpp:647,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:648,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/test/brpc_socket_unittest.cpp:648,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:649,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:652,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/test/brpc_socket_unittest.cpp:655,1
    - Dst: brpc::Controller::http_request
      Src: /src/brpc/test/brpc_socket_unittest.cpp:656,1
    - Dst: brpc::Channel::CallMethod
      Src: /src/brpc/test/brpc_socket_unittest.cpp:657,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:658,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:658,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:659,1
    - Dst: brpc::Controller::response_attachment
      Src: /src/brpc/test/brpc_socket_unittest.cpp:659,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:662,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:664,1
    - Dst: GFLAGS_NAMESPACE::SetCommandLineOption
      Src: /src/brpc/test/brpc_socket_unittest.cpp:665,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 666
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Channel::CallMethod
    - brpc::Channel::Init
    - ASSERT_FALSE
    - brpc::Controller::Controller
    - brpc::Controller::response_attachment
    - EXPECT_TRUE
    - brpc::Channel::Channel
    - snprintf
    - brpc::Server::Server
    - tcp_listen
    - brpc::Server::Start
    - brpc::Controller::http_request
    - brpc::Controller::Failed
    - ASSERT_GT
    - brpc::ChannelOptions::ChannelOptions
    - bthread_usleep
    - brpc::Server::AddService
    - brpc::Controller::ErrorCode
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - close
    - HealthCheckTestServiceImpl::HealthCheckTestServiceImpl
    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:671,1
    - Dst: ANNOTATE_LEAKING_OBJECT_PTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:672,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:679,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:681,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:685,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:685,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:686,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:689,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:690,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:690,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:691,1
    - Dst: brpc::Socket*::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:691,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:692,1
    - Dst: brpc::Socket*::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:692,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:694,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:694,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:695,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:700,1
    - Dst: memcpy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:703,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/test/brpc_socket_unittest.cpp:707,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:710,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:712,1
    - Dst: brpc::SocketMessagePtr::reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:713,1
    - Dst: MyMessage::MyMessage
      Src: /src/brpc/test/brpc_socket_unittest.cpp:713,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:715,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:716,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:716,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:721,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:721,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:725,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:725,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:727,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:727,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:729,1
    - Dst: bthread_id_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:729,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:730,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:731,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:732,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_socket_unittest.cpp:732,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:735,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:739,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:739,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:741,1
    - Dst: brpc::Socket*::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:741,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:743,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:745,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:745,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:746,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:746,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:747,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:749,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:749,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:750,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:750,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:757,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:758,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:759,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:760,1
    - Dst: brpc::Acceptor*::AddHandler
      Src: /src/brpc/test/brpc_socket_unittest.cpp:760,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:761,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:761,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:763,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:765,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:766,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:767,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:767,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:771,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:776,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:776,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:777,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:777,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:782,1
    - Dst: brpc::Socket*::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:783,1
    - Dst: brpc::Socket*::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:783,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:784,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:785,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:786,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:787,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:787,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:789,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:793,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:793,1
    - Dst: ASSERT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:794,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:794,1
    - Dst: brpc::Socket*::ReleaseHCRelatedReference
      Src: /src/brpc/test/brpc_socket_unittest.cpp:797,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:801,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:803,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:803,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:804,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:804,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:805,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:807,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:807,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:809,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:811,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:812,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:812,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:815,1
    - Dst: Socket::Status
      Src: /src/brpc/test/brpc_socket_unittest.cpp:815,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:818,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:818,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 92
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 819
      start: 668
    functionDepth: 1
    functionLinenumber: 668
    functionLinenumberEnd: 819
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::Socket*::SetFailed
    - bthread_id_create2
    - LOG
    - brpc::SocketMessagePtr::reset
    - ASSERT_EQ
    - brpc::Socket*::Write
    - brpc::Socket*::ReleaseHCRelatedReference
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - memcpy
    - brpc::Acceptor::Acceptor
    - brpc::Socket*::remote_side
    - brpc::Socket*::id
    - butil::BasicStringPiece::BasicStringPiece
    - fcntl
    - snprintf
    - CheckRecycle::CheckRecycle
    - MyMessage::MyMessage
    - Socket::Status
    - brpc::Socket*::fd
    - tcp_listen
    - brpc::Acceptor*::StartAccept
    - brpc::SocketUniquePtr::fd
    - brpc::Acceptor*::AddHandler
    - brpc::Acceptor*::Join
    - butil::fast_rand_less_than
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - Socket::SetFailed
    - bthread_usleep
    - butil::IOBuf::length
    - brpc::Acceptor*::listened_fd
    - ASSERT_NE
    - brpc::Acceptor*::StopAccept
    - butil::IOBuf::empty
    - butil::make_non_blocking
    - ASSERT_LT
    - ANNOTATE_LEAKING_OBJECT_PTR
    - butil::IOBuf::IOBuf
    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:822,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:824,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:825,1
    - Dst: snprintf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:830,1
    - Dst: BAIDU_SYMBOLSTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:830,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:832,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:833,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:834,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:837,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:841,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:842,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 847
      start: 821
    functionDepth: 1
    functionLinenumber: 821
    functionLinenumberEnd: 847
    functionName: Writer
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - berror
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - static_cast<WriterArg*>
    - snprintf
    - BAIDU_SYMBOLSTR
    - printf
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::Write
    linkageType: ''
    returnType: void
    signature: void * Writer(void* void_arg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:853,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:854,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:854,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:856,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/brpc_socket_unittest.cpp:858,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:858,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:861,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:862,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:862,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:866,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:867,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:867,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:869,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:869,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:871,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:872,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:872,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:873,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:873,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:874,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:874,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:875,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:875,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:876,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:878,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:882,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:882,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:886,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:887,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/test/brpc_socket_unittest.cpp:890,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:891,1
    - Dst: butil::IOPortal::append_from_file_descriptor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:893,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:899,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:899,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:901,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:903,1
    - Dst: butil::IOPortal::length
      Src: /src/brpc/test/brpc_socket_unittest.cpp:908,1
    - Dst: butil::IOPortal::copy_to
      Src: /src/brpc/test/brpc_socket_unittest.cpp:910,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/brpc_socket_unittest.cpp:912,1
    - Dst: strtol
      Src: /src/brpc/test/brpc_socket_unittest.cpp:912,1
    - Dst: butil::IOPortal::pop_front
      Src: /src/brpc/test/brpc_socket_unittest.cpp:913,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:915,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:915,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:919,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:920,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:920,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:922,1
    - Dst: butil::IOPortal::empty
      Src: /src/brpc/test/brpc_socket_unittest.cpp:922,1
    - Dst: print_rq_sizes
      Src: /src/brpc/test/brpc_socket_unittest.cpp:923,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:926,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:926,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:926,1
    - Dst: std::sort
      Src: /src/brpc/test/brpc_socket_unittest.cpp:928,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:928,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_socket_unittest.cpp:928,1
    - Dst: std::vector::resize
      Src: /src/brpc/test/brpc_socket_unittest.cpp:929,1
    - Dst: std::unique
      Src: /src/brpc/test/brpc_socket_unittest.cpp:929,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:929,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_socket_unittest.cpp:930,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:930,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:931,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:931,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:931,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:932,1
    - Dst: std::vector::begin
      Src: /src/brpc/test/brpc_socket_unittest.cpp:932,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:933,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:933,1
    - Dst: std::vector::end
      Src: /src/brpc/test/brpc_socket_unittest.cpp:933,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:935,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:935,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:936,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:937,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:938,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 70
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 940
      start: 849
    functionDepth: 1
    functionLinenumber: 849
    functionLinenumberEnd: 940
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal::IOPortal
    - std::unique
    - pthread_join
    - LOG
    - ASSERT_EQ
    - std::vector::size
    - std::vector::reserve
    - brpc::SocketUniquePtr::remote_side
    - pthread_create
    - print_rq_sizes
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - butil::IOPortal::length
    - std::vector::end
    - strtol
    - CheckRecycle::CheckRecycle
    - printf
    - std::vector::resize
    - str2endpoint
    - brpc::SocketUniquePtr::release
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::fd
    - std::vector::push_back
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - std::vector::begin
    - std::sort
    - socketpair
    - butil::IOPortal::pop_front
    - ARRAY_SIZE
    - bthread_usleep
    - berror
    - butil::IOPortal::empty
    - butil::make_non_blocking
    - butil::IOPortal::copy_to
    - close
    - butil::IOPortal::append_from_file_descriptor
    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:943,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:945,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:946,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:950,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:954,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:955,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:956,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:959,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:964,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:965,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:969,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:971,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 974
      start: 942
    functionDepth: 1
    functionLinenumber: 942
    functionLinenumberEnd: 974
    functionName: FastWriter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - berror
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - static_cast<WriterArg*>
    - printf
    - butil::IOBuf::IOBuf
    - brpc::SocketUniquePtr::Write
    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:982,1
    - Dst: malloc
      Src: /src/brpc/test/brpc_socket_unittest.cpp:984,1
    - Dst: read
      Src: /src/brpc/test/brpc_socket_unittest.cpp:986,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:988,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:991,1
    - Dst: free
      Src: /src/brpc/test/brpc_socket_unittest.cpp:996,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 998
      start: 981
    functionDepth: 0
    functionLinenumber: 981
    functionLinenumberEnd: 998
    functionName: reader
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - free
    - read
    - static_cast<ReaderArg*>
    - 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:1003,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1003,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1005,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1008,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1009,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1009,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1013,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1014,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1014,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1016,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1016,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1018,1
    - Dst: brpc::NRefOfVRef
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1018,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1019,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1020,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1020,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1021,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1021,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1022,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1022,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1023,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1023,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1025,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1029,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1034,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1036,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1037,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1039,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1040,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1041,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1043,1
    - Dst: printf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1045,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1045,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1047,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1050,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1051,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1051,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1053,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1053,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1054,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1055,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1056,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1057,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1000
    functionDepth: 1
    functionLinenumber: 1000
    functionLinenumberEnd: 1058
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - bthread_join
    - pthread_join
    - ASSERT_EQ
    - butil::Timer::start
    - brpc::SocketUniquePtr::remote_side
    - pthread_create
    - butil::Timer::stop
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - CheckRecycle::CheckRecycle
    - butil::Timer::Timer
    - ProfilerStart
    - brpc::NRefOfVRef
    - printf
    - str2endpoint
    - sleep
    - brpc::SocketUniquePtr::release
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::fd
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - ProfilerStop
    - butil::EndPoint::EndPoint
    - socketpair
    - ARRAY_SIZE
    - close
    - bthread_start_background
    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:1067,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1067,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1074,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1074,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1076,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1076,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1083,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1083,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1085,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1085,1
    - 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:1094,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1094,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: 1097
      start: 1060
    functionDepth: 0
    functionLinenumber: 1060
    functionLinenumberEnd: 1097
    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:1102,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1102,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1099
    functionDepth: 0
    functionLinenumber: 1099
    functionLinenumberEnd: 1104
    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:1116,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1119,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1121,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1124,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1125,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1126,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: 1127
      start: 1106
    functionDepth: 1
    functionLinenumber: 1106
    functionLinenumberEnd: 1127
    functionName: CheckKeepalive
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - GetKeepaliveValue
    - ASSERT_LT
    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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1133
      start: 1133
    functionDepth: 0
    functionLinenumber: 1133
    functionLinenumberEnd: 1133
    functionName: SocketBufferValues
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SocketBufferValues()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1138,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1138,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1141,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - fd
    - values
    argTypes:
    - int
    - SocketBufferValues*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1143
      start: 1136
    functionDepth: 0
    functionLinenumber: 1136
    functionLinenumberEnd: 1143
    functionName: GetSocketBufferValues
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - getsockopt
    linkageType: ''
    returnType: void
    signature: void GetSocketBufferValues(int fd, SocketBufferValues* values)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1148,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1149,1
    - Dst: GetSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1150,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1152,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1154,1
    - Dst: setsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1154,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1156,1
    - Dst: setsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1156,1
    - Dst: GetSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - buffer_size
    - expected
    argTypes:
    - int
    - SocketBufferValues*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1159
      start: 1145
    functionDepth: 1
    functionLinenumber: 1145
    functionLinenumberEnd: 1159
    functionName: GetExpectedSocketBufferValues
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - GetSocketBufferValues
    - ASSERT_EQ
    - socket
    - ASSERT_GT
    - setsockopt
    linkageType: ''
    returnType: void
    signature: "void GetExpectedSocketBufferValues(int buffer_size,\n                                   SocketBufferValues*
      expected)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1163,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1164,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - fd
    - ' expected'
    argTypes:
    - int
    - SocketBufferValues
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1161
    functionDepth: 1
    functionLinenumber: 1161
    functionLinenumberEnd: 1166
    functionName: CheckSocketBufferValues
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - GetSocketBufferValues
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void CheckSocketBufferValues(int fd, const SocketBufferValues& expected)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1174,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1175,1
    - Dst: GetKeepaliveValue
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1176,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1182,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1187,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1187,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1189,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1189,1
    - Dst: CheckNoKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1190,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1190,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1191,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1191,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1199,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1200,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1203,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1205,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1207,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1207,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1208,1
    - Dst: brpc::SocketUniquePtr::fd
      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::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1210,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1215,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1216,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1219,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1222,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1222,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1224,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1224,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1225,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1225,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1228,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1228,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1233,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1234,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1237,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1240,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1240,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1242,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1242,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1243,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1243,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1245,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1245,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1250,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1251,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1254,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1257,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1257,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1259,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1259,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1260,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1260,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1262,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1262,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1267,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1268,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1271,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1276,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1276,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1278,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1278,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1279,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1279,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1281,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1281,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 57
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1283
      start: 1168
    functionDepth: 2
    functionLinenumber: 1168
    functionLinenumberEnd: 1283
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - GetKeepaliveValue
    - brpc::SocketUniquePtr::fd
    - Socket::Create
    - CheckNoKeepalive
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - ASSERT_EQ
    - socket
    - ASSERT_GT
    - std::make_shared<brpc::SocketKeepaliveOptions>
    - 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:1287,1
    - Dst: ANNOTATE_LEAKING_OBJECT_PTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1288,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1293,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1298,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1299,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1300,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1300,1
    - Dst: socket
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1307,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1308,1
    - Dst: GetKeepaliveValue
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1309,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1319,1
    - Dst: brpc::get_or_new_client_side_messenger
      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::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1321,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1322,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1322,1
    - Dst: CheckNoKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1323,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1324,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1324,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1334,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1334,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1336,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1336,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1337,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1337,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1338,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1338,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1340,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1340,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1350,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1350,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1352,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1352,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1353,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1353,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1354,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1354,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1356,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1356,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1366,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1368,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1368,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1369,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1369,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1370,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1370,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1372,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1372,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1382,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1382,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1384,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1384,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1385,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1385,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1386,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1386,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1389,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1389,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1400,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:1410,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1410,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1417,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1420,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1420,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1422,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1422,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1423,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1423,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1424,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1424,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1426,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1426,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1433,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1436,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1436,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1438,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1438,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1439,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1439,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1440,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1440,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1442,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1442,1
    - Dst: std::make_shared<brpc::SocketKeepaliveOptions>
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1449,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1454,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1454,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1456,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1456,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1457,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1457,1
    - Dst: CheckKeepalive
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1458,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1458,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1460,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1460,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1463,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1464,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1465,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1465,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1466,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1467,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 106
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1468
      start: 1285
    functionDepth: 2
    functionLinenumber: 1285
    functionLinenumberEnd: 1468
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - brpc::Acceptor::Acceptor
    - fcntl
    - socket
    - brpc::get_or_new_client_side_messenger
    - tcp_listen
    - brpc::Acceptor*::StartAccept
    - brpc::SocketUniquePtr::fd
    - brpc::Acceptor*::Join
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - ASSERT_GT
    - CheckKeepalive
    - GetKeepaliveValue
    - berror
    - brpc::Acceptor*::listened_fd
    - CheckNoKeepalive
    - brpc::Acceptor*::StopAccept
    - butil::make_non_blocking
    - ANNOTATE_LEAKING_OBJECT_PTR
    - std::make_shared<brpc::SocketKeepaliveOptions>
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, keepalive_input_message)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetExpectedSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1477,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1479,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1480,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1480,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1482,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1482,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1483,1
    - Dst: butil::get_local_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1483,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1488,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1488,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1491,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1491,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1493,1
    - Dst: brpc::SocketUniquePtr::Connect
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1494,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1495,1
    - Dst: CheckSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1496,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1498,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1499
      start: 1470
    functionDepth: 2
    functionLinenumber: 1470
    functionLinenumberEnd: 1499
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - Socket::Create
    - berror
    - butil::get_local_side
    - brpc::SetTrackMeAddress
    - butil::milliseconds_from_now
    - brpc::SocketUniquePtr::Connect
    - brpc::SocketUniquePtr::SetFailed
    - CheckSocketBufferValues
    - butil::EndPoint::EndPoint
    - ASSERT_EQ
    - GetExpectedSocketBufferValues
    - ASSERT_GT
    - str2endpoint
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, socket_buffer_options_before_connect)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetExpectedSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1508,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1511,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1511,1
    - Dst: brpc::Server::Server
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1512,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1513,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1513,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1514,1
    - Dst: brpc::ServerPrivateAccessor::ServerPrivateAccessor
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1517,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1518,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1519,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1519,1
    - Dst: CheckSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1520,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1520,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1531,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1531,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1533,1
    - Dst: brpc::Acceptor*::ConnectionCount
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1534,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1535,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1536,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1536,1
    - Dst: brpc::Acceptor*::ListConnections
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1541,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1542,1
    - Dst: std::vector::size
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1542,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1546,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1546,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1547,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1547,1
    - Dst: CheckSocketBufferValues
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1548,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1548,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1549,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1549,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1554,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1554,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1555,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1555,1
    - Dst: brpc::Server::Stop
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1557,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1558,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1559
      start: 1501
    functionDepth: 2
    functionLinenumber: 1501
    functionLinenumberEnd: 1559
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - CheckSocketBufferValues
    - ASSERT_EQ
    - brpc::ServerPrivateAccessor::ServerPrivateAccessor
    - std::vector::size
    - brpc::Server::Join
    - brpc::Acceptor*::ConnectionCount
    - ASSERT_TRUE
    - Socket::Create
    - brpc::Server::Stop
    - str2endpoint
    - brpc::Server::Server
    - brpc::SocketUniquePtr::fd
    - brpc::Server::Start
    - brpc::Server::listen_address
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - GetExpectedSocketBufferValues
    - ASSERT_GT
    - bthread_usleep
    - brpc::Acceptor*::listened_fd
    - brpc::Acceptor*::ListConnections
    - ASSERT_LT
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, socket_buffer_options_before_accept)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1565,1
    - Dst: getsockopt
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1565,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1566,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - fd
    - expect_tcp_user_timeout
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1567
      start: 1562
    functionDepth: 0
    functionLinenumber: 1562
    functionLinenumberEnd: 1567
    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:1571,1
    - Dst: ANNOTATE_LEAKING_OBJECT_PTR
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1572,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1577,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1582,1
    - Dst: berror
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1582,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1583,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1583,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1584,1
    - Dst: brpc::Acceptor*::StartAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1584,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1591,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1591,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1593,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1593,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1594,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1594,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1595,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1595,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1605,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1605,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1607,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1607,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1608,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1608,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1609,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1609,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1618,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1618,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1620,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1620,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1621,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1621,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1622,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1622,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1631,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1631,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1633,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1633,1
    - Dst: CheckTCPUserTimeout
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1634,1
    - Dst: brpc::SocketUniquePtr::fd
      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::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1635,1
    - Dst: brpc::Acceptor*::StopAccept
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1638,1
    - Dst: brpc::Acceptor*::Join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1639,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1640,1
    - Dst: brpc::Acceptor*::listened_fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1640,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1641,1
    - Dst: fcntl
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1641,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1642,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 48
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1643
      start: 1569
    functionDepth: 1
    functionLinenumber: 1569
    functionLinenumberEnd: 1643
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - tcp_listen
    - CheckTCPUserTimeout
    - brpc::Acceptor*::StartAccept
    - Socket::Create
    - berror
    - brpc::SocketUniquePtr::fd
    - brpc::Acceptor*::Join
    - brpc::Acceptor*::listened_fd
    - brpc::SetTrackMeAddress
    - brpc::Acceptor::Acceptor
    - brpc::SocketUniquePtr::SetFailed
    - brpc::Acceptor*::StopAccept
    - fcntl
    - ASSERT_EQ
    - butil::make_non_blocking
    - ASSERT_GT
    - ANNOTATE_LEAKING_OBJECT_PTR
    - brpc::get_or_new_client_side_messenger
    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:1648,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1649,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1650,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1652,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1652,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: 1654
      start: 1646
    functionDepth: 1
    functionLinenumber: 1646
    functionLinenumberEnd: 1654
    functionName: HandleSocketSuccessWrite
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - static_cast<size_t*>
    - EXPECT_NE
    - bthread_id_unlock_and_destroy
    - CHECK_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:1659,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1659,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1662,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1663,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1663,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1667,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1668,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1668,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1670,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1670,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1672,1
    - Dst: brpc::NRefOfVRef
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1672,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1673,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1674,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1674,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1675,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1675,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1676,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1676,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1677,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1677,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1681,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1687,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1687,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1692,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1693,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1694,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1697,1
    - Dst: PLOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1701,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1705,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1707,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1707,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1708,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1709,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1710,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1711,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1712,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1713
      start: 1656
    functionDepth: 1
    functionLinenumber: 1656
    functionLinenumberEnd: 1713
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_create2
    - pthread_join
    - ASSERT_EQ
    - brpc::SocketUniquePtr::Write
    - brpc::SocketUniquePtr::remote_side
    - pthread_create
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - PLOG
    - CheckRecycle::CheckRecycle
    - brpc::NRefOfVRef
    - str2endpoint
    - brpc::SocketUniquePtr::release
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::fd
    - brpc::SetTrackMeAddress
    - butil::IOBuf::append
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - socketpair
    - bthread_usleep
    - close
    - butil::IOBuf::IOBuf
    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:1724,1
    - Dst: EXPECT_NE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1725,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1726,1
    - Dst: CHECK_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1731,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1731,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: 1733
      start: 1722
    functionDepth: 1
    functionLinenumber: 1722
    functionLinenumberEnd: 1733
    functionName: HandleSocketShutdownWrite
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_NE
    - bthread_id_unlock_and_destroy
    - EXPECT_TRUE
    - 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:1736,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1738,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1739,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1744,1
    - Dst: bthread_id_create2
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1744,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1750,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1751,1
    - Dst: brpc::SocketUniquePtr::Write
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1752,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1755,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1762
      start: 1735
    functionDepth: 1
    functionLinenumber: 1735
    functionLinenumberEnd: 1762
    functionName: ShutdownWriter
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - bthread_usleep
    - bthread_id_create2
    - brpc::SetTrackMeAddress
    - LOG
    - brpc::SocketUniquePtr::Write
    - butil::IOBuf::push_back
    - butil::IOBuf::IOBuf
    - 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:1767,1
    - Dst: socketpair
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1767,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1770,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1771,1
    - Dst: str2endpoint
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1771,1
    - Dst: CheckRecycle::CheckRecycle
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1775,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1776,1
    - Dst: Socket::Create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1776,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1778,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1778,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1780,1
    - Dst: brpc::NRefOfVRef
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1780,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1781,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1782,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1782,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1783,1
    - Dst: brpc::SocketUniquePtr::fd
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1783,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1784,1
    - Dst: brpc::SocketUniquePtr::remote_side
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1784,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1785,1
    - Dst: brpc::SocketUniquePtr::id
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1785,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1786,1
    - Dst: brpc::SocketUniquePtr::IsWriteShutdown
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1786,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1790,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1793,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1794,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1799,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1802,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1803,1
    - Dst: bthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1803,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1805,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1807,1
    - Dst: brpc::SocketUniquePtr::IsWriteShutdown
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1807,1
    - Dst: ASSERT_FALSE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1808,1
    - Dst: brpc::SocketUniquePtr::Failed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1808,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1809,1
    - Dst: brpc::SocketUniquePtr::SetFailed
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1809,1
    - Dst: brpc::SocketUniquePtr::release
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1810,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1811,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1812,1
    - Dst: close
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1813,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1821,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1821,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1822,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1823,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 41
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1824
      start: 1764
    functionDepth: 1
    functionLinenumber: 1764
    functionLinenumberEnd: 1824
    functionName: TestShutdownWrite
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - pthread_join
    - ASSERT_EQ
    - brpc::SocketUniquePtr::IsWriteShutdown
    - brpc::SocketUniquePtr::remote_side
    - ASSERT_FALSE
    - pthread_create
    - brpc::SocketUniquePtr::get
    - Socket::Create
    - ASSERT_TRUE
    - CheckRecycle::CheckRecycle
    - brpc::NRefOfVRef
    - str2endpoint
    - brpc::SocketUniquePtr::release
    - brpc::SocketUniquePtr::id
    - brpc::SocketUniquePtr::fd
    - EXPECT_EQ
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::SetFailed
    - butil::EndPoint::EndPoint
    - socketpair
    - ARRAY_SIZE
    - brpc::SocketUniquePtr::Failed
    - bthread_usleep
    - close
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: void TestShutdownWrite()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TestShutdownWrite
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1828,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1830
      start: 1826
    functionDepth: 2
    functionLinenumber: 1826
    functionLinenumberEnd: 1830
    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:1833,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1834,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1834,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1835,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1835,1
    - Dst: brpc::PackedPtr::set
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1839,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1840,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1840,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1841,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1842,1
    - Dst: brpc::PackedPtr::set_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1843,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1844,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1844,1
    - Dst: brpc::PackedPtr::reset
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1845,1
    - Dst: brpc::PackedPtr::reset_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1846,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1847,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1847,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1848,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1848,1
    - Dst: brpc::PackedPtr::set_ptr_and_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1852,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1853,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1853,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1854,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1854,1
    - Dst: brpc::PackedPtr::reset_ptr_and_extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1855,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1856,1
    - Dst: brpc::PackedPtr::get
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1856,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1857,1
    - Dst: brpc::PackedPtr::extra
      Src: /src/brpc/test/brpc_socket_unittest.cpp:1857,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1858
      start: 1832
    functionDepth: 1
    functionLinenumber: 1832
    functionLinenumberEnd: 1858
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_socket_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::PackedPtr::set
    - brpc::PackedPtr::set_extra
    - brpc::PackedPtr::set_ptr_and_extra
    - brpc::PackedPtr::reset_extra
    - brpc::PackedPtr::PackedPtr
    - brpc::PackedPtr::reset_ptr_and_extra
    - ASSERT_EQ
    - brpc::PackedPtr::extra
    - brpc::PackedPtr::reset
    - brpc::PackedPtr::get
    linkageType: ''
    returnType: void
    signature: void TEST_F(SocketTest, packed_ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:36,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:40,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:42,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 34
    functionDepth: 0
    functionLinenumber: 34
    functionLinenumberEnd: 46
    functionName: DecodeManyDynamicTableSizeUpdates
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - brpc::HPacker::Decode
    - butil::IOBuf::IOBuf
    - brpc::HPacker::Init
    - butil::IOBuf::append
    linkageType: ''
    returnType: void
    signature: void * DecodeManyDynamicTableSizeUpdates(void*)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: fork
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:49,1
    - Dst: ASSERT_GE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:50,1
    - Dst: freopen
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:52,1
    - Dst: freopen
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:53,1
    - Dst: exit
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:54,1
    - Dst: pthread_attr_init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:58,1
    - Dst: exit
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:59,1
    - Dst: pthread_attr_setstacksize
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:61,1
    - Dst: exit
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:62,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:65,1
    - Dst: exit
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:66,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:68,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:70,1
    - Dst: exit
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:71,1
    - Dst: exit
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:73,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:76,1
    - Dst: waitpid
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:76,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:77,1
    - Dst: WIFEXITED
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:77,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:78,1
    - Dst: WEXITSTATUS
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:78,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 79
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - ASSERT_GE
    - waitpid
    - WIFEXITED
    - ASSERT_EQ
    - WEXITSTATUS
    - freopen
    - exit
    - pthread_attr_destroy
    - fork
    - pthread_attr_setstacksize
    - pthread_attr_init
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, many_dynamic_table_size_updates)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:83,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:83,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:85,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:90,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:93,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:93,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:94,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:94,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:95,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:96,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 97
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_TRUE
    - butil::IOBuf::append
    - ASSERT_EQ
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - brpc::HPacker::Init
    - brpc::HPacker::Decode
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, dynamic_table_size_update_before_header)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:101,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:101,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:108,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:114,1
    - Dst: ASSERT_LT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:117,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:117,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 118
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::append
    - ASSERT_EQ
    - brpc::HPacker::Decode
    - brpc::HPacker::Init
    - ASSERT_LT
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void TEST_F(HPackTest, integer_with_overlong_continuation)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:123,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:123,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:125,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:125,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:129,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:131,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:132,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:134,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:134,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:134,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: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:142,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:142,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:143,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:144,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:144,1
    - Dst: tolower
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:146,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:147,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 149
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - ASSERT_EQ
    - tolower
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:153,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:153,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:155,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:155,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:159,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:161,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:162,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:163,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:164,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:164,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:164,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:170,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:170,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:172,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:173,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:174,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:174,1
    - Dst: tolower
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:176,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 179
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - ASSERT_EQ
    - tolower
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:183,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:183,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:185,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:185,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:189,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:191,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:192,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:193,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:194,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:194,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:194,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:200,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:200,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:202,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:202,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:203,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: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 181
    functionDepth: 1
    functionLinenumber: 181
    functionLinenumberEnd: 207
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - ASSERT_EQ
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:211,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:211,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:213,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:213,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:217,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:219,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:220,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:222,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:222,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:222,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:227,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:227,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:229,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:229,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:230,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:231,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:231,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 234
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - ASSERT_EQ
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:243,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:243,1
    - 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: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:253,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:254,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:258,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:266,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:266,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:266,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:267,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:269,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:269,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:269,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:270,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:271,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:273,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:273,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:283,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:287,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:289,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:295,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:295,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:295,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:296,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:298,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:298,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:298,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:299,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:300,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:302,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:302,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:311,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:315,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:317,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:324,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:324,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:324,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:325,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:327,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:327,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:327,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:328,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:329,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
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 332
      start: 241
    functionDepth: 1
    functionLinenumber: 241
    functionLinenumberEnd: 332
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - ARRAY_SIZE
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - ASSERT_GT
    - brpc::HPacker::Decode
    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:336,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:336,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:338,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:338,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:346,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:347,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:351,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:355,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:361,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:361,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:361,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:362,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:362,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:362,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:363,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:365,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:365,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:365,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:366,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:367,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:369,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:369,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:379,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:383,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:387,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:392,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:392,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:392,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:393,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:395,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:395,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:395,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:397,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: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:408,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:412,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:416,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:422,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:422,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:422,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:423,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:425,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:425,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:425,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:426,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:427,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:429,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:429,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 334
    functionDepth: 1
    functionLinenumber: 334
    functionLinenumberEnd: 430
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - ARRAY_SIZE
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - ASSERT_GT
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:435,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:435,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:437,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:437,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:445,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:446,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:450,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:452,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:462,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:462,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:462,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:463,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:463,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:463,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:464,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:466,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:466,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:466,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:467,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:468,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:470,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:470,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:479,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:483,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:485,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:490,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:490,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:490,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:491,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:493,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:493,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:493,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:494,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:495,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:497,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:497,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:507,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:511,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:513,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:526,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:526,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:526,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:527,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:529,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:529,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:529,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:530,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:531,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:533,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:533,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 534
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - ARRAY_SIZE
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - ASSERT_GT
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:539,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:539,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:541,1
    - Dst: brpc::HPacker::Init
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:541,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:549,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:550,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:554,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:558,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:567,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:567,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:567,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:568,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:568,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:568,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:569,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:571,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:571,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:571,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:572,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:573,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:575,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:575,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:584,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:588,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:592,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:597,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:597,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:597,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:598,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:600,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:600,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:600,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:601,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:602,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:604,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:604,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:614,1
    - Dst: brpc::HPackOptions::HPackOptions
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:618,1
    - Dst: brpc::HPacker::Encode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:622,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:633,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:633,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:633,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:634,1
    - Dst: ASSERT_GT
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:636,1
    - Dst: brpc::HPacker::Decode
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:636,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:636,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:637,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:638,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:640,1
    - Dst: butil::IOBufAppender::buf
      Src: /src/brpc/test/brpc_hpack_unittest.cpp:640,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 641
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 641
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_hpack_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - ARRAY_SIZE
    - butil::IOBufAppender::buf
    - ASSERT_TRUE
    - LOG
    - butil::BasicStringPiece::BasicStringPiece
    - ASSERT_EQ
    - brpc::HPackOptions::HPackOptions
    - brpc::HPacker::Init
    - brpc::HPacker::Encode
    - ASSERT_GT
    - brpc::HPacker::Decode
    - butil::ToPrintable::ToPrintable
    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:
    - bthread_cond_signal
    - bthread_usleep
    - butil::gettimeofday_us
    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:
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - bthread_cond_wait
    - bthread_mutex_unlock
    - bthread_mutex_lock
    - bthread_self
    - push_back
    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:
    - bthread_join
    - pthread_mutex_lock
    - bthread_cond_signal
    - ASSERT_EQ
    - resize
    - std::map::end
    - std::max
    - abs
    - EXPECT_GT
    - bthread_cond_init
    - printf
    - bthread_mutex_init
    - bthread_start_urgent
    - size
    - labs
    - EXPECT_EQ
    - std::map::begin
    - sqrt
    - clear
    - bthread_mutex_destroy
    - EXPECT_LT
    - ARRAY_SIZE
    - bthread_usleep
    - ASSERT_LE
    - bthread_cond_destroy
    - pthread_mutex_unlock
    - std::map::size
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:148,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:150,1
    - Dst: WrapperArg*::cond::notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 154
    functionName: cv_signaler
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::cond::notify_one
    - bthread_usleep
    - butil::gettimeofday_us
    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:158,1
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 163
    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:169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 172
    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: WrapperArg*::mutex::native_handler
      Src: /src/brpc/test/bthread_cond_unittest.cpp:177,1
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:178,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 181
    functionName: cv_bmutex_waiter_with_pred
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::mutex::native_handler
    - WrapperArg*::cond::wait
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * cv_bmutex_waiter_with_pred(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:186,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 189
    functionName: cv_mutex_waiter_with_pred
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - WrapperArg*::cond::wait
    linkageType: ''
    returnType: void
    signature: void * cv_mutex_waiter_with_pred(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:206,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:208,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:211,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:211,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:212,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:214,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:217,1
    - Dst: WrapperArg::cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:218,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:219,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:220,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 223
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - WrapperArg::cond::notify_all
    - pthread_join
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, cpp_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:233,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:235,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:238,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:238,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:240,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:242,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:247,1
    - Dst: WrapperArg::cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:248,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:249,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:250,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:253,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 254
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - WrapperArg::cond::notify_all
    - pthread_join
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, cpp_wrapper2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 263
    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:265,1
    - Dst: notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 268
    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:273,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - old_signal
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 276
    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:295,1
    - Dst: PingPongArg*::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:299,1
    - Dst: PingPongArg*::sig2::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:300,1
    - Dst: PingPongArg*::sig1::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:302,1
    - Dst: PingPongArg*::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:303,1
    - Dst: PingPongArg*::total_count::fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:307,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 309
    functionName: ping_pong_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - PingPongArg*::sig1::wait
    - PingPongArg*::nthread::fetch_add
    - PingPongArg*::sig2::wait
    - PingPongArg*::sig2::notify
    - PingPongArg*::total_count::fetch_add
    - 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:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:318,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:318,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:320,1
    - Dst: PingPongArg::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:322,1
    - Dst: PingPongArg::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:325,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:325,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:327,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:328,1
    - Dst: PingPongArg::total_count::load
      Src: /src/brpc/test/bthread_cond_unittest.cpp:328,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 329
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - PingPongArg::sig1::notify
    - bthread_join
    - PingPongArg::total_count::load
    - LOG
    - ProfilerStop
    - ASSERT_EQ
    - PingPongArg::sig2::notify
    - usleep
    - ProfilerStart
    - bthread_start_urgent
    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:349,1
    - Dst: BroadcastArg*::wait_cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:351,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 355
    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:363,1
    - Dst: BroadcastArg*::wait_cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:367,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 370
    functionName: broadcast_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BroadcastArg*::broadcast_cond::wait
    - BroadcastArg*::wait_cond::notify_all
    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:376,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 380
    functionName: disturb_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::lock
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void * disturb_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:392,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:396,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:401,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:402,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:402,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:404,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:405,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:407,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 409
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:414,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 417
    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:419,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: ~BthreadCond()
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_cond_destroy
    - bthread_mutex_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: 425
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 425
    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:429,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:431,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 434
    functionName: BthreadCond::Signal
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_cond_signal
    - bthread_mutex_unlock
    - bthread_mutex_lock
    linkageType: ''
    returnType: int
    signature: int Signal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:438,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:440,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 436
    functionDepth: 1
    functionLinenumber: 436
    functionLinenumberEnd: 444
    functionName: BthreadCond::Wait
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_cond_wait
    - bthread_mutex_unlock
    - bthread_mutex_lock
    linkageType: ''
    returnType: int
    signature: int Wait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 461
    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:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 469
    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:474,1
    - Dst: BthreadCond::Init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:475,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_cond_unittest.cpp:476,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:477,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_cond_unittest.cpp:479,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_cond_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:483,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_cond_unittest.cpp:483,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:484,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:486,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:487,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_cond_unittest.cpp:487,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:488,1
    - Dst: BthreadCond::Signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:489,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:491,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:492,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:493,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:494,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:496,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:496,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 471
    functionDepth: 2
    functionLinenumber: 471
    functionLinenumberEnd: 497
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 2
    functionsReached:
    - std::vector::reserve
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - bthread_join
    - std::vector::push_back
    - bthread_start_background
    - LOG
    - BthreadCond::BthreadCond
    - ASSERT_EQ
    - BthreadCond::Init
    - butil::Timer::start
    - usleep
    - BthreadCond::Signal
    - std::vector::size
    - LOG_EVERY_SECOND
    - butil::Timer::Timer
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void launch_many_bthreads()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_cond_unittest.cpp:500,1
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_cond_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 499
    functionDepth: 1
    functionLinenumber: 499
    functionLinenumberEnd: 502
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - launch_many_bthreads
    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:505,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 507
    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:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:512,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:512,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 509
    functionDepth: 1
    functionLinenumber: 509
    functionLinenumberEnd: 514
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_setconcurrency
    - 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:
    - bthread_cond_signal
    - bthread_usleep
    - butil::gettimeofday_us
    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:
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - bthread_cond_wait
    - bthread_mutex_unlock
    - bthread_mutex_lock
    - bthread_self
    - push_back
    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:
    - bthread_join
    - pthread_mutex_lock
    - bthread_cond_signal
    - ASSERT_EQ
    - resize
    - std::map::end
    - std::max
    - abs
    - EXPECT_GT
    - bthread_cond_init
    - printf
    - bthread_mutex_init
    - bthread_start_urgent
    - size
    - labs
    - EXPECT_EQ
    - std::map::begin
    - sqrt
    - clear
    - bthread_mutex_destroy
    - EXPECT_LT
    - ARRAY_SIZE
    - bthread_usleep
    - ASSERT_LE
    - bthread_cond_destroy
    - pthread_mutex_unlock
    - std::map::size
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, sanity)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/test/bthread_cond_unittest.cpp:148,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:150,1
    - Dst: WrapperArg*::cond::notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 154
    functionName: cv_signaler
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::cond::notify_one
    - bthread_usleep
    - butil::gettimeofday_us
    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:158,1
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 163
    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:169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 172
    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: WrapperArg*::mutex::native_handler
      Src: /src/brpc/test/bthread_cond_unittest.cpp:177,1
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:178,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:179,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 181
    functionName: cv_bmutex_waiter_with_pred
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - WrapperArg*::mutex::native_handler
    - WrapperArg*::cond::wait
    - fetch_add
    linkageType: ''
    returnType: void
    signature: void * cv_bmutex_waiter_with_pred(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: WrapperArg*::cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:186,1
    - Dst: fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:187,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 189
    functionName: cv_mutex_waiter_with_pred
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - WrapperArg*::cond::wait
    linkageType: ''
    returnType: void
    signature: void * cv_mutex_waiter_with_pred(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:205,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:206,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:206,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:208,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:208,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:211,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:211,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:212,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:214,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:217,1
    - Dst: WrapperArg::cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:218,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:219,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:220,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:221,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 223
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - WrapperArg::cond::notify_all
    - pthread_join
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, cpp_wrapper)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:232,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:233,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:233,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:235,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:235,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:238,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:238,1
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:240,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bthread_cond_unittest.cpp:242,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:247,1
    - Dst: WrapperArg::cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:248,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bthread_cond_unittest.cpp:249,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:250,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:251,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:253,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 254
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 254
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - bthread_usleep
    - BAIDU_SCOPED_LOCK
    - WrapperArg::cond::notify_all
    - pthread_join
    - ASSERT_EQ
    linkageType: ''
    returnType: void
    signature: void TEST(CondTest, cpp_wrapper2)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 263
    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:265,1
    - Dst: notify_one
      Src: /src/brpc/test/bthread_cond_unittest.cpp:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 268
    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:273,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - old_signal
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 270
    functionDepth: 1
    functionLinenumber: 270
    functionLinenumberEnd: 276
    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:295,1
    - Dst: PingPongArg*::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:299,1
    - Dst: PingPongArg*::sig2::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:300,1
    - Dst: PingPongArg*::sig1::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:302,1
    - Dst: PingPongArg*::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:303,1
    - Dst: PingPongArg*::total_count::fetch_add
      Src: /src/brpc/test/bthread_cond_unittest.cpp:307,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 309
    functionName: ping_pong_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - PingPongArg*::sig1::wait
    - PingPongArg*::nthread::fetch_add
    - PingPongArg*::sig2::wait
    - PingPongArg*::sig2::notify
    - PingPongArg*::total_count::fetch_add
    - 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:316,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:318,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:318,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:320,1
    - Dst: PingPongArg::sig1::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:322,1
    - Dst: PingPongArg::sig2::notify
      Src: /src/brpc/test/bthread_cond_unittest.cpp:323,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:325,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:325,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:327,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:328,1
    - Dst: PingPongArg::total_count::load
      Src: /src/brpc/test/bthread_cond_unittest.cpp:328,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 329
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - PingPongArg::sig1::notify
    - bthread_join
    - PingPongArg::total_count::load
    - LOG
    - ProfilerStop
    - ASSERT_EQ
    - PingPongArg::sig2::notify
    - usleep
    - ProfilerStart
    - bthread_start_urgent
    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:349,1
    - Dst: BroadcastArg*::wait_cond::wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:351,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 355
    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:363,1
    - Dst: BroadcastArg*::wait_cond::notify_all
      Src: /src/brpc/test/bthread_cond_unittest.cpp:367,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 370
    functionName: broadcast_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - BroadcastArg*::broadcast_cond::wait
    - BroadcastArg*::wait_cond::notify_all
    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:376,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 372
    functionDepth: 1
    functionLinenumber: 372
    functionLinenumberEnd: 380
    functionName: disturb_thread
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - std::unique_lock::lock
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void * disturb_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:392,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:392,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:396,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:396,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:401,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:401,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:402,1
    - Dst: pthread_create
      Src: /src/brpc/test/bthread_cond_unittest.cpp:402,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:404,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:405,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:407,1
    - Dst: pthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 382
    functionDepth: 1
    functionLinenumber: 382
    functionLinenumberEnd: 409
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - pthread_create
    - bthread_join
    - pthread_join
    - ASSERT_EQ
    - bthread_start_urgent
    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:414,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:415,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 413
    functionDepth: 1
    functionLinenumber: 413
    functionLinenumberEnd: 417
    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:419,1
    - Dst: bthread_cond_destroy
      Src: /src/brpc/test/bthread_cond_unittest.cpp:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 421
    functionName: ~BthreadCond()
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_cond_destroy
    - bthread_mutex_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: 425
      start: 423
    functionDepth: 0
    functionLinenumber: 423
    functionLinenumberEnd: 425
    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:429,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:431,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:432,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 434
    functionName: BthreadCond::Signal
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 1
    functionsReached:
    - bthread_cond_signal
    - bthread_mutex_unlock
    - bthread_mutex_lock
    linkageType: ''
    returnType: int
    signature: int Signal()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:438,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/test/bthread_cond_unittest.cpp:440,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/test/bthread_cond_unittest.cpp:442,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 436
    functionDepth: 1
    functionLinenumber: 436
    functionLinenumberEnd: 444
    functionName: BthreadCond::Wait
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_cond_wait
    - bthread_mutex_unlock
    - bthread_mutex_lock
    linkageType: ''
    returnType: int
    signature: int Wait()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 461
      start: 456
    functionDepth: 1
    functionLinenumber: 456
    functionLinenumberEnd: 461
    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:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 469
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 469
    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:474,1
    - Dst: BthreadCond::Init
      Src: /src/brpc/test/bthread_cond_unittest.cpp:475,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/bthread_cond_unittest.cpp:476,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:477,1
    - Dst: std::vector::reserve
      Src: /src/brpc/test/bthread_cond_unittest.cpp:479,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bthread_cond_unittest.cpp:480,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:483,1
    - Dst: bthread_start_background
      Src: /src/brpc/test/bthread_cond_unittest.cpp:483,1
    - Dst: std::vector::push_back
      Src: /src/brpc/test/bthread_cond_unittest.cpp:484,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bthread_cond_unittest.cpp:486,1
    - Dst: LOG
      Src: /src/brpc/test/bthread_cond_unittest.cpp:487,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/bthread_cond_unittest.cpp:487,1
    - Dst: usleep
      Src: /src/brpc/test/bthread_cond_unittest.cpp:488,1
    - Dst: BthreadCond::Signal
      Src: /src/brpc/test/bthread_cond_unittest.cpp:489,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:491,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:492,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:493,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:494,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/test/bthread_cond_unittest.cpp:496,1
    - Dst: std::vector::size
      Src: /src/brpc/test/bthread_cond_unittest.cpp:496,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 471
    functionDepth: 2
    functionLinenumber: 471
    functionLinenumberEnd: 497
    functionName: launch_many_bthreads
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 4
    functionsReached:
    - std::vector::reserve
    - butil::Timer::stop
    - butil::Timer::u_elapsed
    - bthread_join
    - std::vector::push_back
    - bthread_start_background
    - LOG
    - BthreadCond::BthreadCond
    - ASSERT_EQ
    - BthreadCond::Init
    - butil::Timer::start
    - usleep
    - BthreadCond::Signal
    - std::vector::size
    - LOG_EVERY_SECOND
    - butil::Timer::Timer
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void launch_many_bthreads()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread_setconcurrency
      Src: /src/brpc/test/bthread_cond_unittest.cpp:500,1
    - Dst: launch_many_bthreads
      Src: /src/brpc/test/bthread_cond_unittest.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 499
    functionDepth: 1
    functionLinenumber: 499
    functionLinenumberEnd: 502
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - bthread_setconcurrency
    - launch_many_bthreads
    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:505,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 507
    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:510,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bthread_cond_unittest.cpp:512,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/test/bthread_cond_unittest.cpp:512,1
    - Dst: bthread_join
      Src: /src/brpc/test/bthread_cond_unittest.cpp:513,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 514
      start: 509
    functionDepth: 1
    functionLinenumber: 509
    functionLinenumberEnd: 514
    functionName: TEST
    functionSourceFile: /src/brpc/test/bthread_cond_unittest.cpp
    functionUses: 0
    functionsReached:
    - ASSERT_EQ
    - bthread_join
    - bthread_setconcurrency
    - 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_EQ
    - BigEndianReader::ReadPiece
    - BigEndianReader::Skip
    - static_cast<int>
    - butil::StringPiece::size
    - BigEndianReader::ReadBytes
    - butil::StringPiece::data
    - BigEndianReader::ReadU8
    - EXPECT_TRUE
    - BigEndianReader::remaining
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadU16
    - BigEndianReader::ptr
    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_EQ
    - BigEndianReader::ReadPiece
    - BigEndianReader::Skip
    - BigEndianReader::ReadBytes
    - BigEndianReader::ReadU8
    - EXPECT_TRUE
    - BigEndianReader::remaining
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadU16
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - BigEndianWriter::WriteU8
    - memcmp
    - EXPECT_TRUE
    - memset
    - BigEndianWriter::WriteU32
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU16
    - BigEndianWriter::Skip
    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_EQ
    - BigEndianWriter::WriteU8
    - BigEndianWriter::WriteU32
    - EXPECT_TRUE
    - BigEndianWriter::remaining
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU16
    - BigEndianWriter::Skip
    - EXPECT_FALSE
    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_EQ
    - BigEndianReader::ReadPiece
    - BigEndianReader::Skip
    - static_cast<int>
    - butil::StringPiece::size
    - BigEndianReader::ReadBytes
    - butil::StringPiece::data
    - BigEndianReader::ReadU8
    - EXPECT_TRUE
    - BigEndianReader::remaining
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadU16
    - BigEndianReader::ptr
    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_EQ
    - BigEndianReader::ReadPiece
    - BigEndianReader::Skip
    - BigEndianReader::ReadBytes
    - BigEndianReader::ReadU8
    - EXPECT_TRUE
    - BigEndianReader::remaining
    - BigEndianReader::ReadU32
    - BigEndianReader::ReadU16
    - EXPECT_FALSE
    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:
    - EXPECT_EQ
    - BigEndianWriter::WriteU8
    - memcmp
    - EXPECT_TRUE
    - memset
    - BigEndianWriter::WriteU32
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU16
    - BigEndianWriter::Skip
    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_EQ
    - BigEndianWriter::WriteU8
    - BigEndianWriter::WriteU32
    - EXPECT_TRUE
    - BigEndianWriter::remaining
    - BigEndianWriter::WriteBytes
    - BigEndianWriter::WriteU16
    - BigEndianWriter::Skip
    - EXPECT_FALSE
    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
    - Version::IsValid
    - EXPECT_FALSE
    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:
    - Version::IsValid
    - ARRAYSIZE_UNSAFE
    - Version::components
    - EXPECT_EQ
    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:
    - Version::CompareTo
    - Version::IsOlderThan
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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
    - ARRAYSIZE_UNSAFE
    - Version::CompareToWildcardString
    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:
    - butil::Version::IsValidWildcardString
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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
    - Version::IsValid
    - EXPECT_FALSE
    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:
    - Version::IsValid
    - ARRAYSIZE_UNSAFE
    - Version::components
    - EXPECT_EQ
    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:
    - Version::CompareTo
    - Version::IsOlderThan
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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
    - ARRAYSIZE_UNSAFE
    - Version::CompareToWildcardString
    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:
    - butil::Version::IsValidWildcardString
    - ARRAYSIZE_UNSAFE
    - EXPECT_EQ
    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::UNLIMITED
      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::UNLIMITED
      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: brpc::AdaptiveMaxConcurrency::UNLIMITED
      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: BIG_CONSTANT
      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: 1
    functionLinenumber: 31
    functionLinenumberEnd: 50
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_adaptive_class_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - brpc::AdaptiveMaxConcurrency::UNLIMITED
    - brpc::AdaptiveMaxConcurrency::value
    - BIG_CONSTANT
    - EXPECT_TRUE
    - brpc::AdaptiveMaxConcurrency::type
    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:
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - EXPECT_NE
    - EXPECT_EQ
    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: 1
    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:
    - bthread_usleep
    - EXPECT_EQ
    - bthread_id_trylock
    - bthread_id_unlock_and_destroy
    - EXPECT_TRUE
    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:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread_id_join
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    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
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread_id_join
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    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:
    - std::vector*::push_back
    - EXPECT_EQ
    - bthread_id_unlock
    - static_cast<std::vector<int>*>
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - bthread_id_error
    - bthread_id_trylock
    - std::vector::clear
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_unlock
    - std::vector::size
    - bthread::id_value
    - std::vector::empty
    - get_version
    - bthread_id_create
    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::stop
    - butil::Timer::u_elapsed
    - bthread_usleep
    - EXPECT_EQ
    - LOG
    - bthread_id_unlock
    - bthread_id_lock
    - butil::Timer::start
    - 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
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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
    - bthread_usleep
    - bthread_id_lock
    - EXPECT_EQ
    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
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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
    - pthread_create
    - bthread_usleep
    - pthread_join
    - ASSERT_EQ
    - bthread_id_join
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_join
    - get_version
    - EXPECT_EQ
    - bthread::id_value
    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:
    - ARRAY_SIZE
    - bthread_join
    - bthread_usleep
    - ASSERT_TRUE
    - bthread_id_trylock
    - bthread::TaskGroup::exists
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread::id_value
    - bthread_stop
    - get_version
    - bthread_start_urgent
    - bthread_id_create
    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:
    - bthread_id_join
    - get_version
    - EXPECT_EQ
    - bthread::id_value
    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:
    - bthread_id_unlock_and_destroy
    - EXPECT_EQ
    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:
    - ARRAY_SIZE
    - pthread_create
    - bthread_usleep
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - pthread_join
    - bthread_id_list_init
    - ASSERT_EQ
    - bthread_id_list_add
    - bthread::id_value
    - get_version
    - bthread_id_create
    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_error
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread_id_lock
    - bthread::id_status
    - bthread_id_create
    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:
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_unlock
    - bthread::id_status
    - bthread_id_lock_and_reset_range
    - bthread_id_create
    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:
    - bthread_id_lock
    - butil::Timer::Timer
    - EXPECT_EQ
    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:
    - pthread_create
    - bthread_join
    - bthread_id_about_to_destroy
    - pthread_join
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_lock
    - bthread::id_status
    - bthread_start_background
    - bthread_id_create
    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:
    - bthread_id_lock
    - bthread_id_unlock
    - EXPECT_EQ
    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:
    - pthread_create
    - bthread_join
    - bthread_id_about_to_destroy
    - pthread_join
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_unlock
    - bthread_id_lock
    - bthread::id_status
    - bthread_start_background
    - bthread_id_create
    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_FALSE
    - pthread_create
    - bthread_join
    - bthread_id_about_to_destroy
    - pthread_join
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_lock
    - usleep
    - bthread::id_status
    - bthread_start_background
    - bthread_id_create
    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:
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - EXPECT_STREQ
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - c_str
    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:
    - bthread_id_error2
    - bthread_id_error
    - bthread_id_create2
    - ASSERT_EQ
    - bthread_id_unlock
    - bthread_id_lock
    - bthread_id_create
    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: 15
    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:
    - bthread_usleep
    - EXPECT_EQ
    - bthread_id_trylock
    - bthread_id_unlock_and_destroy
    - EXPECT_TRUE
    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:
    - ARRAY_SIZE
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread_id_join
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    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
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread_id_join
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_error
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create_ranged
    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:
    - std::vector*::push_back
    - EXPECT_EQ
    - bthread_id_unlock
    - static_cast<std::vector<int>*>
    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:
    - EXPECT_EQ
    - ASSERT_TRUE
    - bthread_id_error
    - bthread_id_trylock
    - std::vector::clear
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_unlock
    - std::vector::size
    - bthread::id_value
    - std::vector::empty
    - get_version
    - bthread_id_create
    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::stop
    - butil::Timer::u_elapsed
    - bthread_usleep
    - EXPECT_EQ
    - LOG
    - bthread_id_unlock
    - bthread_id_lock
    - butil::Timer::start
    - 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
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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
    - bthread_usleep
    - bthread_id_lock
    - EXPECT_EQ
    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
    - pthread_create
    - pthread_join
    - ASSERT_EQ
    - bthread::id_value
    - get_version
    - bthread_id_create
    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
    - pthread_create
    - bthread_usleep
    - pthread_join
    - ASSERT_EQ
    - bthread_id_join
    - bthread::id_value
    - get_version
    - bthread_id_create
    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:
    - bthread_id_join
    - get_version
    - EXPECT_EQ
    - bthread::id_value
    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:
    - ARRAY_SIZE
    - bthread_join
    - bthread_usleep
    - ASSERT_TRUE
    - bthread_id_trylock
    - bthread::TaskGroup::exists
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread::id_value
    - bthread_stop
    - get_version
    - bthread_start_urgent
    - bthread_id_create
    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:
    - bthread_id_join
    - get_version
    - EXPECT_EQ
    - bthread::id_value
    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:
    - bthread_id_unlock_and_destroy
    - EXPECT_EQ
    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:
    - ARRAY_SIZE
    - pthread_create
    - bthread_usleep
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - pthread_join
    - bthread_id_list_init
    - ASSERT_EQ
    - bthread_id_list_add
    - bthread::id_value
    - get_version
    - bthread_id_create
    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_error
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - bthread_id_lock
    - bthread::id_status
    - bthread_id_create
    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:
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_unlock
    - bthread::id_status
    - bthread_id_lock_and_reset_range
    - bthread_id_create
    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:
    - bthread_id_lock
    - butil::Timer::Timer
    - EXPECT_EQ
    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:
    - pthread_create
    - bthread_join
    - bthread_id_about_to_destroy
    - pthread_join
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_lock
    - bthread::id_status
    - bthread_start_background
    - bthread_id_create
    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:
    - bthread_id_lock
    - bthread_id_unlock
    - EXPECT_EQ
    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:
    - pthread_create
    - bthread_join
    - bthread_id_about_to_destroy
    - pthread_join
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_unlock
    - bthread_id_lock
    - bthread::id_status
    - bthread_start_background
    - bthread_id_create
    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_FALSE
    - pthread_create
    - bthread_join
    - bthread_id_about_to_destroy
    - pthread_join
    - bthread_id_unlock_and_destroy
    - ASSERT_EQ
    - bthread_id_lock
    - usleep
    - bthread::id_status
    - bthread_start_background
    - bthread_id_create
    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:
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - EXPECT_STREQ
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - c_str
    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:
    - bthread_id_error2
    - bthread_id_error
    - bthread_id_create2
    - ASSERT_EQ
    - bthread_id_unlock
    - bthread_id_lock
    - bthread_id_create
    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:
    - string16
    - EXPECT_EQ
    - NullableString16::string
    - EXPECT_TRUE
    - NullableString16::is_null
    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:
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    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:
    - string16
    - EXPECT_EQ
    - NullableString16::string
    - EXPECT_TRUE
    - NullableString16::is_null
    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:
    - butil::ASCIIToUTF16
    - EXPECT_EQ
    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::TimeDelta::FromSeconds
    - butil::PlatformThread::Sleep
    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:
    - Get
    - EXPECT_EQ
    - Pointer
    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::TimeDelta::FromSeconds
    - butil::PlatformThread::Sleep
    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:
    - Get
    - EXPECT_EQ
    - Pointer
    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:
    - Get
    - EXPECT_EQ
    - GetNext
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - Pointer
    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::DelegateSimpleThreadPool::AddWork
    - EXPECT_EQ
    - butil::DelegateSimpleThreadPool::Start
    - butil::DelegateSimpleThreadPool::JoinAll
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    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::LazyInstance<DeleteLogger>::Leaky::Get
    - EXPECT_TRUE
    - butil::ShadowingAtExitManager::ShadowingAtExitManager
    - 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:
    - EXPECT_ALIGNED
    - LazyInstance::Pointer
    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:
    - Action
    - push_back
    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:
    - Action
    - push_back
    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:
    - Action
    - push_back
    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:
    - InjectionTracer::actions
    - EXPECT_TRUE
    - EXPECT_EQ
    - 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:
    - InjectiveMultimap::push_back
    - EXPECT_EQ
    - InjectionTracer::actions
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - EXPECT_EQ
    - InjectionTracer::actions
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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::PerformInjectiveMultimap
    - EXPECT_TRUE
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    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:
    - EXPECT_FALSE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    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:
    - Action
    - push_back
    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:
    - Action
    - push_back
    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:
    - Action
    - push_back
    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:
    - InjectionTracer::actions
    - EXPECT_TRUE
    - EXPECT_EQ
    - 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:
    - InjectiveMultimap::push_back
    - EXPECT_EQ
    - InjectionTracer::actions
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - EXPECT_EQ
    - InjectionTracer::actions
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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:
    - InjectiveMultimap::push_back
    - InjectionTracer::actions
    - butil::Action
    - ASSERT_EQ
    - EXPECT_TRUE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    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::PerformInjectiveMultimap
    - EXPECT_TRUE
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    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:
    - EXPECT_FALSE
    - butil::PerformInjectiveMultimap
    - butil::InjectionArc
    - InjectiveMultimap::push_back
    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
    - RUN_ALL_TESTS
    - 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: 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
    - Dst: free
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:146,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 43
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 148
    functionName: client_thread
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - PLOG
    - memcpy
    - fetch_add
    - free
    - snprintf
    - write
    - writev
    linkageType: ''
    returnType: void
    signature: void * client_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:165,1
    - Dst: butil::unix_socket_listen
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:166,1
    - Dst: tcp_listen
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:168,1
    - Dst: butil::EndPoint
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:168,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:170,1
    - Dst: butil::make_non_blocking
      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: AddHandler
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:172,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:173,1
    - Dst: StartAccept
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:173,1
    - Dst: ClientMeta::ClientMeta
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:177,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:180,1
    - Dst: pthread_create
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:180,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:186,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:187,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:193,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:194,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:196,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:198,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:208,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:208,1
    - Dst: butil::Timer::u_elapsed
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:210,1
    - Dst: pthread_join
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:214,1
    - Dst: printf
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:215,1
    - Dst: StopAccept
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:218,1
    - Dst: sleep
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:220,1
    - Dst: LOG
      Src: /src/brpc/test/brpc_input_messenger_unittest.cpp:224,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 43
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 225
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/brpc_input_messenger_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::u_elapsed
    - pthread_join
    - LOG
    - ASSERT_EQ
    - butil::Timer::start
    - pthread_create
    - butil::Timer::stop
    - ASSERT_TRUE
    - StopAccept
    - snprintf
    - butil::Timer::Timer
    - ProfilerStart
    - butil::unix_socket_listen
    - printf
    - AddHandler
    - butil::EndPoint
    - tcp_listen
    - sleep
    - ProfilerStop
    - butil::make_non_blocking
    - StartAccept
    - ClientMeta::ClientMeta
    linkageType: ''
    returnType: void
    signature: void TEST_F(MessengerTest, dispatch_tasks)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:45,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:45,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_1Byte_Zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:52,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:52,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_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
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_1Byte_Max250)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:57,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:59,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:59,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 61
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_2Byte_251)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:64,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:65,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:68,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:68,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 70
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_2Byte_Max65535)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:75,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:75,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:75,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_3Byte)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:83,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:83,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_8Byte)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:90,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:90,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_ReservedFF_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:96,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:96,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:97,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:97,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 98
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_Truncated_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:105,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:105,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 109
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedInt
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_NullMarkerFB_ReportsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:115,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:115,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:115,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 119
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_NonNull_SetsIsNullFalse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:127,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:127,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:127,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - DecodeLengthEncodedInt
    - static_cast<char>
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_Failure_DefinesOutAndIsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:138,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:138,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 140
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_NullMarker_WithoutIsNullArg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:148,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:150,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 153
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_GT
    - EXPECT_EQ
    - EncodeLengthEncodedInt
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Encode_RoundTrip_AllRanges)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:161,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:162,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:164,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:164,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:165,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 166
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedString
    - EncodeLengthEncodedString
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:170,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:171,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:173,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 175
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - DecodeLengthEncodedString
    - std::string::size
    - EncodeLengthEncodedString
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, ShortString_RoundTrip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:180,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:182,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 184
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedString
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - EncodeLengthEncodedString
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, ContainsNul_RoundTrip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:189,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:192,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 193
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::append
    - DecodeLengthEncodedString
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, TruncatedPayload_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:202,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:202,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:202,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:206,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 207
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedString
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, NullMarkerFB_ReportsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:211,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:214,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:214,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EncodeLengthEncodedString
    - butil::BasicStringPiece::BasicStringPiece
    - DecodeLengthEncodedString
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, NonNull_SetsIsNullFalse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:222,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:225,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:225,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:226,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:227,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 228
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - EncodeLengthEncodedString
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedString
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, EmptyIsNotNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:240,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:240,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:242,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 246
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - EncodePacketHeader
    - DecodePacketHeader
    - ASSERT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, RoundTrip_TypicalSizes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:253,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 255
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - DecodePacketHeader
    - ASSERT_TRUE
    - EncodePacketHeader
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, MaxPayloadLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:262,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 264
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - DecodePacketHeader
    - ASSERT_TRUE
    - EncodePacketHeader
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, SequenceWraparound)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:268,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:268,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:269,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:269,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 270
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodePacketHeader
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, Decode_TruncatedReturnsFalse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:279,1
    - Dst: DecodeNullTerminatedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:279,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 283
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    - DecodeNullTerminatedString
    linkageType: ''
    returnType: void
    signature: void TEST(NullTermStringTest, HappyPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:288,1
    - Dst: DecodeNullTerminatedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:288,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:289,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:291,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 292
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeNullTerminatedString
    linkageType: ''
    returnType: void
    signature: void TEST(NullTermStringTest, EmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:296,1
    - Dst: DecodeNullTerminatedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:296,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 297
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    - DecodeNullTerminatedString
    linkageType: ''
    returnType: void
    signature: void TEST(NullTermStringTest, NoNul_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:45,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:45,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:45,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:46,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 47
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 47
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_1Byte_Zero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:50,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:52,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:52,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:52,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_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
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_1Byte_Max250)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:57,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:57,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:59,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:59,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:59,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 61
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_2Byte_251)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:64,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:65,1
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:66,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:68,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:68,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:68,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 63
    functionDepth: 1
    functionLinenumber: 63
    functionLinenumberEnd: 70
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_2Byte_Max65535)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:73,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:75,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:75,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:75,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_3Byte)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:80,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:83,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:83,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:83,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 85
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_8Byte)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:88,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:90,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:90,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 91
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_ReservedFF_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:94,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:96,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:96,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:96,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:97,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:97,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:97,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 98
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 98
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_Truncated_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:101,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:105,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:105,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:105,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:107,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:108,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 100
    functionDepth: 1
    functionLinenumber: 100
    functionLinenumberEnd: 109
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedInt
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_NullMarkerFB_ReportsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:115,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:115,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:115,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:117,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 111
    functionDepth: 1
    functionLinenumber: 111
    functionLinenumberEnd: 119
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_NonNull_SetsIsNullFalse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:124,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:127,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:127,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:127,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:129,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 121
    functionDepth: 1
    functionLinenumber: 121
    functionLinenumberEnd: 131
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - DecodeLengthEncodedInt
    - static_cast<char>
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_Failure_DefinesOutAndIsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:136,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:138,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:138,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:138,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 140
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Decode_NullMarker_WithoutIsNullArg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:148,1
    - Dst: EXPECT_GT
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:150,1
    - Dst: DecodeLengthEncodedInt
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:150,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:151,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 153
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedInt
    - EXPECT_GT
    - EXPECT_EQ
    - EncodeLengthEncodedInt
    linkageType: ''
    returnType: void
    signature: void TEST(LenencIntTest, Encode_RoundTrip_AllRanges)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:161,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:161,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:162,1
    - Dst: std::string
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:162,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:164,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:164,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:165,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 159
    functionDepth: 1
    functionLinenumber: 159
    functionLinenumberEnd: 166
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedString
    - EncodeLengthEncodedString
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, Empty)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:170,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:170,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:171,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:171,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:173,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:173,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 175
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - DecodeLengthEncodedString
    - std::string::size
    - EncodeLengthEncodedString
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, ShortString_RoundTrip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:180,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:180,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:182,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:182,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 184
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodeLengthEncodedString
    - EXPECT_EQ
    - butil::BasicStringPiece::BasicStringPiece
    - EncodeLengthEncodedString
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, ContainsNul_RoundTrip)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::push_back
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:189,1
    - Dst: std::string::append
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:190,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:192,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 193
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::append
    - DecodeLengthEncodedString
    - std::string::push_back
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, TruncatedPayload_ReturnsZero)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:199,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:202,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:202,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:202,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:205,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:206,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:206,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 207
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedString
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, NullMarkerFB_ReportsNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:211,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:211,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:214,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:214,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:215,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - EncodeLengthEncodedString
    - butil::BasicStringPiece::BasicStringPiece
    - DecodeLengthEncodedString
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, NonNull_SetsIsNullFalse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:222,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:222,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:225,1
    - Dst: DecodeLengthEncodedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:225,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:226,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:227,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 228
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - EncodeLengthEncodedString
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeLengthEncodedString
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(LenencStringTest, EmptyIsNotNull)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:239,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:240,1
    - Dst: std::string::size
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:240,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:242,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:242,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:243,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 246
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - ASSERT_TRUE
    - EncodePacketHeader
    - DecodePacketHeader
    - ASSERT_EQ
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, RoundTrip_TypicalSizes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:251,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:253,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:253,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 255
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - DecodePacketHeader
    - ASSERT_TRUE
    - EncodePacketHeader
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, MaxPayloadLength)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EncodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:260,1
    - Dst: ASSERT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:262,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:262,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 264
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - DecodePacketHeader
    - ASSERT_TRUE
    - EncodePacketHeader
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, SequenceWraparound)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:268,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:268,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:268,1
    - Dst: EXPECT_FALSE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:269,1
    - Dst: DecodePacketHeader
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:269,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:269,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 270
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - DecodePacketHeader
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_FALSE
    linkageType: ''
    returnType: void
    signature: void TEST(PacketHeaderTest, Decode_TruncatedReturnsFalse)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:279,1
    - Dst: DecodeNullTerminatedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:279,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:280,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 276
    functionDepth: 1
    functionLinenumber: 276
    functionLinenumberEnd: 283
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    - DecodeNullTerminatedString
    linkageType: ''
    returnType: void
    signature: void TEST(NullTermStringTest, HappyPath)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:288,1
    - Dst: DecodeNullTerminatedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:288,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:289,1
    - Dst: EXPECT_TRUE
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:291,1
    - Dst: std::string::empty
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 292
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - EXPECT_EQ
    - std::string::empty
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_TRUE
    - DecodeNullTerminatedString
    linkageType: ''
    returnType: void
    signature: void TEST(NullTermStringTest, EmptyString)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:296,1
    - Dst: DecodeNullTerminatedString
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:296,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp:296,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 297
    functionName: TEST
    functionSourceFile: /src/brpc/test/brpc_mysql_auth_packet_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - EXPECT_EQ
    - DecodeNullTerminatedString
    linkageType: ''
    returnType: void
    signature: void TEST(NullTermStringTest, NoNul_ReturnsZero)
  - 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::EchoRequest*::message
    - LOG
    - static_cast<brpc::Controller*>
    - brpc::Controller*::request_protocol
    - test::EchoResponse*::set_message
    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: ASSERT_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: ASSERT_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:
    - Start
    - brpc::ServerOptions::mutable_ssl_options
    - ASSERT_EQ
    - data
    - AddService
    - brpc::ServerOptions::ServerOptions
    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:
    - Join
    - Stop
    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: SSL_free
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:110,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - alpns
    argTypes:
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 113
    functionName: ALPNTest::HandshakeWithServer
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 0
    functionsReached:
    - SSL_get0_alpn_selected
    - std::string::append
    - brpc::CreateSSLSession
    - reinterpret_cast<const unsigned char*>
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - data
    - SSL_free
    - SSL_CTX_free
    - EXPECT_EQ
    - brpc::CreateClientSSLContext
    - EXPECT_NE
    - SSL_CTX_set_alpn_protos
    - butil::EndPoint::EndPoint
    - SSL_do_handshake
    - brpc::ALPNProtocolToString
    - butil::str2endpoint
    - std::string::data
    - butil::tcp_connect
    - 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:126,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:127,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:128,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 129
    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::EchoRequest*::message
    - LOG
    - static_cast<brpc::Controller*>
    - brpc::Controller*::request_protocol
    - test::EchoResponse*::set_message
    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: ASSERT_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: ASSERT_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:
    - Start
    - brpc::ServerOptions::mutable_ssl_options
    - ASSERT_EQ
    - data
    - AddService
    - brpc::ServerOptions::ServerOptions
    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:
    - Join
    - Stop
    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: SSL_free
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:110,1
    - Dst: SSL_CTX_free
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - alpns
    argTypes:
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 113
    functionName: ALPNTest::HandshakeWithServer
    functionSourceFile: /src/brpc/test/brpc_alpn_protocol_unittest.cpp
    functionUses: 1
    functionsReached:
    - SSL_get0_alpn_selected
    - std::string::append
    - brpc::CreateSSLSession
    - reinterpret_cast<const unsigned char*>
    - brpc::ChannelSSLOptions::ChannelSSLOptions
    - brpc::AdaptiveProtocolType::AdaptiveProtocolType
    - data
    - SSL_free
    - SSL_CTX_free
    - EXPECT_EQ
    - brpc::CreateClientSSLContext
    - EXPECT_NE
    - SSL_CTX_set_alpn_protos
    - butil::EndPoint::EndPoint
    - SSL_do_handshake
    - brpc::ALPNProtocolToString
    - butil::str2endpoint
    - std::string::data
    - butil::tcp_connect
    - 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:126,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:126,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:127,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:127,1
    - Dst: EXPECT_EQ
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:128,1
    - Dst: ALPNTest::HandshakeWithServer
      Src: /src/brpc/test/brpc_alpn_protocol_unittest.cpp:128,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 129
    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:
    - GG_INT64_C
    - INSERT_PAIR_TEST
    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:
    - GG_INT64_C
    - INSERT_PAIR_TEST
    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:
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_milliseconds
    - LOG
    - ASSERT_EQ
    - std::unique_lock::unlock
    - IntRecorder::get_value
    - std::unique_lock::lock
    - std::condition_variable::wait_for
    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:
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_milliseconds
    - LOG
    - ASSERT_EQ
    - std::unique_lock::unlock
    - std::unique_lock::lock
    - LatencyRecorder::count
    - std::condition_variable::wait_for
    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:
    - BAIDU_SCOPED_LOCK
    - pthread_cond_destroy
    - pthread_cond_init
    - butil::milliseconds_from_now
    - pthread_cond_timedwait
    - MutexWithLatencyRecorder::mutex
    - ASSERT_EQ
    - LatencyRecorder::count
    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
    - pthread_create
    - pthread_join
    - LOG
    - ASSERT_EQ
    - IntRecorder::get_value
    - LatencyRecorder::count
    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:
    - usleep
    - butil::double_lock
    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:203,1
    - Dst: LatencyRecorder::_latency::reset
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:204,1
    - Dst: DoubleLockArg::m0::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:207,1
    - Dst: DoubleLockArg::m1::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:208,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:210,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:210,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:217,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:217,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:218,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:218,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:220,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:220,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 225
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - DoubleLockArg::m0::set_recorder
    - pthread_join
    - LOG
    - DoubleLockArg::m1::set_recorder
    - ASSERT_EQ
    - IntRecorder::reset
    - IntRecorder::get_value
    - LatencyRecorder::count
    - LatencyRecorder::_latency::reset
    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:230,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:233,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:234,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:236,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:238,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:240,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:241,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:245,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:246,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:248,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:250,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:251,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:252,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:253,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:255,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:256,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:258,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:260,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:262,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:263,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - BAIDU_SCOPED_LOCK
    - butil::Timer::Timer
    - LOG
    - ProfilerStop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - ProfilerStart
    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:
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_milliseconds
    - LOG
    - ASSERT_EQ
    - std::unique_lock::unlock
    - IntRecorder::get_value
    - std::unique_lock::lock
    - std::condition_variable::wait_for
    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:
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_milliseconds
    - LOG
    - ASSERT_EQ
    - std::unique_lock::unlock
    - std::unique_lock::lock
    - LatencyRecorder::count
    - std::condition_variable::wait_for
    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:
    - BAIDU_SCOPED_LOCK
    - pthread_cond_destroy
    - pthread_cond_init
    - butil::milliseconds_from_now
    - pthread_cond_timedwait
    - MutexWithLatencyRecorder::mutex
    - ASSERT_EQ
    - LatencyRecorder::count
    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
    - pthread_create
    - pthread_join
    - LOG
    - ASSERT_EQ
    - IntRecorder::get_value
    - LatencyRecorder::count
    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:
    - usleep
    - butil::double_lock
    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:203,1
    - Dst: LatencyRecorder::_latency::reset
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:204,1
    - Dst: DoubleLockArg::m0::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:207,1
    - Dst: DoubleLockArg::m1::set_recorder
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:208,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:209,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:210,1
    - Dst: pthread_create
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:210,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:213,1
    - Dst: pthread_join
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:214,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:217,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:217,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:217,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:218,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:218,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:218,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:220,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:220,1
    - Dst: IntRecorder::get_value
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:220,1
    - Dst: ASSERT_EQ
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: LatencyRecorder::count
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:224,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 225
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - ARRAY_SIZE
    - pthread_create
    - DoubleLockArg::m0::set_recorder
    - pthread_join
    - LOG
    - DoubleLockArg::m1::set_recorder
    - ASSERT_EQ
    - IntRecorder::reset
    - IntRecorder::get_value
    - LatencyRecorder::count
    - LatencyRecorder::_latency::reset
    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:230,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:233,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:234,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:236,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:238,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:240,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:241,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:245,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:246,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:248,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:250,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:251,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:252,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:253,1
    - Dst: ProfilerStart
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:255,1
    - Dst: butil::Timer::start
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:256,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:258,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:260,1
    - Dst: ProfilerStop
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:262,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/test/bvar_lock_timer_unittest.cpp:263,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 264
    functionName: TEST_F
    functionSourceFile: /src/brpc/test/bvar_lock_timer_unittest.cpp
    functionUses: 0
    functionsReached:
    - butil::Timer::stop
    - BAIDU_SCOPED_LOCK
    - butil::Timer::Timer
    - LOG
    - ProfilerStop
    - butil::Timer::start
    - butil::Timer::n_elapsed
    - ProfilerStart
    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:
    - memset
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    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:
    - NUM_BITS
    - EXPECT_EQ
    - static_cast<uint64_t>
    - butil::subtle::NoBarrier_CompareAndSwap
    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:
    - butil::subtle::NoBarrier_AtomicExchange
    - EXPECT_EQ
    - NUM_BITS
    - static_cast<uint64_t>
    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:
    - NUM_BITS
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<uint64_t>
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - static_cast<AtomicType>
    - butil::subtle::Release_Store
    - butil::subtle::Acquire_Store
    - butil::subtle::NoBarrier_Store
    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::Acquire_Load
    - EXPECT_EQ
    - static_cast<AtomicType>
    - butil::subtle::NoBarrier_Load
    - butil::subtle::Release_Load
    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:
    - TestAtomicExchange
    - TestStore
    - TestCompareAndSwap
    - TestLoad
    - TestAtomicIncrementBounds
    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:
    - EXPECT_EQ
    - EXPECT_NE
    - free
    - reinterpret_cast<char*>
    - calloc
    - reinterpret_cast<void*>
    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:
    - EXPECT_EQ
    - EXPECT_NE
    - EXPECT_TRUE
    - reinterpret_cast<void*>
    - EXPECT_FALSE
    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:
    - memset
    - EXPECT_EQ
    - butil::subtle::NoBarrier_AtomicIncrement
    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:
    - NUM_BITS
    - EXPECT_EQ
    - static_cast<uint64_t>
    - butil::subtle::NoBarrier_CompareAndSwap
    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:
    - butil::subtle::NoBarrier_AtomicExchange
    - EXPECT_EQ
    - NUM_BITS
    - static_cast<uint64_t>
    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:
    - NUM_BITS
    - butil::subtle::NoBarrier_AtomicIncrement
    - static_cast<uint64_t>
    - EXPECT_EQ
    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:
    - EXPECT_EQ
    - static_cast<AtomicType>
    - butil::subtle::Release_Store
    - butil::subtle::Acquire_Store
    - butil::subtle::NoBarrier_Store
    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::Acquire_Load
    - EXPECT_EQ
    - static_cast<AtomicType>
    - butil::subtle::NoBarrier_Load
    - butil::subtle::Release_Load
    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:
    - TestAtomicExchange
    - TestStore
    - TestCompareAndSwap
    - TestLoad
    - TestAtomicIncrementBounds
    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:
    - EXPECT_EQ
    - EXPECT_NE
    - free
    - reinterpret_cast<char*>
    - calloc
    - reinterpret_cast<void*>
    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:
    - EXPECT_EQ
    - EXPECT_NE
    - EXPECT_TRUE
    - reinterpret_cast<void*>
    - EXPECT_FALSE
    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:
    - malloc
    - reinterpret_cast<unsigned char*>
    - free
    - EXPECT_TRUE
    - Valid
    - CheckAlignment
    - 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:
    - malloc
    - ASSERT_TRUE
    - free
    - ASSERT_EQ
    - realloc
    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:
    - malloc
    - NextSize
    - reinterpret_cast<int*>
    - EXPECT_EQ
    - reinterpret_cast<unsigned char*>
    - free
    - min
    - reinterpret_cast<int**>
    - EXPECT_TRUE
    - Valid
    - realloc
    - Fill
    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:
    - malloc
    - static_cast<char*>
    - NextSize
    - EXPECT_NE
    - free
    - reinterpret_cast<char*>
    - realloc
    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:
    - NextSize
    - reinterpret_cast<unsigned char*>
    - IsZeroed
    - free
    - min
    - EXPECT_TRUE
    - Valid
    - _recalloc
    - Fill
    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:
    - static_cast<unsigned char*>
    - _aligned_malloc
    - NextSize
    - ASSERT_NE
    - EXPECT_TRUE
    - ARRAYSIZE
    - Valid
    - _aligned_free
    - CheckAlignment
    - Fill
    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
    - butil::get_thread_local<YellObj>
    - EXPECT_EQ
    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:
    - pthread_create
    - butil::get_thread_local<YellObj>
    - ASSERT_TRUE
    - EXPECT_EQ
    - pthread_join
    - ASSERT_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:
    - int::int
    - EXPECT_TRUE
    - butil::thread_atexit
    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:
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - ASSERT_EQ
    - proc_dummy
    - butil::thread_atexit
    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:
    - assert
    - get_oss
    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:
    - ASSERT_EQ
    - butil::thread_atexit
    - butil::thread_atexit_cancel
    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
    - butil::get_thread_local<YellObj>
    - EXPECT_EQ
    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:
    - pthread_create
    - butil::get_thread_local<YellObj>
    - ASSERT_TRUE
    - EXPECT_EQ
    - pthread_join
    - ASSERT_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:
    - int::int
    - EXPECT_TRUE
    - butil::thread_atexit
    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:
    - pthread_create
    - ASSERT_TRUE
    - pthread_join
    - ASSERT_EQ
    - proc_dummy
    - butil::thread_atexit
    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:
    - assert
    - get_oss
    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:
    - ASSERT_EQ
    - butil::thread_atexit
    - butil::thread_atexit_cancel
    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_thrift.cpp:31,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_thrift.cpp:32,1
    - Dst: brpc::policy::ParseThriftMessage
      Src: /src/brpc/test/fuzzing/fuzz_thrift.cpp:34,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 23
    functionDepth: 1
    functionLinenumber: 23
    functionLinenumberEnd: 36
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_thrift.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseThriftMessage
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_mongo.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_mongo.cpp:33,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_mongo.cpp:35,1
    - Dst: brpc::policy::ParseMongoMessage
      Src: /src/brpc/test/fuzzing/fuzz_mongo.cpp:39,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_mongo.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    - brpc::policy::ParseMongoMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_baidu_rpc.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_baidu_rpc.cpp:33,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_baidu_rpc.cpp:35,1
    - Dst: brpc::policy::ParseRpcMessage
      Src: /src/brpc/test/fuzzing/fuzz_baidu_rpc.cpp:39,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_baidu_rpc.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseRpcMessage
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_memcache.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_memcache.cpp:33,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_memcache.cpp:35,1
    - Dst: brpc::policy::ParseMemcacheMessage
      Src: /src/brpc/test/fuzzing/fuzz_memcache.cpp:39,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_memcache.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseMemcacheMessage
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    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_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:
    - butil::Arena::Arena
    - brpc::RedisReply::ConsumePartialIOBuf
    - butil::IOBuf::append
    - brpc::RedisCommandParser::RedisCommandParser
    - brpc::RedisCommandParser::Consume
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:35,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:36,1
    - Dst: brpc::ReadAMFObject
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:44,1
    - Dst: brpc::ReadAMFString
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:52,1
    - Dst: brpc::AMFInputStream::good
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:60,1
    - Dst: brpc::AMFInputStream::cut_u8
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:60,1
    - Dst: brpc::AMFInputStream::cut_u64
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:64,1
    - Dst: brpc::AMFInputStream::cut_u8
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:67,1
    - Dst: brpc::AMFInputStream::cut_u16
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:70,1
    - Dst: brpc::AMFInputStream::cutn
      Src: /src/brpc/test/fuzzing/fuzz_amf.cpp:72,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 32
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 81
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFInputStream::cut_u64
    - brpc::AMFInputStream::good
    - brpc::AMFInputStream::cutn
    - butil::IOBuf::append
    - brpc::ReadAMFObject
    - brpc::ReadAMFString
    - brpc::AMFInputStream::cut_u8
    - brpc::AMFInputStream::cut_u16
    - 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:
    - brpc::HPacker::Decode
    - butil::IOBuf::IOBuf
    - brpc::HPacker::Init
    - butil::IOBuf::append
    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:
    - malloc
    - memcpy
    - brpc::URI::SetHttpURL
    - brpc::ParseRtmpURL
    - brpc::URI::URI
    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
    - butil::IOBuf::append
    - brpc::HttpMessage::ParseFromArray
    - butil::IOBuf::IOBuf
    - brpc::HttpMessage::HttpMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:35,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:36,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:38,1
    - Dst: brpc::policy::ParseSofaMessage
      Src: /src/brpc/test/fuzzing/fuzz_sofa.cpp:42,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 26
    functionDepth: 1
    functionLinenumber: 26
    functionLinenumberEnd: 44
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_sofa.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseSofaMessage
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:33,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:34,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:36,1
    - Dst: brpc::policy::ParseEspMessage
      Src: /src/brpc/test/fuzzing/fuzz_esp.cpp:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 43
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_esp.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    - brpc::policy::ParseEspMessage
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_couchbase.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_couchbase.cpp:33,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_couchbase.cpp:35,1
    - Dst: brpc::policy::ParseCouchbaseMessage
      Src: /src/brpc/test/fuzzing/fuzz_couchbase.cpp:39,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseCouchbaseMessage
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_streaming.cpp:32,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_streaming.cpp:33,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_streaming.cpp:35,1
    - Dst: brpc::policy::ParseStreamingMessage
      Src: /src/brpc/test/fuzzing/fuzz_streaming.cpp:39,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_streaming.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseStreamingMessage
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - p
    - at
    - length
    argTypes:
    - brpc::http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 25
      start: 25
    functionDepth: 0
    functionLinenumber: 25
    functionLinenumberEnd: 25
    functionName: on_url_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_url_cb(brpc::http_parser* p, const char* at, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - p
    - at
    - length
    argTypes:
    - brpc::http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 26
    functionName: on_header_field_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_header_field_cb(brpc::http_parser* p, const char* at, size_t
      length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - p
    - at
    - length
    argTypes:
    - brpc::http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 27
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 27
    functionName: on_header_value_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_header_value_cb(brpc::http_parser* p, const char* at, size_t
      length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - p
    - at
    - length
    argTypes:
    - brpc::http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 28
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 28
    functionName: on_body_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_body_cb(brpc::http_parser* p, const char* at, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - brpc::http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 29
    functionName: on_message_begin_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_message_begin_cb(brpc::http_parser* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - brpc::http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 30
    functionDepth: 0
    functionLinenumber: 30
    functionLinenumberEnd: 30
    functionName: on_headers_complete_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_headers_complete_cb(brpc::http_parser* p)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - p
    argTypes:
    - brpc::http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 31
    functionName: on_message_complete_cb
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int on_message_complete_cb(brpc::http_parser* p)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::http_parser_init
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:49,1
    - Dst: memset
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:51,1
    - Dst: brpc::http_parser_execute
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:59,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:60,1
    - Dst: brpc::http_parser_init
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:66,1
    - Dst: memset
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:68,1
    - Dst: brpc::http_parser_execute
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:76,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:77,1
    - Dst: brpc::http_parser_parse_url
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:83,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:83,1
    - Dst: brpc::http_parser_parse_url
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:90,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/test/fuzzing/fuzz_http_parser.cpp:90,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 41
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 97
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_http_parser.cpp
    functionUses: 0
    functionsReached:
    - brpc::http_parser_init
    - brpc::http_parser_parse_url
    - memset
    - brpc::http_parser_execute
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:33,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:34,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:36,1
    - Dst: brpc::policy::ParseNsheadMessage
      Src: /src/brpc/test/fuzzing/fuzz_shead.cpp:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 25
    functionDepth: 1
    functionLinenumber: 25
    functionLinenumberEnd: 43
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_shead.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - brpc::policy::ParseNsheadMessage
    - butil::IOBuf::append
    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::Base64Decode
    - butil::crc32c::Value
    - butil::Base64Encode
    - butil::Hash
    - butil::SHA1HashString
    - reinterpret_cast<const char*>
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:33,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:34,1
    - Dst: get_fuzz_socket
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:36,1
    - Dst: brpc::policy::ParseHuluMessage
      Src: /src/brpc/test/fuzzing/fuzz_hulu.cpp:40,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - data
    - size
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 24
    functionDepth: 1
    functionLinenumber: 24
    functionLinenumberEnd: 43
    functionName: LLVMFuzzerTestOneInput
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_hulu.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ParseHuluMessage
    - butil::IOBuf::IOBuf
    - get_fuzz_socket
    - butil::IOBuf::append
    linkageType: ''
    returnType: int
    signature: int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::EndPoint
      Src: /src/brpc/test/fuzzing/fuzz_common.h:34,1
    - Dst: Socket::Create
      Src: /src/brpc/test/fuzzing/fuzz_common.h:35,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/test/fuzzing/fuzz_common.h:36,1
    - Dst: brpc::SocketUniquePtr::get
      Src: /src/brpc/test/fuzzing/fuzz_common.h:41,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 42
    functionName: get_fuzz_socket
    functionSourceFile: /src/brpc/test/fuzzing/fuzz_common.h
    functionUses: 9
    functionsReached:
    - butil::EndPoint
    - brpc::SetTrackMeAddress
    - brpc::SocketUniquePtr::get
    - Socket::Create
    linkageType: ''
    returnType: brpc::Socket
    signature: brpc::Socket * get_fuzz_socket()
  - 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:
    - ServiceDescriptor*::FindMethodByName
    - Importer*::pool
    - 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:
    - ServiceDescriptor*::FindMethodByName
    - Importer*::pool
    - 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:
    - substr
    - find_last_of
    - LOG
    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:
    - sleep
    - pbrpcframework::RpcPress*::stop
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - LOG
    - set_press_options
    - StartDummyServerAt
    - pbrpcframework::RpcPress*::start
    - pbrpcframework::RpcPress*::init
    - pbrpcframework::RpcPress::RpcPress
    - brpc::IsAskedToQuit
    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:
    - c_str
    - LOG_AT
    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:
    - clear
    - Init
    - LOG
    - assign
    - host::c_str
    - get_prototype_by_method_descriptor
    - find_method_by_name
    - brpc::ChannelOptions::ChannelOptions
    - lb_policy::c_str
    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: 0
    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:
    - brpc::JsonLoader::load_messages
    - butil::StringSplitter::field
    - LOG
    - empty
    - expose
    - butil::CreateDirectoryAndGetError
    - input::c_str
    - butil::FilePath::DirName
    - LOG_IF
    - butil::FilePath::value
    - PLOG
    - proto_file::substr
    - std::string
    - output::c_str
    - fopen
    - open
    - proto_file::empty
    - output::empty
    - pbrpcframework::RpcPress::init
    - size
    - google::protobuf::compiler::DiskSourceTree::MapPath
    - std::string::c_str
    - proto_includes::empty
    - Import
    - butil::FilePath
    - PressClient::PressClient
    - butil::PathExists
    - proto_includes::c_str
    - proto_file::find_last_of
    - butil::StringSplitter::length
    - google::protobuf::compiler::Importer::Importer
    - input::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::cpuwide_time_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*::ErrorText
    - brpc::Controller*::Failed
    - std::string::c_str
    - brpc::Controller*::ErrorCode
    - fprintf
    - butil::cpuwide_time_us
    - LOG
    - json2pb::ProtoMessageToJson
    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::cpuwide_time_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:
    - butil::monotonic_time_ns
    - brpc::Join
    - brpc::Controller::Controller
    - std::max
    - fetch_add
    - call_method
    - butil::cpuwide_time_us
    - LOG
    - brpc::Controller*::call_id
    - "brpc::NewCallback<\n            RpcPress, \n            RpcPress*, \n            brpc::Controller*,
      \n            Message*, \n            Message*, int64_t>"
    - empty
    - usleep
    - get_output_message
    - size
    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
    - resize
    - pbrpcframework::RpcPress::start
    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:
    - pthread_join
    - size
    - pbrpcframework::RpcPress::stop
    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:
    - c_str
    - LOG_AT
    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:
    - clear
    - Init
    - LOG
    - assign
    - host::c_str
    - get_prototype_by_method_descriptor
    - find_method_by_name
    - brpc::ChannelOptions::ChannelOptions
    - lb_policy::c_str
    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: 0
    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:
    - brpc::JsonLoader::load_messages
    - butil::StringSplitter::field
    - LOG
    - empty
    - expose
    - butil::CreateDirectoryAndGetError
    - input::c_str
    - butil::FilePath::DirName
    - LOG_IF
    - butil::FilePath::value
    - PLOG
    - proto_file::substr
    - std::string
    - output::c_str
    - fopen
    - open
    - proto_file::empty
    - output::empty
    - pbrpcframework::RpcPress::init
    - size
    - google::protobuf::compiler::DiskSourceTree::MapPath
    - std::string::c_str
    - proto_includes::empty
    - Import
    - butil::FilePath
    - PressClient::PressClient
    - butil::PathExists
    - proto_includes::c_str
    - proto_file::find_last_of
    - butil::StringSplitter::length
    - google::protobuf::compiler::Importer::Importer
    - input::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::cpuwide_time_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*::ErrorText
    - brpc::Controller*::Failed
    - std::string::c_str
    - brpc::Controller*::ErrorCode
    - fprintf
    - butil::cpuwide_time_us
    - LOG
    - json2pb::ProtoMessageToJson
    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::cpuwide_time_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:
    - butil::monotonic_time_ns
    - brpc::Join
    - brpc::Controller::Controller
    - std::max
    - fetch_add
    - call_method
    - butil::cpuwide_time_us
    - LOG
    - brpc::Controller*::call_id
    - "brpc::NewCallback<\n            RpcPress, \n            RpcPress*, \n            brpc::Controller*,
      \n            Message*, \n            Message*, int64_t>"
    - empty
    - usleep
    - get_output_message
    - size
    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
    - resize
    - pbrpcframework::RpcPress::start
    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:
    - pthread_join
    - size
    - pbrpcframework::RpcPress::stop
    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:
    - append_from_file_descriptor
    - read_some
    - PLOG
    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*::append
    - butil::IOBuf*::clear
    - butil::IOBufAsZeroCopyInputStream::Next
    - possibly_valid_json
    - clear
    - VLOG
    - LOG
    - cutn
    - read_some
    - empty
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::empty
    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*>*::clear
    - VLOG
    - std::deque<google::protobuf::Message*>*::size
    - json2pb::JsonToProtoMessage
    - LOG
    - std::deque<google::protobuf::Message*>*::push_back
    - JsonLoader::Reader*::get_next_json
    - New
    - butil::IOBuf::IOBuf
    - LOG_IF
    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:
    - append_from_file_descriptor
    - read_some
    - PLOG
    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*::append
    - butil::IOBuf*::clear
    - butil::IOBufAsZeroCopyInputStream::Next
    - possibly_valid_json
    - clear
    - VLOG
    - LOG
    - cutn
    - read_some
    - empty
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::empty
    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*>*::clear
    - VLOG
    - std::deque<google::protobuf::Message*>*::size
    - json2pb::JsonToProtoMessage
    - LOG
    - std::deque<google::protobuf::Message*>*::push_back
    - JsonLoader::Reader*::get_next_json
    - New
    - butil::IOBuf::IOBuf
    - LOG_IF
    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_cond_init
    - pthread_mutex_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_cond_destroy
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:39,1
    - Dst: butil::cpuwide_time_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::cpuwide_time_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:
    - BAIDU_SCOPED_LOCK
    - latency_recorder::count
    - latency_recorder::max_latency
    - butil::cpuwide_time_us
    - pthread_cond_timedwait
    - latency_recorder::latency
    - butil::microseconds_to_timespec
    - localtime_r
    - error_count::get_value
    - strftime
    - sent_count::get_value
    - printf
    - 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_cond_init
    - pthread_mutex_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_cond_destroy
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/tools/rpc_press/info_thread.cpp:39,1
    - Dst: butil::cpuwide_time_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::cpuwide_time_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:
    - BAIDU_SCOPED_LOCK
    - latency_recorder::count
    - latency_recorder::max_latency
    - butil::cpuwide_time_us
    - pthread_cond_timedwait
    - latency_recorder::latency
    - butil::microseconds_to_timespec
    - localtime_r
    - error_count::get_value
    - strftime
    - sent_count::get_value
    - printf
    - 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:
    - brpc::ListProtocols
    - brpc::Protocol::support_client
    - std::max
    - brpc::Protocol::support_server
    - LOG
    - brpc::Channel*::Init
    - std::vector::size
    - brpc::Channel::Channel
    - c_str
    - brpc::ChannelOptions::ChannelOptions
    - resize
    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:
    - clear
    - size
    linkageType: ''
    returnType: void
    signature: void ChannelGroup::~ChannelGroup()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_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:
    - brpc::Controller*::Failed
    - bthread_usleep
    - butil::cpuwide_time_us
    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::cpuwide_time_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:
    - brpc::SerializedRequest::Clear
    - brpc::SampledRequest*::request::movable
    - std::unique_ptr::release
    - LOG
    - empty
    - usleep
    - brpc::Controller*::http_request
    - brpc::NsheadMessage::NsheadMessage
    - brpc::SerializedRequest::SerializedRequest
    - brpc::Channel*::CallMethod
    - brpc::SampledRequest*::meta::attachment_size
    - brpc::Controller*::reset_sampled_request
    - brpc::SampledRequest*::meta::nshead
    - brpc::Controller::Controller
    - std::max
    - brpc::HttpMessage::ParseFromIOBuf
    - memcpy
    - brpc::SerializedRequest::serialized_data
    - brpc::HttpMessage::body
    - brpc::HttpMessage::HttpMessage
    - static_cast<ChannelGroup*>
    - butil::monotonic_time_ns
    - brpc::SampleIterator::Next
    - fetch_add
    - butil::cpuwide_time_us
    - brpc::Controller*::request_attachment
    - brpc::HttpMessage::header
    - brpc::IsAskedToQuit
    - brpc::NewCallback
    - handle_response
    - brpc::SampledRequest*::request::cutn
    - ChannelGroup*::channel
    - brpc::NsheadMessage::Clear
    - brpc::SampledRequest*::request::size
    - brpc::SampledRequest*::meta::protocol_type
    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
    - pthread_create
    - brpc::InfoThread::InfoThread
    - bthread_join
    - butil::FilePath
    - pthread_join
    - brpc::InfoThread::stop
    - LOG
    - StartDummyServerAt
    - empty
    - ChannelGroup::Init
    - butil::DirectoryExists
    - brpc::InfoThread::start
    - std::vector::resize
    - bthread_start_background
    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_cond_init
    - pthread_mutex_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_cond_destroy
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:39,1
    - Dst: butil::cpuwide_time_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::cpuwide_time_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:
    - BAIDU_SCOPED_LOCK
    - latency_recorder::count
    - latency_recorder::max_latency
    - butil::cpuwide_time_us
    - pthread_cond_timedwait
    - latency_recorder::latency
    - butil::microseconds_to_timespec
    - localtime_r
    - error_count::get_value
    - strftime
    - sent_count::get_value
    - printf
    - 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_cond_init
    - pthread_mutex_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_cond_destroy
    - pthread_mutex_destroy
    linkageType: ''
    returnType: void
    signature: void InfoThread::~InfoThread()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/tools/rpc_replay/info_thread.cpp:39,1
    - Dst: butil::cpuwide_time_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::cpuwide_time_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:
    - BAIDU_SCOPED_LOCK
    - latency_recorder::count
    - latency_recorder::max_latency
    - butil::cpuwide_time_us
    - pthread_cond_timedwait
    - latency_recorder::latency
    - butil::microseconds_to_timespec
    - localtime_r
    - error_count::get_value
    - strftime
    - sent_count::get_value
    - printf
    - 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*::has_rpc_version
    - brpc::TrackMeResponse*::set_severity
    - find
    - brpc::TrackMeRequest*::server_addr
    - LOG
    - butil::EndPoint::EndPoint
    - brpc::TrackMeRequest*::rpc_version
    - butil::str2endpoint
    - brpc::TrackMeResponse*::set_new_interval
    - CHECK_EQ
    - brpc::Controller*::remote_side
    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
    - BugsLoader::BugsLoader
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - BugsLoader::start
    - brpc::Server::AddService
    - brpc::Server::set_version
    - brpc::Server::Start
    - LOG
    - brpc::Server::RunUntilAskedToQuit
    - brpc::ServerOptions::ServerOptions
    - BugsLoader::stop
    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:
    - sleep
    - butil::FileWatcher::init
    - BugsLoader::load_bugs
    - butil::FileWatcher::check_and_consume
    - LOG
    - butil::FileWatcher::FileWatcher
    - c_str
    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:
    - std::unique_ptr::push_back
    - PLOG
    - getline
    - RevisionInfo::error_text::assign
    - butil::StringMultiSplitter::to_longlong
    - butil::StringPiece::data
    - LOG
    - butil::StringMultiSplitter::length
    - butil::StringPiece::size
    - std::unique_ptr::size
    - free
    - fopen
    - std::unique_ptr::release
    - butil::ScopedFILE::get
    - c_str
    - reset
    - BugList::BugList
    - butil::StringMultiSplitter::field
    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*::set_severity
    - std::string*::append
    - brpc::TrackMeResponse*::mutable_error_text
    - std::shared_ptr::get
    - brpc::TrackMeResponse*::severity
    - snprintf
    - std::shared_ptr::size
    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:
    - BAIDU_SCOPED_LOCK
    - output_queue::push_back
    - current_concurrency::fetch_sub
    - Failed
    - SnappyDecompressIOBuf
    - response_attachment
    - std::make_pair
    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:
    - brpc::Channel::Init
    - AccessThreadArgs*::url_list::size
    - AccessThreadArgs*::current_concurrency::fetch_sub
    - BAIDU_SCOPED_LOCK
    - AccessThreadArgs*::current_concurrency::fetch_add
    - bthread_usleep
    - OnHttpCallEnd*::cntl::http_request
    - AccessThreadArgs*::output_queue::push_back
    - LOG
    - SnappyDecompressIOBuf
    - OnHttpCallEnd::OnHttpCallEnd
    - brpc::Channel::Channel
    - brpc::Channel::CallMethod
    - c_str
    - std::make_pair
    - brpc::ChannelOptions::ChannelOptions
    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:
    - GFLAGS_NAMESPACE::ParseCommandLineFlags
    - butil::StringPiece::remove_prefix
    - bthread_join
    - getline
    - std::deque::size
    - empty
    - usleep
    - CHECK_EQ
    - butil::ScopedFILE::get
    - std::deque::clear
    - PLOG
    - butil::StringPiece::starts_with
    - current_concurrency::store
    - butil::StringPiece::substr
    - fopen
    - c_str
    - std::vector::resize
    - std::deque::push_back
    - second::empty
    - BAIDU_SCOPED_LOCK
    - std::deque::empty
    - butil::StringPiece::trim_spaces
    - current_concurrency::load
    - butil::StringPiece::empty
    - butil::StringPiece::as_string
    - butil::ScopedFILE::ScopedFILE
    - butil::ScopedFILE::reset
    - std::deque::swap
    - bthread_start_background
    - AccessThreadArgs::AccessThreadArgs
    - butil::StringPiece::find
    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*::ErrorText
    - brpc::Controller*::Failed
    - google::protobuf::Closure*::Run
    - brpc::Controller*::ErrorCode
    - brpc::Controller*::SetFailed
    - brpc::Controller*::response_attachment
    - butil::IOBuf::append
    - cut_until
    - butil::IOBuf::IOBuf
    - brpc::Controller*::http_response
    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:
    - std::string::append
    - static_cast<brpc::Controller*>
    - brpc::Channel::CallMethod
    - brpc::Controller*::http_request
    - brpc::ClosureGuard::release
    - brpc::Channel::Init
    - brpc::Controller::Controller
    - std::string*::c_str
    - std::string::push_back
    - brpc::Channel::Channel
    - fragment
    - std::string::c_str
    - brpc::Controller*::SetFailed
    - brpc::Controller*::request_attachment
    - brpc::ChannelOptions::ChannelOptions
    - query
    - brpc::NewCallback
    - GFLAGS_NAMESPACE::GetCommandLineOption
    - atoll
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - path
    - brpc::Controller*::set_timeout_ms
    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
    - brpc::Server::set_version
    - brpc::Server::Start
    - LOG
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - empty
    - ViewServiceImpl::ViewServiceImpl
    - brpc::Server::RunUntilAskedToQuit
    - brpc::ServerOptions::ServerOptions
    linkageType: ''
    returnType: int
    signature: int main(int argc, char* argv[])
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 51
    functionName: COMMON_VARIABLE_CONSTRUCTOR
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: COMMON_VARIABLE_CONSTRUCTOR(TypeName)
  - 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: ~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: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    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: 74
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 74
    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: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    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: 120
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 120
    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: 140
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 140
    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:151,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 152
    functionName: bvar::Variable::expose
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::expose_impl
    - butil::BasicStringPiece::BasicStringPiece
    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:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 173
    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: 185
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 185
    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: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - TypeName
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 51
    functionName: COMMON_VARIABLE_CONSTRUCTOR
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: COMMON_VARIABLE_CONSTRUCTOR(TypeName)
  - 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: ~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: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    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: 74
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 74
    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: 100
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 100
    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: 120
      start: 120
    functionDepth: 0
    functionLinenumber: 120
    functionLinenumberEnd: 120
    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: 140
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 140
    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:151,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/variable.h:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 149
    functionDepth: 1
    functionLinenumber: 149
    functionLinenumberEnd: 152
    functionName: bvar::Variable::expose
    functionSourceFile: /src/brpc/src/bvar/variable.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::expose_impl
    - butil::BasicStringPiece::BasicStringPiece
    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:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 169
    functionDepth: 1
    functionLinenumber: 169
    functionLinenumberEnd: 173
    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: 185
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 185
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - var
    argTypes:
    - ostream
    - ::bvar::Variable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 262
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - var
    argTypes:
    - ostream
    - ::bvar::Variable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 262
    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:
    - bvar::Collected::submit
    - butil::cpuwide_time_us
    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:
    - bvar::is_collectable_before_first_time_grabbed
    - butil::fast_rand
    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:
    - bvar::Collected::submit
    - butil::cpuwide_time_us
    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:
    - bvar::is_collectable_before_first_time_grabbed
    - butil::fast_rand
    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:65,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/multi_dimension.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 69
    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:75,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension.h:75,1
    - Dst: std::equal
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - key_type
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 77
    functionName: operator()(const key_type& k1, const K& k2) const
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - cbegin
    - cend
    - size
    - 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:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    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:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: bvar::MultiDimension::get_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 17
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: value_ptr_type
    signature: value_ptr_type get_stats(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/bvar/multi_dimension.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - max_stats_count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: bvar::MultiDimension::set_max_stats_count
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: void
    signature: void set_max_stats_count(size_t max_stats_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 151
    functionName: bvar::MultiDimension::get_stats_read_only
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: value_ptr_type
    signature: value_ptr_type get_stats_read_only(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: bvar::MultiDimension::get_stats_read_or_insert
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: value_ptr_type
    signature: value_ptr_type get_stats_read_or_insert(const K& labels_value, bool*
      do_write = nullptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:173,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: 174
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 174
    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: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:180,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension.h:180,1
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:181,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: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: bvar::MultiDimension::insert_metrics_map
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - insert
    - cend
    - cbegin
    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: std::make_shared<value_type>
      Src: /src/brpc/src/bvar/multi_dimension.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 211
    functionName: bvar::MultiDimension::new_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - std::make_shared<value_type>
    linkageType: ''
    returnType: typename std::enable_if<S, value_ptr_type>::type
    signature: typename std::enable_if<S, value_ptr_type>::type new_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_type::value_type
      Src: /src/brpc/src/bvar/multi_dimension.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: bvar::MultiDimension::new_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - value_type::value_type
    linkageType: ''
    returnType: typename std::enable_if<!S, value_ptr_type>::type
    signature: typename std::enable_if<!S, value_ptr_type>::type new_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/bvar/multi_dimension.h:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' v'
    argTypes:
    - value_ptr_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: bvar::MultiDimension::delete_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: typename std::enable_if<S>::type
    signature: typename std::enable_if<S>::type delete_value(value_ptr_type& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' v'
    argTypes:
    - value_ptr_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 225
    functionName: bvar::MultiDimension::delete_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename std::enable_if<!S>::type
    signature: typename std::enable_if<!S>::type delete_value(value_ptr_type& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BUTIL_HASH_NAMESPACE::hash<butil::StringPiece>
      Src: /src/brpc/src/bvar/multi_dimension.h:65,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/bvar/multi_dimension.h:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 69
    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:75,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension.h:75,1
    - Dst: std::equal
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 2
    argNames:
    - ' k1'
    - ' k2'
    argTypes:
    - key_type
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 77
    functionName: operator()(const key_type& k1, const K& k2) const
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - cbegin
    - cend
    - size
    - 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:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    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:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 119
    functionName: bvar::MultiDimension::get_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 17
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: value_ptr_type
    signature: value_ptr_type get_stats(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::max
      Src: /src/brpc/src/bvar/multi_dimension.h:141,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - max_stats_count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    functionName: bvar::MultiDimension::set_max_stats_count
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - std::max
    linkageType: ''
    returnType: void
    signature: void set_max_stats_count(size_t max_stats_count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 151
    functionName: bvar::MultiDimension::get_stats_read_only
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: value_ptr_type
    signature: value_ptr_type get_stats_read_only(const K& labels_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension.h:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 157
    functionDepth: 0
    functionLinenumber: 157
    functionLinenumberEnd: 159
    functionName: bvar::MultiDimension::get_stats_read_or_insert
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - get_stats_impl
    linkageType: ''
    returnType: value_ptr_type
    signature: value_ptr_type get_stats_read_or_insert(const K& labels_value, bool*
      do_write = nullptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:173,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: 174
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 174
    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: cbegin
      Src: /src/brpc/src/bvar/multi_dimension.h:180,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension.h:180,1
    - Dst: insert
      Src: /src/brpc/src/bvar/multi_dimension.h:181,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: 182
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 182
    functionName: bvar::MultiDimension::insert_metrics_map
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - insert
    - cend
    - cbegin
    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: std::make_shared<value_type>
      Src: /src/brpc/src/bvar/multi_dimension.h:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 211
    functionName: bvar::MultiDimension::new_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - std::make_shared<value_type>
    linkageType: ''
    returnType: typename std::enable_if<S, value_ptr_type>::type
    signature: typename std::enable_if<S, value_ptr_type>::type new_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value_type::value_type
      Src: /src/brpc/src/bvar/multi_dimension.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: bvar::MultiDimension::new_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - value_type::value_type
    linkageType: ''
    returnType: typename std::enable_if<!S, value_ptr_type>::type
    signature: typename std::enable_if<!S, value_ptr_type>::type new_value()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/bvar/multi_dimension.h:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' v'
    argTypes:
    - value_ptr_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 1
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: bvar::MultiDimension::delete_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached:
    - reset
    linkageType: ''
    returnType: typename std::enable_if<S>::type
    signature: typename std::enable_if<S>::type delete_value(value_ptr_type& v)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' v'
    argTypes:
    - value_ptr_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 225
    functionName: bvar::MultiDimension::delete_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: typename std::enable_if<!S>::type
    signature: typename std::enable_if<!S>::type delete_value(value_ptr_type& v)
  - 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: 0
    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: 0
    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:
    - bvar::MVariableBase::expose_impl
    - butil::BasicStringPiece::BasicStringPiece
    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:
    - cend
    - cbegin
    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:
    - bvar::MVariableBase::expose_impl
    - butil::BasicStringPiece::BasicStringPiece
    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:
    - cend
    - cbegin
    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:
    - init
    - pthread_mutex_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: 0
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: bvar::MVariableBase::get_description
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - describe
    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
    - BAIDU_SCOPED_LOCK
    - MVarEntry*::var::describe
    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
    - bvar::MVariableBase::describe_exposed
    - std::string
    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: 1
    functionLinenumber: 139
    functionLinenumberEnd: 195
    functionName: bvar::MVariableBase::expose_impl
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 4
    functionsReached:
    - reserve
    - bvar::MVariableBase::hide
    - BAIDU_SCOPED_LOCK
    - clear
    - to_underscored_name
    - LOG
    - get_mvar_map
    - empty
    - bvar::MVariableBase::get_description
    - RELEASE_ASSERT_VERBOSE
    - seek
    - bvar::MVariableBase::count_exposed
    - push_back
    - size
    - butil::back_char
    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:
    - BAIDU_SCOPED_LOCK
    - clear
    - CHECK
    - get_mvar_map
    - erase
    - empty
    - CHECK_EQ
    - 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:
    - clear
    - get_mvar_map
    - 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:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - std::vector<std::string>*::clear
    - std::vector<std::string>*::reserve
    - std::vector<std::string>*::push_back
    - get_mvar_map
    - 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:
    - BAIDU_SCOPED_LOCK
    - MVarEntry*::var::dump
    - LOG
    - get_mvar_map
    - static_cast<size_t>
    - bvar::MVariableBase::list_exposed
    - seek
    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:
    - init
    - pthread_mutex_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: 0
    functionLinenumber: 113
    functionLinenumberEnd: 117
    functionName: bvar::MVariableBase::get_description
    functionSourceFile: /src/brpc/src/bvar/mvariable.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - describe
    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
    - BAIDU_SCOPED_LOCK
    - MVarEntry*::var::describe
    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
    - bvar::MVariableBase::describe_exposed
    - std::string
    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:
    - reserve
    - bvar::MVariableBase::hide
    - BAIDU_SCOPED_LOCK
    - clear
    - to_underscored_name
    - LOG
    - get_mvar_map
    - empty
    - bvar::MVariableBase::get_description
    - RELEASE_ASSERT_VERBOSE
    - seek
    - bvar::MVariableBase::count_exposed
    - push_back
    - size
    - butil::back_char
    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:
    - BAIDU_SCOPED_LOCK
    - clear
    - CHECK
    - get_mvar_map
    - erase
    - empty
    - CHECK_EQ
    - 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:
    - clear
    - get_mvar_map
    - 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:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - std::vector<std::string>*::clear
    - std::vector<std::string>*::reserve
    - std::vector<std::string>*::push_back
    - get_mvar_map
    - 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:
    - BAIDU_SCOPED_LOCK
    - MVarEntry*::var::dump
    - LOG
    - get_mvar_map
    - static_cast<size_t>
    - bvar::MVariableBase::list_exposed
    - seek
    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: 1
    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: 2
    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::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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:
    - va_start
    - butil::string_vprintf
    - expose
    - va_end
    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
    - butil::string_vprintf
    - expose_as
    - va_end
    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
    - butil::string_vprintf
    - va_end
    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: 1
    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: 2
    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::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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:
    - va_start
    - butil::string_vprintf
    - expose
    - va_end
    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
    - butil::string_vprintf
    - expose_as
    - va_end
    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
    - butil::string_vprintf
    - va_end
    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: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    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: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    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: 49
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 49
    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: 56
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 56
    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:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 59
    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: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    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:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 66
    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: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    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:74,1
    - Dst: get_average_double
      Src: /src/brpc/src/bvar/recorder.h:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    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: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    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: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    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: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    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: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    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:118,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:118,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Stat
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 120
    functionName: operator()(Stat& lhs, uint64_t rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - _extend_sign_bit
    - _get_sum
    - _get_num
    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:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 131
    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:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 136
    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:139,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/recorder.h:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    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: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::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: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::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: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: 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: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::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: detail::AddStat
      Src: /src/brpc/src/bvar/recorder.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 165
    functionName: bvar::IntRecorder::op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - detail::AddStat
    linkageType: ''
    returnType: detail::AddStat
    signature: detail::AddStat op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::MinusStat
      Src: /src/brpc/src/bvar/recorder.h:166,1
    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: bvar::IntRecorder::inv_op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - detail::MinusStat
    linkageType: ''
    returnType: detail::MinusStat
    signature: detail::MinusStat inv_op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 172
    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:176,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/recorder.h:177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 180
    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:185,1
    - Dst: data
      Src: /src/brpc/src/bvar/recorder.h:185,1
    - Dst: size
      Src: /src/brpc/src/bvar/recorder.h:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: bvar::IntRecorder::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached:
    - size
    - data
    - assign
    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: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    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: 196
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 196
    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: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    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: 211
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 211
    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: 220
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 220
    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: 239
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 239
    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:248,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:250,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:252,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/recorder.h:255,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:259,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:260,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:260,1
    - Dst: empty
      Src: /src/brpc/src/bvar/recorder.h:262,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:263,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:266,1
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/recorder.h:270,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:271,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:272,1
    - Dst: agent_type*::element::load
      Src: /src/brpc/src/bvar/recorder.h:276,1
    - Dst: _get_complement
      Src: /src/brpc/src/bvar/recorder.h:277,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:281,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:282,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:283,1
    - Dst: _will_overflow
      Src: /src/brpc/src/bvar/recorder.h:284,1
    - Dst: _extend_sign_bit
      Src: /src/brpc/src/bvar/recorder.h:284,1
    - Dst: commit_and_clear
      Src: /src/brpc/src/bvar/recorder.h:288,1
    - Dst: agent_type*::element::compare_exchange_weak
      Src: /src/brpc/src/bvar/recorder.h:293,1
    - Dst: _compress
      Src: /src/brpc/src/bvar/recorder.h:294,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 1
    argNames:
    - sample
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 296
    functionName: '& IntRecorder::operator<<(int64_t sample)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - agent_type*::element::compare_exchange_weak
    - _extend_sign_bit
    - get_or_create_tls_agent
    - _get_num
    - name
    - _compress
    - butil::BaseIteratorRangeToNumberTraits::max
    - agent_type*::element::load
    - LOG
    - brpc::GetJsService::jquery_min
    - _get_sum
    - _get_complement
    - empty
    - _will_overflow
    - BAIDU_UNLIKELY
    - commit_and_clear
    linkageType: ''
    returnType: IntRecorder
    signature: IntRecorder & IntRecorder::operator<<(int64_t sample)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/recorder.h:310,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/recorder.h:312,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 314
    functionName: ~IntRecorder() override
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~IntRecorder() override
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:318,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:320,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:322,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/recorder.h:325,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:329,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:330,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:330,1
    - Dst: empty
      Src: /src/brpc/src/bvar/recorder.h:332,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:333,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:336,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 343
    functionName: '& operator<<(int64_t value)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - name
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - brpc::GetJsService::jquery_min
    - empty
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: IntRecorder
    signature: IntRecorder & operator<<(int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 347
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t average() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 351
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: double
    signature: double average(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/bvar/recorder.h:354,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/src/bvar/recorder.h:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 356
    functionName: bvar::IntRecorder::get_value
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 3
    functionsReached:
    - value
    - static_cast<ssize_t>
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/recorder.h:359,1
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 361
    functionName: bvar::IntRecorder::reset
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - LOG_EVERY_SECOND
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/recorder.h:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 363
    functionName: bvar::IntRecorder::op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: Op
    signature: Op op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvOp
      Src: /src/brpc/src/bvar/recorder.h:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 364
    functionDepth: 0
    functionLinenumber: 364
    functionLinenumberEnd: 364
    functionName: bvar::IntRecorder::inv_op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - InvOp
    linkageType: ''
    returnType: InvOp
    signature: InvOp inv_op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - ::std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 368
    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) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 370
    functionName: bvar::IntRecorder::valid
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/recorder.h:374,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/recorder.h:375,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 378
    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:383,1
    - Dst: data
      Src: /src/brpc/src/bvar/recorder.h:383,1
    - Dst: size
      Src: /src/brpc/src/bvar/recorder.h:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 384
    functionName: bvar::IntRecorder::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached:
    - size
    - data
    - assign
    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: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    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: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    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: 49
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 49
    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: 56
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 56
    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:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 0
    functionLinenumber: 57
    functionLinenumberEnd: 59
    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: 63
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 63
    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:65,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    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: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    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:74,1
    - Dst: get_average_double
      Src: /src/brpc/src/bvar/recorder.h:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' s'
    argTypes:
    - std::ostream
    - Stat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 80
    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: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    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: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    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: 84
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 84
    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: 88
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 88
    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:118,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:118,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:119,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' lhs'
    - rhs
    argTypes:
    - Stat
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 120
    functionName: operator()(Stat& lhs, uint64_t rhs) const
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - _extend_sign_bit
    - _get_sum
    - _get_num
    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:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 131
    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:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 136
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 136
    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:139,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/recorder.h:141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 144
    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: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::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: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::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: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: bvar::IntRecorder::get_value
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 5
    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: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::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: detail::AddStat
      Src: /src/brpc/src/bvar/recorder.h:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 165
    functionName: bvar::IntRecorder::op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - detail::AddStat
    linkageType: ''
    returnType: detail::AddStat
    signature: detail::AddStat op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: detail::MinusStat
      Src: /src/brpc/src/bvar/recorder.h:166,1
    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: bvar::IntRecorder::inv_op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - detail::MinusStat
    linkageType: ''
    returnType: detail::MinusStat
    signature: detail::MinusStat inv_op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 172
    functionDepth: 1
    functionLinenumber: 172
    functionLinenumberEnd: 172
    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:176,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/recorder.h:177,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 180
    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:185,1
    - Dst: data
      Src: /src/brpc/src/bvar/recorder.h:185,1
    - Dst: size
      Src: /src/brpc/src/bvar/recorder.h:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 186
    functionName: bvar::IntRecorder::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached:
    - size
    - data
    - assign
    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: 192
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 192
    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: 196
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 196
    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: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    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: 211
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 211
    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: 220
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 220
    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: 239
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 239
    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:248,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:250,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:252,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/recorder.h:255,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:259,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:260,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:260,1
    - Dst: empty
      Src: /src/brpc/src/bvar/recorder.h:262,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:263,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:266,1
    - Dst: get_or_create_tls_agent
      Src: /src/brpc/src/bvar/recorder.h:270,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:271,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:272,1
    - Dst: agent_type*::element::load
      Src: /src/brpc/src/bvar/recorder.h:276,1
    - Dst: _get_complement
      Src: /src/brpc/src/bvar/recorder.h:277,1
    - Dst: _get_num
      Src: /src/brpc/src/bvar/recorder.h:281,1
    - Dst: _get_sum
      Src: /src/brpc/src/bvar/recorder.h:282,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:283,1
    - Dst: _will_overflow
      Src: /src/brpc/src/bvar/recorder.h:284,1
    - Dst: _extend_sign_bit
      Src: /src/brpc/src/bvar/recorder.h:284,1
    - Dst: commit_and_clear
      Src: /src/brpc/src/bvar/recorder.h:288,1
    - Dst: agent_type*::element::compare_exchange_weak
      Src: /src/brpc/src/bvar/recorder.h:293,1
    - Dst: _compress
      Src: /src/brpc/src/bvar/recorder.h:294,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 1
    argNames:
    - sample
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 296
    functionName: '& IntRecorder::operator<<(int64_t sample)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - agent_type*::element::compare_exchange_weak
    - _extend_sign_bit
    - get_or_create_tls_agent
    - _get_num
    - name
    - _compress
    - butil::BaseIteratorRangeToNumberTraits::max
    - agent_type*::element::load
    - LOG
    - brpc::GetJsService::jquery_min
    - _get_sum
    - _get_complement
    - empty
    - _will_overflow
    - BAIDU_UNLIKELY
    - commit_and_clear
    linkageType: ''
    returnType: IntRecorder
    signature: IntRecorder & IntRecorder::operator<<(int64_t sample)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/recorder.h:310,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/recorder.h:312,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 314
    functionName: ~IntRecorder() override
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~IntRecorder() override
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/recorder.h:318,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:320,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/recorder.h:322,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/bvar/recorder.h:325,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:329,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:330,1
    - Dst: name
      Src: /src/brpc/src/bvar/recorder.h:330,1
    - Dst: empty
      Src: /src/brpc/src/bvar/recorder.h:332,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:333,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/recorder.h:336,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 343
    functionName: '& operator<<(int64_t value)'
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - name
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - brpc::GetJsService::jquery_min
    - empty
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: IntRecorder
    signature: IntRecorder & operator<<(int64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:346,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 345
    functionDepth: 1
    functionLinenumber: 345
    functionLinenumberEnd: 347
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: int64_t
    signature: int64_t average() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:350,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 351
    functionName: bvar::IntRecorder::average
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 10
    functionsReached:
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: double
    signature: double average(double) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/bvar/recorder.h:354,1
    - Dst: static_cast<ssize_t>
      Src: /src/brpc/src/bvar/recorder.h:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 356
    functionName: bvar::IntRecorder::get_value
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 8
    functionsReached:
    - value
    - static_cast<ssize_t>
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/recorder.h:359,1
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:360,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 361
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 361
    functionName: bvar::IntRecorder::reset
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - LOG_EVERY_SECOND
    - bvar::IntRecorder::get_value
    linkageType: ''
    returnType: value_type
    signature: value_type reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/recorder.h:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 363
      start: 363
    functionDepth: 0
    functionLinenumber: 363
    functionLinenumberEnd: 363
    functionName: bvar::IntRecorder::op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: Op
    signature: Op op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvOp
      Src: /src/brpc/src/bvar/recorder.h:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 364
    functionDepth: 0
    functionLinenumber: 364
    functionLinenumberEnd: 364
    functionName: bvar::IntRecorder::inv_op
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 0
    functionsReached:
    - InvOp
    linkageType: ''
    returnType: InvOp
    signature: InvOp inv_op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::IntRecorder::get_value
      Src: /src/brpc/src/bvar/recorder.h:367,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - ::std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 368
    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) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 370
    functionName: bvar::IntRecorder::valid
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/recorder.h:374,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/recorder.h:375,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 372
    functionDepth: 0
    functionLinenumber: 372
    functionLinenumberEnd: 378
    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:383,1
    - Dst: data
      Src: /src/brpc/src/bvar/recorder.h:383,1
    - Dst: size
      Src: /src/brpc/src/bvar/recorder.h:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 384
    functionName: bvar::IntRecorder::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/recorder.h
    functionUses: 4
    functionsReached:
    - size
    - data
    - assign
    linkageType: ''
    returnType: void
    signature: void set_debug_name(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - member
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: BVAR_MEMBER_TYPE
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_MEMBER_TYPE(member)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ProcStat
      Src: /src/brpc/src/bvar/default_variables.cpp:77,1
    - Dst: fprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:86,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:92,1
    - Dst: fprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:102,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:109,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:110,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:113,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:117,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:120,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:121,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:121,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:125,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 132
    functionName: bvar::read_proc_status
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - sscanf
    - PLOG
    - fprintf
    - ProcStat
    - butil::read_command_output
    - LOG
    - memset
    - fscanf
    - getpid
    - snprintf
    - std::ostringstream::str
    - c_str
    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:139,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/default_variables.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 140
    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:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 143
    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:152,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/default_variables.cpp:153,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:155,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:158,1
    - Dst: fn
      Src: /src/brpc/src/bvar/default_variables.cpp:162,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:163,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:166,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:169,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - ReadFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 172
    functionName: bvar::CachedReader::get_value
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    - butil::cpuwide_time_us
    - fn
    - 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:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 2
    functionLinenumber: 182
    functionLinenumberEnd: 184
    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:187,1
    - Dst: ProcStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 189
    functionName: bvar::ProcStatReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - ProcStatReader
    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: 196
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 196
    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: 202
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 202
    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:216,1
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:221,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:224,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:227,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:233,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:234,1
    - Dst: getpagesize
      Src: /src/brpc/src/bvar/default_variables.cpp:235,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:238,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:240,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:243,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:244,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:244,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:245,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - m
    argTypes:
    - ProcMemory
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 255
    functionName: bvar::read_proc_memory
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - sscanf
    - PLOG
    - getpagesize
    - PLOG_ONCE
    - butil::read_command_output
    - LOG
    - fscanf
    - memset
    - getpid
    - ProcMemory
    - snprintf
    - std::ostringstream::str
    - c_str
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcMemory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 2
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:265,1
    - Dst: ProcMemoryReader
      Src: /src/brpc/src/bvar/default_variables.cpp:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: bvar::ProcMemoryReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - getpagesize
    - bvar::Status::get_value
    - ProcMemoryReader
    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: 275
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 275
    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:288,1
    - Dst: LoadAverage
      Src: /src/brpc/src/bvar/default_variables.cpp:291,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:293,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:295,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:301,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:302,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:305,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:306,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:306,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:308,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - m
    argTypes:
    - LoadAverage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 316
    functionName: bvar::read_load_average
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - sscanf
    - PLOG
    - butil::read_command_output
    - PLOG_ONCE
    - LoadAverage
    - LOG
    - fscanf
    - std::ostringstream::str
    - c_str
    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:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - LoadAverage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 2
    functionLinenumber: 320
    functionLinenumberEnd: 322
    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:325,1
    - Dst: LoadAverageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 327
    functionName: bvar::LoadAverageReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - LoadAverageReader
    - bvar::Status::get_value
    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: 335
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 335
    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:342,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:343,1
    - Dst: butil::DirReaderPosix::Next
      Src: /src/brpc/src/bvar/default_variables.cpp:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - limit
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 377
    functionName: bvar::get_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::DirReaderPosix::Next
    - PLOG
    - butil::DirReaderPosix::IsValid
    linkageType: ''
    returnType: int
    signature: int get_fd_count(int limit)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bvar/default_variables.cpp:386,1
    - Dst: bvar::get_fd_count
      Src: /src/brpc/src/bvar/default_variables.cpp:390,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/default_variables.cpp:395,1
    - Dst: hide
      Src: /src/brpc/src/bvar/default_variables.cpp:398,1
    - Dst: expose
      Src: /src/brpc/src/bvar/default_variables.cpp:399,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 385
    functionDepth: 2
    functionLinenumber: 385
    functionLinenumberEnd: 403
    functionName: operator()(int* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - load
    - hide
    - bvar::get_fd_count
    - expose
    - 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:407,1
    - Dst: FdReader
      Src: /src/brpc/src/bvar/default_variables.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 408
    functionName: bvar::print_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - FdReader
    - bvar::Status::get_value
    linkageType: ''
    returnType: int
    signature: int print_fd_count(void*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:443,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:450,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:454,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:461,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:462,1
    - Dst: proc_pid_rusage
      Src: /src/brpc/src/bvar/default_variables.cpp:464,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:465,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - s
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 474
    functionName: bvar::read_proc_io
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - fprintf
    - proc_pid_rusage
    - fscanf
    - memset
    - getpid
    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:479,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 478
    functionDepth: 2
    functionLinenumber: 478
    functionLinenumberEnd: 480
    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:483,1
    - Dst: ProcIOReader
      Src: /src/brpc/src/bvar/default_variables.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 485
    functionName: bvar::ProcIOReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - ProcIOReader
    - 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: 492
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 492
    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:554,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:558,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:574,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 584
    functionName: bvar::read_disk_stat
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - fscanf
    - PLOG_ONCE
    - PLOG
    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:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 588
    functionDepth: 2
    functionLinenumber: 588
    functionLinenumberEnd: 590
    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:593,1
    - Dst: DiskStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 595
    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: 602
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 602
    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:609,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 611
    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:614,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 615
    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:621,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:622,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:625,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:625,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 619
    functionDepth: 1
    functionLinenumber: 619
    functionLinenumberEnd: 626
    functionName: bvar::ReadVersion
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - append
    - 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:629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 630
    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::cpuwide_time_us
      Src: /src/brpc/src/bvar/default_variables.cpp:637,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 642
    functionName: bvar::get_uptime
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: timeval
    signature: timeval get_uptime(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getrusage
      Src: /src/brpc/src/bvar/default_variables.cpp:649,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - stat
    argTypes:
    - rusage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 655
    functionName: operator()(rusage* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - getrusage
    - PLOG
    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:658,1
    - Dst: RUsageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:659,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 660
    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: 668
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 668
    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: 674
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 674
    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:682,1
    - Dst: berror
      Src: /src/brpc/src/bvar/default_variables.cpp:686,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 680
    functionDepth: 1
    functionLinenumber: 680
    functionLinenumberEnd: 688
    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:740,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 741
    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: 751
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 751
    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: 755
      start: 752
    functionDepth: 0
    functionLinenumber: 752
    functionLinenumberEnd: 755
    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:761,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' tp'
    argTypes:
    - std::ostream
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 757
    functionDepth: 0
    functionLinenumber: 757
    functionLinenumberEnd: 764
    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:767,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:767,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:768,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:768,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:769,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:769,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 771
    functionName: bvar::get_cputime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    - get_value
    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:777,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:777,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:778,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:778,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 776
    functionDepth: 1
    functionLinenumber: 776
    functionLinenumberEnd: 780
    functionName: bvar::get_stime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    - get_value
    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:786,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:786,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:787,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:787,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 789
      start: 785
    functionDepth: 1
    functionLinenumber: 785
    functionLinenumberEnd: 789
    functionName: bvar::get_utime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    - get_value
    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:841,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:859,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 861
    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:864,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 866
      start: 863
    functionDepth: 0
    functionLinenumber: 863
    functionLinenumberEnd: 866
    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:872,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/bvar/default_variables.cpp:873,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bvar/default_variables.cpp:874,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bvar/default_variables.cpp:875,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 876
      start: 871
    functionDepth: 1
    functionLinenumber: 871
    functionLinenumberEnd: 876
    functionName: bvar::get_work_dir
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::FilePath::FilePath
    - butil::FilePath::value
    - butil::GetCurrentDirectory
    - LOG_IF
    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: 48
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 48
    functionName: BVAR_MEMBER_TYPE
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: BVAR_MEMBER_TYPE(member)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: ProcStat
      Src: /src/brpc/src/bvar/default_variables.cpp:77,1
    - Dst: fprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:86,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:92,1
    - Dst: fprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:102,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:109,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:110,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:113,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:117,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:120,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:121,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:121,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:125,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 132
    functionName: bvar::read_proc_status
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - sscanf
    - PLOG
    - fprintf
    - ProcStat
    - butil::read_command_output
    - LOG
    - memset
    - fscanf
    - getpid
    - snprintf
    - std::ostringstream::str
    - c_str
    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:139,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bvar/default_variables.cpp:139,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 138
    functionDepth: 1
    functionLinenumber: 138
    functionLinenumberEnd: 140
    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:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 143
    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:152,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/bvar/default_variables.cpp:153,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:155,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:158,1
    - Dst: fn
      Src: /src/brpc/src/bvar/default_variables.cpp:162,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:163,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/bvar/default_variables.cpp:166,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/bvar/default_variables.cpp:169,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' fn'
    argTypes:
    - ReadFn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 172
    functionName: bvar::CachedReader::get_value
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutex_lock
    - butil::cpuwide_time_us
    - fn
    - 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:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 184
    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:187,1
    - Dst: ProcStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 189
    functionName: bvar::ProcStatReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - bvar::Status::get_value
    - ProcStatReader
    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: 196
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 196
    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: 202
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 202
    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:216,1
    - Dst: PLOG_ONCE
      Src: /src/brpc/src/bvar/default_variables.cpp:221,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:224,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:227,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:233,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:234,1
    - Dst: getpagesize
      Src: /src/brpc/src/bvar/default_variables.cpp:235,1
    - Dst: snprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:238,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:240,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:243,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:244,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:244,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:245,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - m
    argTypes:
    - ProcMemory
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 255
    functionName: bvar::read_proc_memory
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - sscanf
    - PLOG
    - getpagesize
    - PLOG_ONCE
    - butil::read_command_output
    - LOG
    - fscanf
    - memset
    - getpid
    - ProcMemory
    - snprintf
    - std::ostringstream::str
    - c_str
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcMemory*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: bvar::Status::get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:265,1
    - Dst: ProcMemoryReader
      Src: /src/brpc/src/bvar/default_variables.cpp:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 263
    functionDepth: 1
    functionLinenumber: 263
    functionLinenumberEnd: 267
    functionName: bvar::ProcMemoryReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - getpagesize
    - bvar::Status::get_value
    - ProcMemoryReader
    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: 275
      start: 270
    functionDepth: 0
    functionLinenumber: 270
    functionLinenumberEnd: 275
    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:288,1
    - Dst: LoadAverage
      Src: /src/brpc/src/bvar/default_variables.cpp:291,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:293,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:295,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/bvar/default_variables.cpp:301,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:302,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:305,1
    - Dst: sscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:306,1
    - Dst: c_str
      Src: /src/brpc/src/bvar/default_variables.cpp:306,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:308,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - m
    argTypes:
    - LoadAverage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 284
    functionDepth: 1
    functionLinenumber: 284
    functionLinenumberEnd: 316
    functionName: bvar::read_load_average
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - sscanf
    - PLOG
    - butil::read_command_output
    - PLOG_ONCE
    - LoadAverage
    - LOG
    - fscanf
    - std::ostringstream::str
    - c_str
    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:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - LoadAverage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 322
    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:325,1
    - Dst: LoadAverageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 327
    functionName: bvar::LoadAverageReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - LoadAverageReader
    - bvar::Status::get_value
    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: 335
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 335
    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:342,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:343,1
    - Dst: butil::DirReaderPosix::Next
      Src: /src/brpc/src/bvar/default_variables.cpp:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - limit
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 338
    functionDepth: 1
    functionLinenumber: 338
    functionLinenumberEnd: 377
    functionName: bvar::get_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - butil::DirReaderPosix::Next
    - PLOG
    - butil::DirReaderPosix::IsValid
    linkageType: ''
    returnType: int
    signature: int get_fd_count(int limit)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bvar/default_variables.cpp:386,1
    - Dst: get_fd_count
      Src: /src/brpc/src/bvar/default_variables.cpp:390,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/default_variables.cpp:395,1
    - Dst: hide
      Src: /src/brpc/src/bvar/default_variables.cpp:398,1
    - Dst: expose
      Src: /src/brpc/src/bvar/default_variables.cpp:399,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - stat
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 403
    functionName: operator()(int* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - load
    - get_fd_count
    - hide
    - expose
    - 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:407,1
    - Dst: FdReader
      Src: /src/brpc/src/bvar/default_variables.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 408
    functionName: bvar::print_fd_count
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - FdReader
    - bvar::Status::get_value
    linkageType: ''
    returnType: int
    signature: int print_fd_count(void*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/brpc/src/bvar/default_variables.cpp:443,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:450,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:454,1
    - Dst: memset
      Src: /src/brpc/src/bvar/default_variables.cpp:461,1
    - Dst: getpid
      Src: /src/brpc/src/bvar/default_variables.cpp:462,1
    - Dst: proc_pid_rusage
      Src: /src/brpc/src/bvar/default_variables.cpp:464,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:465,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - s
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 474
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 474
    functionName: bvar::read_proc_io
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - PLOG
    - fprintf
    - proc_pid_rusage
    - fscanf
    - memset
    - getpid
    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:479,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - ProcIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 480
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 480
    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:483,1
    - Dst: ProcIOReader
      Src: /src/brpc/src/bvar/default_variables.cpp:484,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 485
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 485
    functionName: bvar::ProcIOReader::get_field
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - ProcIOReader
    - 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: 492
      start: 488
    functionDepth: 0
    functionLinenumber: 488
    functionLinenumberEnd: 492
    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:554,1
    - Dst: fscanf
      Src: /src/brpc/src/bvar/default_variables.cpp:558,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:574,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 550
    functionDepth: 1
    functionLinenumber: 550
    functionLinenumberEnd: 584
    functionName: bvar::read_disk_stat
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 1
    functionsReached:
    - fscanf
    - PLOG_ONCE
    - PLOG
    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:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stat
    argTypes:
    - DiskStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 590
    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:593,1
    - Dst: DiskStatReader
      Src: /src/brpc/src/bvar/default_variables.cpp:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 595
      start: 592
    functionDepth: 1
    functionLinenumber: 592
    functionLinenumberEnd: 595
    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: 602
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 602
    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:609,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 611
    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:614,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 613
    functionDepth: 0
    functionLinenumber: 613
    functionLinenumberEnd: 615
    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:621,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/default_variables.cpp:622,1
    - Dst: append
      Src: /src/brpc/src/bvar/default_variables.cpp:625,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:625,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 619
    functionDepth: 1
    functionLinenumber: 619
    functionLinenumberEnd: 626
    functionName: bvar::ReadVersion
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - append
    - 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:629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 630
    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::cpuwide_time_us
      Src: /src/brpc/src/bvar/default_variables.cpp:637,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 642
      start: 636
    functionDepth: 1
    functionLinenumber: 636
    functionLinenumberEnd: 642
    functionName: bvar::get_uptime
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: timeval
    signature: timeval get_uptime(void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getrusage
      Src: /src/brpc/src/bvar/default_variables.cpp:649,1
    - Dst: PLOG
      Src: /src/brpc/src/bvar/default_variables.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - stat
    argTypes:
    - rusage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 655
    functionName: operator()(rusage* stat) const
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - getrusage
    - PLOG
    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:658,1
    - Dst: RUsageReader
      Src: /src/brpc/src/bvar/default_variables.cpp:659,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 657
    functionDepth: 1
    functionLinenumber: 657
    functionLinenumberEnd: 660
    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: 668
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 668
    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: 674
      start: 668
    functionDepth: 0
    functionLinenumber: 668
    functionLinenumberEnd: 674
    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:682,1
    - Dst: berror
      Src: /src/brpc/src/bvar/default_variables.cpp:686,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 680
    functionDepth: 1
    functionLinenumber: 680
    functionLinenumberEnd: 688
    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:740,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 739
    functionDepth: 0
    functionLinenumber: 739
    functionLinenumberEnd: 741
    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: 751
      start: 748
    functionDepth: 0
    functionLinenumber: 748
    functionLinenumberEnd: 751
    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: 755
      start: 752
    functionDepth: 0
    functionLinenumber: 752
    functionLinenumberEnd: 755
    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:761,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' tp'
    argTypes:
    - std::ostream
    - TimePercent
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 757
    functionDepth: 0
    functionLinenumber: 757
    functionLinenumberEnd: 764
    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:767,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:767,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:768,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:768,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:769,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:769,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 771
      start: 766
    functionDepth: 1
    functionLinenumber: 766
    functionLinenumberEnd: 771
    functionName: bvar::get_cputime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    - get_value
    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:777,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:777,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:778,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:778,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 776
    functionDepth: 1
    functionLinenumber: 776
    functionLinenumberEnd: 780
    functionName: bvar::get_stime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    - get_value
    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:786,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:786,1
    - Dst: butil::timeval_to_microseconds
      Src: /src/brpc/src/bvar/default_variables.cpp:787,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/default_variables.cpp:787,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 789
      start: 785
    functionDepth: 1
    functionLinenumber: 785
    functionLinenumberEnd: 789
    functionName: bvar::get_utime_percent
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::timeval_to_microseconds
    - get_value
    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:841,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/default_variables.cpp:859,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 861
    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:864,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 866
      start: 863
    functionDepth: 0
    functionLinenumber: 863
    functionLinenumberEnd: 866
    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:872,1
    - Dst: butil::GetCurrentDirectory
      Src: /src/brpc/src/bvar/default_variables.cpp:873,1
    - Dst: LOG_IF
      Src: /src/brpc/src/bvar/default_variables.cpp:874,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/bvar/default_variables.cpp:875,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 876
      start: 871
    functionDepth: 1
    functionLinenumber: 871
    functionLinenumberEnd: 876
    functionName: bvar::get_work_dir
    functionSourceFile: /src/brpc/src/bvar/default_variables.cpp
    functionUses: 0
    functionsReached:
    - butil::FilePath::FilePath
    - butil::FilePath::value
    - butil::GetCurrentDirectory
    - LOG_IF
    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:890,1
    - Dst: std::setfill
      Src: /src/brpc/src/bvar/default_variables.cpp:890,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' tm'
    argTypes:
    - std::ostream
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 889
    functionDepth: 0
    functionLinenumber: 889
    functionLinenumberEnd: 891
    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:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels'
    argTypes:
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: bvar::MultiDimension<T, KeyType, Shared>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::MultiDimension(const key_type&
      labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::expose
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' labels'
    argTypes:
    - butil::StringPiece
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    functionName: bvar::MultiDimension<T, KeyType, Shared>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::expose
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::MultiDimension(const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::expose_as
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:57,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: 58
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: bvar::MultiDimension<T, KeyType, Shared>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::expose_as
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::MultiDimension(const butil::StringPiece&
      prefix,\n                                           const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiDimension<T, KeyType, Shared>::hide
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:62,1
    - Dst: delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_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: MultiDimension<T, KeyType, Shared>::~MultiDimension()
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - delete_stats
    - MultiDimension<T, KeyType, Shared>::hide
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::~MultiDimension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:69,1
    - Dst: init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' bg'
    argTypes:
    - MetricMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: bvar::MultiDimension<T, KeyType, Shared>::init_flatmap
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - init
    - CHECK_EQ
    linkageType: ''
    returnType: size_t
    signature: size_t MultiDimension<T, KeyType, Shared>::init_flatmap(MetricMap&
      bg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:76,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:77,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: bvar::MultiDimension<T, KeyType, Shared>::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, Shared>::count_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:86,1
    - Dst: erase
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:93,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:95,1
    - Dst: delete_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:97,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 85
    functionDepth: 1
    functionLinenumber: 85
    functionLinenumberEnd: 100
    functionName: bvar::MultiDimension<T, KeyType, Shared>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - erase
    - bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    - delete_value
    - Modify
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::delete_stats(const K& labels_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:109,1
    - Dst: MetricMap::init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:109,1
    - Dst: MetricMap::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:111,1
    - Dst: MetricMap::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:112,1
    - Dst: MetricMap::swap
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:114,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:117,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:118,1
    - Dst: delete_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 122
    functionName: bvar::MultiDimension<T, KeyType, Shared>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - Modify
    - MetricMap::empty
    - delete_value
    - MetricMap::swap
    - MetricMap::clear
    - MetricMap::init
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::delete_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<key_type>*::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:129,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:131,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:132,1
    - Dst: std::vector<key_type>*::reserve
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: MetricMapScopedPtr::begin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:136,1
    - Dst: MetricMapScopedPtr::end
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:136,1
    - Dst: std::vector<key_type>*::emplace_back
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:137,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - names
    argTypes:
    - std::vector<key_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 139
    functionName: bvar::MultiDimension<T, KeyType, Shared>::list_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - MetricMapScopedPtr::size
    - std::vector<key_type>*::clear
    - MetricMapScopedPtr::end
    - LOG
    - Read
    - std::vector<key_type>*::emplace_back
    - std::vector<key_type>*::reserve
    - MetricMapScopedPtr::begin
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::list_stats(std::vector<key_type>*
      names)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:145,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:149,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:150,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:154,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 159
    functionName: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - Read
    - bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    - LOG
    - MetricMapScopedPtr::seek
    linkageType: ''
    returnType: typename MultiDimension<T, KeyType, Shared>::value_ptr_type
    signature: typename MultiDimension<T, KeyType, Shared>::value_ptr_type MultiDimension<T,
      KeyType, Shared>::get_stats_impl(const K& labels_value)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:166,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:171,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:172,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:176,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:183,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:184,1
    - Dst: seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:195,1
    - Dst: new_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:205,1
    - Dst: insert_metrics_map
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:207,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:210,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: 212
      start: 163
    functionDepth: 1
    functionLinenumber: 163
    functionLinenumberEnd: 212
    functionName: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - insert_metrics_map
    - MetricMapScopedPtr::size
    - new_value
    - Modify
    - LOG
    - MetricMapScopedPtr::seek
    - Read
    - seek
    - bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    linkageType: ''
    returnType: typename MultiDimension<T, KeyType, Shared>::value_ptr_type
    signature: "typename MultiDimension<T, KeyType, Shared>::value_ptr_type MultiDimension<T,
      KeyType, Shared>::get_stats_impl(\n    const K& labels_value, STATS_OP stats_op,
      bool* do_write)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: bvar::MultiDimension<T, KeyType, Shared>::clear_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::delete_stats
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::clear_stats()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: bvar::MultiDimension<T, KeyType, Shared>::has_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType, Shared>::has_stats(const K& labels_value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:230,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:231,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:231,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:231,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:236,1
    - Dst: value_ptr_type::describe
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:243,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:244,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:244,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:244,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 250
    functionName: bvar::MultiDimension<T, KeyType, Shared>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::list_stats
    - Dumper*::dump_mvar
    - Dumper*::dump_comment
    - bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
    - bvar::MultiDimension<T, KeyType, Shared>::name
    - value_ptr_type::describe
    - bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    - std::vector::empty
    - std::ostringstream::str
    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, Shared>::dump_impl(Dumper* dumper,
      const DumpOptions* options)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:257,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:258,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:265,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:265,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:267,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:274,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: bvar::LatencyRecorder*::latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:283,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:290,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:296,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:303,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:303,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:305,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:310,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: LatencyRecorder*::max_latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:317,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:317,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:319,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:324,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: LatencyRecorder*::qps
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:331,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:331,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:333,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:338,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    - Dst: LatencyRecorder*::count
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 55
    argCount: 1
    argNames:
    - dumper
    argTypes:
    - Dumper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 254
    functionDepth: 2
    functionLinenumber: 254
    functionLinenumberEnd: 344
    functionName: bvar::MultiDimension<T, KeyType, Shared>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::list_stats
    - bvar::LatencyRecorder*::latency_percentile
    - LatencyRecorder*::max_latency
    - Dumper*::dump_mvar
    - LatencyRecorder*::qps
    - Dumper*::dump_comment
    - bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
    - bvar::MultiDimension<T, KeyType, Shared>::name
    - bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    - std::to_string
    - LatencyRecorder*::count
    - std::vector::empty
    - std::ostringstream::str
    - 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, Shared>::dump_impl(Dumper* dumper,
      const DumpOptions*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:349,1
    - Dst: empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:350,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:353,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: 354
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 354
    functionName: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 2
    functionsReached:
    - empty
    - bvar::MultiDimension<T, KeyType, Shared>::name
    - bvar::MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::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, Shared>::_labels::cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:360,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:361,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::_labels::cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:363,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:363,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:365,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:365,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: 372
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 372
    functionName: bvar::MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - auto::c_str
    - bvar::MultiDimension<T, KeyType, Shared>::_labels::cbegin
    - cend
    - cbegin
    - bvar::MultiDimension<T, KeyType, Shared>::_labels::cend
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string(\n
      \   std::ostream& os, const key_type& labels_value, int quantile)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:377,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:377,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:378,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:378,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:379,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 383
    functionName: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 3
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::count_labels
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType, Shared>::is_valid_lables_value(const
      K& labels_value) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:387,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::count_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 394
    functionName: bvar::MultiDimension<T, KeyType, Shared>::describe
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::count_stats
    - bvar::MultiDimension<T, KeyType, Shared>::name
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:42,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels'
    argTypes:
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 43
    functionName: bvar::MultiDimension<T, KeyType, Shared>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::MultiDimension(const key_type&
      labels)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::expose
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' labels'
    argTypes:
    - butil::StringPiece
    - key_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    functionName: bvar::MultiDimension<T, KeyType, Shared>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::expose
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::MultiDimension(const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::expose_as
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:57,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: 58
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 58
    functionName: bvar::MultiDimension<T, KeyType, Shared>::MultiDimension
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::expose_as
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::MultiDimension(const butil::StringPiece&
      prefix,\n                                           const butil::StringPiece&
      name,\n                                           const key_type& labels)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MultiDimension<T, KeyType, Shared>::hide
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:62,1
    - Dst: delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_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: MultiDimension<T, KeyType, Shared>::~MultiDimension()
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - delete_stats
    - MultiDimension<T, KeyType, Shared>::hide
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::~MultiDimension()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:69,1
    - Dst: init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' bg'
    argTypes:
    - MetricMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: bvar::MultiDimension<T, KeyType, Shared>::init_flatmap
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - init
    - CHECK_EQ
    linkageType: ''
    returnType: size_t
    signature: size_t MultiDimension<T, KeyType, Shared>::init_flatmap(MetricMap&
      bg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:76,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:77,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 81
    functionName: bvar::MultiDimension<T, KeyType, Shared>::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, Shared>::count_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:86,1
    - Dst: erase
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:93,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:95,1
    - Dst: delete_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:97,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 85
    functionDepth: 2
    functionLinenumber: 85
    functionLinenumberEnd: 100
    functionName: bvar::MultiDimension<T, KeyType, Shared>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - erase
    - bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    - delete_value
    - Modify
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::delete_stats(const K& labels_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:109,1
    - Dst: MetricMap::init
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:109,1
    - Dst: MetricMap::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:111,1
    - Dst: MetricMap::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:112,1
    - Dst: MetricMap::swap
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:114,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:117,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:118,1
    - Dst: delete_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 122
    functionName: bvar::MultiDimension<T, KeyType, Shared>::delete_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 1
    functionsReached:
    - CHECK_EQ
    - Modify
    - MetricMap::empty
    - delete_value
    - MetricMap::swap
    - MetricMap::clear
    - MetricMap::init
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::delete_stats()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<key_type>*::clear
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:129,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:131,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:132,1
    - Dst: std::vector<key_type>*::reserve
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:135,1
    - Dst: MetricMapScopedPtr::begin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:136,1
    - Dst: MetricMapScopedPtr::end
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:136,1
    - Dst: std::vector<key_type>*::emplace_back
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:137,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - names
    argTypes:
    - std::vector<key_type>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 139
    functionName: bvar::MultiDimension<T, KeyType, Shared>::list_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 2
    functionsReached:
    - MetricMapScopedPtr::size
    - std::vector<key_type>*::clear
    - MetricMapScopedPtr::end
    - LOG
    - Read
    - std::vector<key_type>*::emplace_back
    - std::vector<key_type>*::reserve
    - MetricMapScopedPtr::begin
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::list_stats(std::vector<key_type>*
      names)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:145,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:149,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:150,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:154,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 159
      start: 143
    functionDepth: 2
    functionLinenumber: 143
    functionLinenumberEnd: 159
    functionName: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 3
    functionsReached:
    - Read
    - bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    - LOG
    - MetricMapScopedPtr::seek
    linkageType: ''
    returnType: typename MultiDimension<T, KeyType, Shared>::value_ptr_type
    signature: typename MultiDimension<T, KeyType, Shared>::value_ptr_type MultiDimension<T,
      KeyType, Shared>::get_stats_impl(const K& labels_value)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:166,1
    - Dst: Read
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:171,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:172,1
    - Dst: MetricMapScopedPtr::seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:176,1
    - Dst: MetricMapScopedPtr::size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:183,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:184,1
    - Dst: seek
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:195,1
    - Dst: new_value
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:205,1
    - Dst: insert_metrics_map
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:207,1
    - Dst: Modify
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:210,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: 212
      start: 163
    functionDepth: 2
    functionLinenumber: 163
    functionLinenumberEnd: 212
    functionName: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 3
    functionsReached:
    - insert_metrics_map
    - MetricMapScopedPtr::size
    - new_value
    - Modify
    - LOG
    - MetricMapScopedPtr::seek
    - Read
    - seek
    - bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    linkageType: ''
    returnType: typename MultiDimension<T, KeyType, Shared>::value_ptr_type
    signature: "typename MultiDimension<T, KeyType, Shared>::value_ptr_type MultiDimension<T,
      KeyType, Shared>::get_stats_impl(\n    const K& labels_value, STATS_OP stats_op,
      bool* do_write)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::delete_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 217
    functionName: bvar::MultiDimension<T, KeyType, Shared>::clear_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::delete_stats
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::clear_stats()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 223
      start: 221
    functionDepth: 2
    functionLinenumber: 221
    functionLinenumberEnd: 223
    functionName: bvar::MultiDimension<T, KeyType, Shared>::has_stats
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType, Shared>::has_stats(const K& labels_value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:230,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:231,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:231,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:231,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:236,1
    - Dst: value_ptr_type::describe
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:241,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:243,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:244,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:244,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:244,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 16
    argCount: 2
    argNames:
    - dumper
    - options
    argTypes:
    - Dumper*
    - DumpOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 227
    functionDepth: 2
    functionLinenumber: 227
    functionLinenumberEnd: 250
    functionName: bvar::MultiDimension<T, KeyType, Shared>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::list_stats
    - Dumper*::dump_mvar
    - Dumper*::dump_comment
    - bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
    - bvar::MultiDimension<T, KeyType, Shared>::name
    - value_ptr_type::describe
    - bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    - std::vector::empty
    - std::ostringstream::str
    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, Shared>::dump_impl(Dumper* dumper,
      const DumpOptions* options)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::list_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:257,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:258,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:265,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:265,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:267,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:274,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: bvar::LatencyRecorder*::latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:275,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:283,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:284,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:290,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:291,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:296,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: bvar::LatencyRecorder*::latency_percentile
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:297,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:303,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:303,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:305,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:310,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: LatencyRecorder*::max_latency
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:311,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:317,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:317,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:319,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:324,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: LatencyRecorder*::qps
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:325,1
    - Dst: Dumper*::dump_comment
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:331,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:331,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:333,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:338,1
    - Dst: Dumper*::dump_mvar
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    - Dst: std::to_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    - Dst: LatencyRecorder*::count
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:339,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 55
    argCount: 1
    argNames:
    - dumper
    argTypes:
    - Dumper*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 254
    functionDepth: 2
    functionLinenumber: 254
    functionLinenumberEnd: 344
    functionName: bvar::MultiDimension<T, KeyType, Shared>::dump_impl
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::list_stats
    - bvar::LatencyRecorder*::latency_percentile
    - LatencyRecorder*::max_latency
    - Dumper*::dump_mvar
    - LatencyRecorder*::qps
    - Dumper*::dump_comment
    - bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
    - bvar::MultiDimension<T, KeyType, Shared>::name
    - bvar::MultiDimension<T, KeyType, Shared>::get_stats_impl
    - std::to_string
    - LatencyRecorder*::count
    - std::vector::empty
    - std::ostringstream::str
    - 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, Shared>::dump_impl(Dumper* dumper,
      const DumpOptions*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:349,1
    - Dst: empty
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:350,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:353,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: 354
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 354
    functionName: bvar::MultiDimension<T, KeyType, Shared>::make_dump_key
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 4
    functionsReached:
    - empty
    - bvar::MultiDimension<T, KeyType, Shared>::name
    - bvar::MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::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, Shared>::_labels::cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:360,1
    - Dst: cbegin
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:361,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::_labels::cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:363,1
    - Dst: cend
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:363,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:365,1
    - Dst: auto::c_str
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:365,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: 372
      start: 357
    functionDepth: 0
    functionLinenumber: 357
    functionLinenumberEnd: 372
    functionName: bvar::MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 2
    functionsReached:
    - auto::c_str
    - bvar::MultiDimension<T, KeyType, Shared>::_labels::cbegin
    - cend
    - cbegin
    - bvar::MultiDimension<T, KeyType, Shared>::_labels::cend
    linkageType: ''
    returnType: void
    signature: "void MultiDimension<T, KeyType, Shared>::make_labels_kvpair_string(\n
      \   std::ostream& os, const key_type& labels_value, int quantile)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:377,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:377,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:378,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::count_labels
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:378,1
    - Dst: size
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:379,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' labels_value'
    argTypes:
    - K
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 383
    functionName: bvar::MultiDimension<T, KeyType, Shared>::is_valid_lables_value
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 6
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::count_labels
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool MultiDimension<T, KeyType, Shared>::is_valid_lables_value(const
      K& labels_value) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::name
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:387,1
    - Dst: bvar::MultiDimension<T, KeyType, Shared>::count_stats
      Src: /src/brpc/src/bvar/multi_dimension_inl.h:393,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 394
    functionName: bvar::MultiDimension<T, KeyType, Shared>::describe
    functionSourceFile: /src/brpc/src/bvar/multi_dimension_inl.h
    functionUses: 0
    functionsReached:
    - bvar::MultiDimension<T, KeyType, Shared>::count_stats
    - bvar::MultiDimension<T, KeyType, Shared>::name
    linkageType: ''
    returnType: void
    signature: void MultiDimension<T, KeyType, Shared>::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:
    - expose_as
    - size
    - 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:
    - gflag_name
    - atoll
    - static_cast<int>
    - GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
    - strtoull
    - strtod
    - static_cast<int64_t>
    - atoi
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - static_cast<uint64_t>
    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:
    - gflag_name
    - GFLAGS_NAMESPACE::GetCommandLineOption
    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:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - gflag_name
    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:
    - expose_as
    - size
    - 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:
    - gflag_name
    - atoll
    - static_cast<int>
    - GFLAGS_NAMESPACE::CommandLineFlagInfo::current_value::c_str
    - strtoull
    - strtod
    - static_cast<int64_t>
    - atoi
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - static_cast<uint64_t>
    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:
    - gflag_name
    - GFLAGS_NAMESPACE::GetCommandLineOption
    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:
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - gflag_name
    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:
    - O*
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: bvar::detail::SeriesSamplerImpl::SeriesSamplerImpl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesSamplerImpl(O* owner, const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/reducer.h:44,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/reducer.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: bvar::detail::SeriesSamplerImpl::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::detail::SeriesSamplerImpl::describe
      Src: /src/brpc/src/bvar/reducer.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::SeriesSamplerImpl::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 1
    functionsReached:
    - bvar::detail::SeriesSamplerImpl::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable()
  - 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: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - U
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U default_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/reducer.h:72,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:74,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 79
    functionName: ~BabylonVariable() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~BabylonVariable() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BabylonVariable
    signature: BabylonVariable & operator<<(T value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/reducer.h:88,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: bvar::detail::BabylonVariable::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: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:95,1
    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: bvar::detail::BabylonVariable::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/reducer.h:99,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:101,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:103,1
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:106,1
    - Dst: bvar::detail::BabylonVariable::reset
      Src: /src/brpc/src/bvar/reducer.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: bvar::detail::BabylonVariable::reset
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 1
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    - bvar::detail::BabylonVariable::reset
    - CHECK
    - butil::class_name_str<T>
    - value
    - butil::class_name_str<Op>
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: T
    signature: T reset()
  - 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: bvar::detail::BabylonVariable::valid
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - 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: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    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: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    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: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:118,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::BabylonVariable::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::describe
      Src: /src/brpc/src/bvar/reducer.h:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: bvar::detail::BabylonVariable::describe_series
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:138,1
    - Dst: series_sampler_type::series_sampler_type
      Src: /src/brpc/src/bvar/reducer.h:143,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:144,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: 147
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 147
    functionName: bvar::detail::BabylonVariable::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::BabylonVariable::expose_impl
    - schedule
    - series_sampler_type::series_sampler_type
    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:
    - owner
    - ' op'
    argTypes:
    - O*
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: bvar::detail::SeriesSamplerImpl::SeriesSamplerImpl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesSamplerImpl(O* owner, const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/reducer.h:44,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/reducer.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: bvar::detail::SeriesSamplerImpl::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::detail::SeriesSamplerImpl::describe
      Src: /src/brpc/src/bvar/reducer.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::SeriesSamplerImpl::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - bvar::detail::SeriesSamplerImpl::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable()
  - 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: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - U
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U default_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/reducer.h:72,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:74,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 79
    functionName: ~BabylonVariable() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~BabylonVariable() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BabylonVariable
    signature: BabylonVariable & operator<<(T value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/reducer.h:88,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: bvar::detail::BabylonVariable::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: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:95,1
    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: bvar::detail::BabylonVariable::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/reducer.h:99,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:101,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:103,1
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:106,1
    - Dst: bvar::detail::BabylonVariable::reset
      Src: /src/brpc/src/bvar/reducer.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: bvar::detail::BabylonVariable::reset
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    - bvar::detail::BabylonVariable::reset
    - CHECK
    - butil::class_name_str<T>
    - value
    - butil::class_name_str<Op>
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: T
    signature: T reset()
  - 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: bvar::detail::BabylonVariable::valid
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - 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: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    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: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    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: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:118,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::BabylonVariable::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 1
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::describe
      Src: /src/brpc/src/bvar/reducer.h:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: bvar::detail::BabylonVariable::describe_series
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:138,1
    - Dst: series_sampler_type::series_sampler_type
      Src: /src/brpc/src/bvar/reducer.h:143,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:144,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: 147
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 147
    functionName: bvar::detail::BabylonVariable::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 4
    functionsReached:
    - bvar::detail::BabylonVariable::expose_impl
    - schedule
    - series_sampler_type::series_sampler_type
    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: T
      Src: /src/brpc/src/bvar/reducer.h:202,1
    - Dst: Op
      Src: /src/brpc/src/bvar/reducer.h:203,1
    - Dst: InvOp
      Src: /src/brpc/src/bvar/reducer.h:203,1
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/reducer.h:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 205
    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:209,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:211,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:215,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 218
    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:228,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:229,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:230,1
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/reducer.h:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 233
    functionName: bvar::Reducer::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - butil::class_name_str<T>
    - CHECK
    - butil::class_name_str<Op>
    - combine_agents
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/reducer.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 238
    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:242,1
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 240
    functionDepth: 2
    functionLinenumber: 240
    functionLinenumberEnd: 246
    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:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 249
    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:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 253
    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:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 256
    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: 257
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 257
    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:261,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:262,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 265
    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:272,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 267
    functionDepth: 3
    functionLinenumber: 267
    functionLinenumberEnd: 275
    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::detail::BabylonVariable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:281,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:287,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/reducer.h:287,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:288,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: 291
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 291
    functionName: bvar::Reducer::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - op
    - schedule
    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:304,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/reducer.h:305,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/reducer.h:306,1
    - Dst: agent_type*::element::modify
      Src: /src/brpc/src/bvar/reducer.h:309,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:309,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: 311
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 311
    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:
    - get_or_create_tls_agent
    - LOG
    - __builtin_expect
    - agent_type*::element::modify
    - op
    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: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    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: 330
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 330
    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: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    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: 330
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 330
    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: 341
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 341
    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:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 344
    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:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 348
    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:349,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 349
    functionName: ~Adder() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Adder() override
  - 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: 384
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 384
    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: 384
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 384
    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:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 397
    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:399,1
    - Dst: bvar::Maxer::expose
      Src: /src/brpc/src/bvar/reducer.h:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 401
    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:403,1
    - Dst: bvar::Maxer::expose_as
      Src: /src/brpc/src/bvar/reducer.h:404,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 405
    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:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 406
    functionName: ~Maxer() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Maxer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 413
    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:417,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: 418
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 418
    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:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - default_value
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 421
    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: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 430
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer(T default_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/bvar/reducer.h:435,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/reducer.h:438,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 439
    functionName: bvar::detail::ConcurrentMaxer::value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - butil::Summer::value
    - std::max
    linkageType: ''
    returnType: T
    signature: T value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 430
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer(T default_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/bvar/reducer.h:435,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/reducer.h:438,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 439
    functionName: bvar::detail::ConcurrentMaxer::value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - butil::Summer::value
    - std::max
    linkageType: ''
    returnType: T
    signature: T value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 465
    functionName: bvar::Maxer<T, std::enable_if<std::is_constructible<detail::ConcurrentMaxer<T>>::value>>::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_as
      Src: /src/brpc/src/bvar/reducer.h:468,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: 469
      start: 466
    functionDepth: 2
    functionLinenumber: 466
    functionLinenumberEnd: 469
    functionName: bvar::Maxer<T, std::enable_if<std::is_constructible<detail::ConcurrentMaxer<T>>::value>>::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::expose_as
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value, const butil::StringPiece& prefix, const
      butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose
      Src: /src/brpc/src/bvar/reducer.h:472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - default_value
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 470
    functionDepth: 2
    functionLinenumber: 470
    functionLinenumberEnd: 473
    functionName: bvar::Maxer<T, std::enable_if<std::is_constructible<detail::ConcurrentMaxer<T>>::value>>::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::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: 488
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 488
    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: 488
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 488
    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:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 499
    functionDepth: 1
    functionLinenumber: 499
    functionLinenumberEnd: 499
    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:501,1
    - Dst: bvar::Miner::expose
      Src: /src/brpc/src/bvar/reducer.h:502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 503
    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:505,1
    - Dst: bvar::Miner::expose_as
      Src: /src/brpc/src/bvar/reducer.h:506,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 504
    functionDepth: 1
    functionLinenumber: 504
    functionLinenumberEnd: 507
    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:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 508
    functionDepth: 1
    functionLinenumber: 508
    functionLinenumberEnd: 508
    functionName: ~Miner() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Miner() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - owner
    - ' op'
    argTypes:
    - O*
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: bvar::detail::SeriesSamplerImpl::SeriesSamplerImpl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesSamplerImpl(O* owner, const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/reducer.h:44,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/reducer.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: bvar::detail::SeriesSamplerImpl::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::detail::SeriesSamplerImpl::describe
      Src: /src/brpc/src/bvar/reducer.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::SeriesSamplerImpl::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::SeriesSamplerImpl::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable()
  - 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: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - U
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U default_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/reducer.h:72,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:74,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 79
    functionName: ~BabylonVariable() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~BabylonVariable() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BabylonVariable
    signature: BabylonVariable & operator<<(T value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/reducer.h:88,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: bvar::detail::BabylonVariable::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: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:95,1
    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: bvar::detail::BabylonVariable::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 4
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/reducer.h:99,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:101,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:103,1
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:106,1
    - Dst: bvar::detail::BabylonVariable::reset
      Src: /src/brpc/src/bvar/reducer.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: bvar::detail::BabylonVariable::reset
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    - bvar::detail::BabylonVariable::reset
    - CHECK
    - butil::class_name_str<T>
    - value
    - butil::class_name_str<Op>
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: T
    signature: T reset()
  - 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: bvar::detail::BabylonVariable::valid
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - 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: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    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: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    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: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:118,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::BabylonVariable::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::describe
      Src: /src/brpc/src/bvar/reducer.h:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: bvar::detail::BabylonVariable::describe_series
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:138,1
    - Dst: series_sampler_type::series_sampler_type
      Src: /src/brpc/src/bvar/reducer.h:143,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:144,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: 147
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 147
    functionName: bvar::detail::BabylonVariable::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 6
    functionsReached:
    - bvar::detail::BabylonVariable::expose_impl
    - schedule
    - series_sampler_type::series_sampler_type
    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:
    - owner
    - ' op'
    argTypes:
    - O*
    - Op
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 43
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 43
    functionName: bvar::detail::SeriesSamplerImpl::SeriesSamplerImpl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SeriesSamplerImpl(O* owner, const Op& op)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/bvar/reducer.h:44,1
    - Dst: get_value
      Src: /src/brpc/src/bvar/reducer.h:44,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 44
    functionName: bvar::detail::SeriesSamplerImpl::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::detail::SeriesSamplerImpl::describe
      Src: /src/brpc/src/bvar/reducer.h:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 45
    functionName: bvar::detail::SeriesSamplerImpl::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 4
    functionsReached:
    - bvar::detail::SeriesSamplerImpl::describe
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 59
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable()
  - 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: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - U
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 67
    functionName: bvar::detail::BabylonVariable::BabylonVariable
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void BabylonVariable(U default_value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: hide
      Src: /src/brpc/src/bvar/reducer.h:72,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:74,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 79
    functionName: ~BabylonVariable() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - destroy
    - hide
    linkageType: ''
    returnType: void
    signature: void ~BabylonVariable() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 84
    functionName: '& operator<<(T value)'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: BabylonVariable
    signature: BabylonVariable & operator<<(T value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/reducer.h:88,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:89,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 92
    functionName: bvar::detail::BabylonVariable::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: 1
    BranchProfiles: []
    Callsites:
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:95,1
    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: bvar::detail::BabylonVariable::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 6
    functionsReached:
    - value
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/reducer.h:99,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:100,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:101,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:103,1
    - Dst: value
      Src: /src/brpc/src/bvar/reducer.h:106,1
    - Dst: bvar::detail::BabylonVariable::reset
      Src: /src/brpc/src/bvar/reducer.h:107,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 109
    functionName: bvar::detail::BabylonVariable::reset
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 4
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    - bvar::detail::BabylonVariable::reset
    - CHECK
    - butil::class_name_str<T>
    - value
    - butil::class_name_str<Op>
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: T
    signature: T reset()
  - 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: bvar::detail::BabylonVariable::valid
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - 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: '& op() const'
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    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: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    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: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:118,1
    - Dst: bvar::detail::BabylonVariable::get_value
      Src: /src/brpc/src/bvar/reducer.h:120,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::BabylonVariable::describe
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 3
    functionsReached:
    - bvar::detail::BabylonVariable::get_value
    linkageType: ''
    returnType: void
    signature: void describe(std::ostream& os, bool quote_string) const override
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::describe
      Src: /src/brpc/src/bvar/reducer.h:129,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: bvar::detail::BabylonVariable::describe_series
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::describe
    linkageType: ''
    returnType: int
    signature: int describe_series(std::ostream& os, const SeriesOptions& options)
      const override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:138,1
    - Dst: series_sampler_type::series_sampler_type
      Src: /src/brpc/src/bvar/reducer.h:143,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:144,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: 147
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 147
    functionName: bvar::detail::BabylonVariable::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 7
    functionsReached:
    - bvar::detail::BabylonVariable::expose_impl
    - schedule
    - series_sampler_type::series_sampler_type
    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: T
      Src: /src/brpc/src/bvar/reducer.h:202,1
    - Dst: Op
      Src: /src/brpc/src/bvar/reducer.h:203,1
    - Dst: InvOp
      Src: /src/brpc/src/bvar/reducer.h:203,1
    - Dst: std::make_shared<combiner_type>
      Src: /src/brpc/src/bvar/reducer.h:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 205
    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:209,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:211,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/reducer.h:215,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 218
    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:228,1
    - Dst: butil::class_name_str<T>
      Src: /src/brpc/src/bvar/reducer.h:229,1
    - Dst: butil::class_name_str<Op>
      Src: /src/brpc/src/bvar/reducer.h:230,1
    - Dst: combine_agents
      Src: /src/brpc/src/bvar/reducer.h:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 233
    functionName: bvar::Reducer::get_value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 2
    functionsReached:
    - butil::class_name_str<T>
    - CHECK
    - butil::class_name_str<Op>
    - combine_agents
    linkageType: ''
    returnType: T
    signature: T get_value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset_all_agents
      Src: /src/brpc/src/bvar/reducer.h:238,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 238
    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:242,1
    - Dst: bvar::Reducer::get_value
      Src: /src/brpc/src/bvar/reducer.h:244,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - quote_string
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 240
    functionDepth: 2
    functionLinenumber: 240
    functionLinenumberEnd: 246
    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:249,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - value
    argTypes:
    - boost::any*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 249
    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:253,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 253
    functionDepth: 1
    functionLinenumber: 253
    functionLinenumberEnd: 253
    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:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 256
    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: 257
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 257
    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:261,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:262,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 265
    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:272,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - SeriesOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 267
    functionDepth: 3
    functionLinenumber: 267
    functionLinenumberEnd: 275
    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::detail::BabylonVariable::expose_impl
      Src: /src/brpc/src/bvar/reducer.h:281,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:287,1
    - Dst: SeriesSampler::SeriesSampler
      Src: /src/brpc/src/bvar/reducer.h:287,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/reducer.h:288,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: 291
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 291
    functionName: bvar::Reducer::expose_impl
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - op
    - schedule
    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:304,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bvar/reducer.h:305,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/reducer.h:306,1
    - Dst: agent_type*::element::modify
      Src: /src/brpc/src/bvar/reducer.h:309,1
    - Dst: op
      Src: /src/brpc/src/bvar/reducer.h:309,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: 311
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 311
    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:
    - get_or_create_tls_agent
    - LOG
    - __builtin_expect
    - agent_type*::element::modify
    - op
    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: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    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: 330
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 330
    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: 324
      start: 322
    functionDepth: 0
    functionLinenumber: 322
    functionLinenumberEnd: 324
    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: 330
      start: 328
    functionDepth: 0
    functionLinenumber: 328
    functionLinenumberEnd: 330
    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: 341
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 341
    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:343,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 344
      start: 342
    functionDepth: 0
    functionLinenumber: 342
    functionLinenumberEnd: 344
    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:347,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 348
    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:349,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 349
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 349
    functionName: ~Adder() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Adder() override
  - 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: 384
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 384
    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: 384
      start: 378
    functionDepth: 0
    functionLinenumber: 378
    functionLinenumberEnd: 384
    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:397,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 397
    functionDepth: 1
    functionLinenumber: 397
    functionLinenumberEnd: 397
    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:399,1
    - Dst: bvar::Maxer::expose
      Src: /src/brpc/src/bvar/reducer.h:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 401
    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:403,1
    - Dst: bvar::Maxer::expose_as
      Src: /src/brpc/src/bvar/reducer.h:404,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 405
      start: 402
    functionDepth: 1
    functionLinenumber: 402
    functionLinenumberEnd: 405
    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:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 406
    functionDepth: 1
    functionLinenumber: 406
    functionLinenumberEnd: 406
    functionName: ~Maxer() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Maxer() override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 412
    functionDepth: 0
    functionLinenumber: 412
    functionLinenumberEnd: 413
    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:417,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: 418
      start: 414
    functionDepth: 0
    functionLinenumber: 414
    functionLinenumberEnd: 418
    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:420,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - default_value
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 421
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 421
    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: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 430
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer(T default_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/bvar/reducer.h:435,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/reducer.h:438,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 439
    functionName: bvar::detail::ConcurrentMaxer::value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - butil::Summer::value
    - std::max
    linkageType: ''
    returnType: T
    signature: T value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 430
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    functionName: bvar::detail::ConcurrentMaxer::ConcurrentMaxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ConcurrentMaxer(T default_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::Summer::value
      Src: /src/brpc/src/bvar/reducer.h:435,1
    - Dst: std::max
      Src: /src/brpc/src/bvar/reducer.h:438,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 433
    functionDepth: 1
    functionLinenumber: 433
    functionLinenumberEnd: 439
    functionName: bvar::detail::ConcurrentMaxer::value
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - butil::Summer::value
    - std::max
    linkageType: ''
    returnType: T
    signature: T value() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - default_value
    argTypes:
    - T
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 465
    functionName: bvar::Maxer<T, std::enable_if<std::is_constructible<detail::ConcurrentMaxer<T>>::value>>::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose_as
      Src: /src/brpc/src/bvar/reducer.h:468,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: 469
      start: 466
    functionDepth: 2
    functionLinenumber: 466
    functionLinenumberEnd: 469
    functionName: bvar::Maxer<T, std::enable_if<std::is_constructible<detail::ConcurrentMaxer<T>>::value>>::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::expose_as
    linkageType: ''
    returnType: void
    signature: void Maxer(T default_value, const butil::StringPiece& prefix, const
      butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Variable::expose
      Src: /src/brpc/src/bvar/reducer.h:472,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - default_value
    - ' name'
    argTypes:
    - T
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 473
      start: 470
    functionDepth: 2
    functionLinenumber: 470
    functionLinenumberEnd: 473
    functionName: bvar::Maxer<T, std::enable_if<std::is_constructible<detail::ConcurrentMaxer<T>>::value>>::Maxer
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::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: 488
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 488
    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: 488
      start: 483
    functionDepth: 0
    functionLinenumber: 483
    functionLinenumberEnd: 488
    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:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 499
    functionDepth: 1
    functionLinenumber: 499
    functionLinenumberEnd: 499
    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:501,1
    - Dst: bvar::Miner::expose
      Src: /src/brpc/src/bvar/reducer.h:502,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 500
    functionDepth: 1
    functionLinenumber: 500
    functionLinenumberEnd: 503
    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:505,1
    - Dst: bvar::Miner::expose_as
      Src: /src/brpc/src/bvar/reducer.h:506,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' prefix'
    - ' name'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 504
    functionDepth: 1
    functionLinenumber: 504
    functionLinenumberEnd: 507
    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:508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 508
    functionDepth: 1
    functionLinenumber: 508
    functionLinenumberEnd: 508
    functionName: ~Miner() override
    functionSourceFile: /src/brpc/src/bvar/reducer.h
    functionUses: 0
    functionsReached:
    - bvar::Variable::hide
    linkageType: ''
    returnType: void
    signature: void ~Miner() override
  - 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
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::unique_ptr::combine_of
    - std::vector::end
    - std::vector::begin
    - std::vector::size
    - std::unique_ptr::get_number
    - CHECK_EQ
    - std::make_pair
    - arraysize
    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:
    - static_cast<RecorderWindow*>
    - bvar::detail::double_to_random_int
    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: 0
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::vector::end
    - std::vector::begin
    - CombinedPercentileSamples*::combine_of
    - 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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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: 1
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::combine
    - std::unique_ptr::get_number
    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
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::unique_ptr::combine_of
    - std::vector::end
    - std::vector::begin
    - std::vector::size
    - std::unique_ptr::get_number
    - CHECK_EQ
    - std::make_pair
    - arraysize
    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:
    - static_cast<RecorderWindow*>
    - bvar::detail::double_to_random_int
    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: 0
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::vector::end
    - std::vector::begin
    - CombinedPercentileSamples*::combine_of
    - 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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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: 1
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - bvar::detail::combine
    - std::unique_ptr::get_number
    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: 2
    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:
    - get_span
    - bvar::detail::double_to_random_int
    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:
    - CHECK_EQ
    - size
    - set_debug_name
    - butil::StringPiece::empty
    - butil::StringPiece::ends_with
    - butil::StringPiece::size
    - LOG
    - std::string::append
    - std::string::push_back
    - butil::StringPiece::data
    - set_vector_names
    - empty
    - snprintf
    - data
    - expose_as
    - butil::StringPiece::remove_suffix
    - std::string::reserve
    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: 0
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::LatencyRecorder::latency_percentile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - combine
    - std::unique_ptr::get_number
    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
    - count
    - window_size
    - 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
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::unique_ptr::combine_of
    - std::vector::end
    - std::vector::begin
    - std::vector::size
    - std::unique_ptr::get_number
    - CHECK_EQ
    - std::make_pair
    - arraysize
    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:
    - static_cast<RecorderWindow*>
    - bvar::detail::double_to_random_int
    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: 0
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 2
    functionsReached:
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::vector::end
    - std::vector::begin
    - CombinedPercentileSamples*::combine_of
    - 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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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: 1
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - bvar::detail::combine
    - std::unique_ptr::get_number
    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
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::unique_ptr::combine_of
    - std::vector::end
    - std::vector::begin
    - std::vector::size
    - std::unique_ptr::get_number
    - CHECK_EQ
    - std::make_pair
    - arraysize
    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:
    - static_cast<RecorderWindow*>
    - bvar::detail::double_to_random_int
    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: 0
    functionLinenumber: 116
    functionLinenumberEnd: 122
    functionName: bvar::detail::combine
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 3
    functionsReached:
    - CombinedPercentileSamples::CombinedPercentileSamples
    - std::vector::end
    - std::vector::begin
    - CombinedPercentileSamples*::combine_of
    - 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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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:
    - static_cast<LatencyRecorder*>
    - LatencyRecorder*::latency_percentile
    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: 1
    functionLinenumber: 143
    functionLinenumberEnd: 155
    functionName: bvar::detail::get_latencies
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 1
    functionsReached:
    - bvar::detail::combine
    - std::unique_ptr::get_number
    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: 2
    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:
    - get_span
    - bvar::detail::double_to_random_int
    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:
    - CHECK_EQ
    - size
    - set_debug_name
    - butil::StringPiece::empty
    - butil::StringPiece::ends_with
    - butil::StringPiece::size
    - LOG
    - std::string::append
    - std::string::push_back
    - butil::StringPiece::data
    - set_vector_names
    - empty
    - snprintf
    - data
    - expose_as
    - butil::StringPiece::remove_suffix
    - std::string::reserve
    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: 0
    functionLinenumber: 265
    functionLinenumberEnd: 269
    functionName: bvar::LatencyRecorder::latency_percentile
    functionSourceFile: /src/brpc/src/bvar/latency_recorder.cpp
    functionUses: 0
    functionsReached:
    - combine
    - std::unique_ptr::get_number
    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
    - count
    - window_size
    - 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:
    - init
    - pthread_mutex_init
    - LOG
    - pthread_mutexattr_settype
    - pthread_mutexattr_destroy
    - pthread_mutexattr_init
    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: 0
    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: 1
    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: 4
    functionsReached:
    - bvar::Variable::hide
    - reserve
    - BAIDU_SCOPED_LOCK
    - clear
    - to_underscored_name
    - LOG
    - empty
    - get_var_map
    - RELEASE_ASSERT_VERBOSE
    - seek
    - bvar::Variable::describe_exposed
    - push_back
    - size
    - butil::back_char
    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: 0
    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:
    - BAIDU_SCOPED_LOCK
    - get_var_map
    - clear
    - CHECK
    - erase
    - empty
    - CHECK_EQ
    - 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:
    - bvar::Variable::count_exposed
    - begin
    - restore_iterator
    - end
    - std::vector<std::string>*::clear
    - std::vector<std::string>*::reserve
    - save_iterator
    - std::vector<std::string>*::push_back
    - std::unique_lock::unlock
    - std::unique_lock::lock
    - std::vector<std::string>*::capacity
    - get_var_maps
    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:
    - seek
    - BAIDU_SCOPED_LOCK
    - VarEntry*::var::describe
    - get_var_map
    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:
    - std::ostringstream::str
    - bvar::Variable::describe_exposed
    - std::string
    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: 0
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: bvar::Variable::get_description
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - describe
    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: 0
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: bvar::Variable::get_value
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - describe
    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:
    - seek
    - BAIDU_SCOPED_LOCK
    - VarEntry*::var::describe_series
    - get_var_map
    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:
    - seek
    - BAIDU_SCOPED_LOCK
    - VarEntry*::var::get_value
    - get_var_map
    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:
    - pbase
    - pptr
    - butil::BasicStringPiece::BasicStringPiece
    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::MysqlReply::is_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::MysqlReply::is_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:
    - malloc
    - sputc
    - std::max
    - memcpy
    - free
    - pbump
    - brpc::MysqlReply::is_eof
    - BAIDU_UNLIKELY
    - setp
    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:
    - insert
    - reserve
    - butil::StringMultiSplitter::length
    - empty
    - std::string::find_first_of
    - std::string::assign
    - c_str
    - push_back
    - butil::StringMultiSplitter::field
    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:
    - find
    - end
    - empty
    - c_str
    - size
    - wildcmp
    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:
    - WildcardMatcher::match
    - CharArrayStreamBuf::data
    - std::vector::end
    - LOG
    - WildcardMatcher::wildcards
    - std::ostringstream::str
    - std::vector::begin
    - CharArrayStreamBuf::reset
    - WildcardMatcher::exact_names
    - std::sort
    - bvar::Variable::describe_exposed
    - bvar::Variable::list_exposed
    - Dumper*::dump
    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::ifstream::good
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::data
    - std::ifstream::is_open
    - bvar::to_underscored_name
    - butil::back_char
    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:
    - butil::StringPiece::empty
    - to_underscored_name
    - butil::StringPiece::size
    - butil::StringPiece::data
    - isspace
    - butil::StringPiece::remove_suffix
    - push_back
    - butil::back_char
    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:
    - butil::FilePath::value
    - PLOG
    - butil::FilePath
    - fprintf
    - LOG
    - fopen
    - data
    - butil::CreateDirectoryAndGetError
    - c_str
    - size
    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:
    - WildcardMatcher::WildcardMatcher
    - butil::KeyValuePairsSplitter::value
    - emplace_back
    - CommonFileDumper::CommonFileDumper
    - butil::FilePath::AddExtension
    - butil::FilePath::RemoveFinalExtension
    - butil::KeyValuePairsSplitter::key
    - butil::FilePath::FinalExtension
    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:
    - clear
    - size
    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:
    - bvar::FileDumperGroup::dump
    - back
    - first::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::SetNameSimple
      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
    - std::string::find
    - bvar::MVariableBase::dump_exposed
    - std::string::empty
    - PrometheusFileDumper::PrometheusFileDumper
    - bvar::read_command_name
    - pthread_mutex_lock
    - butil::milliseconds_from_now
    - LOG
    - pthread_cond_timedwait
    - bvar::Variable::dump_exposed
    - usleep
    - butil::PlatformThread::SetNameSimple
    - std::string::replace
    - pthread_mutex_unlock
    - CommonFileDumper::CommonFileDumper
    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
    - berror
    - pthread_detach
    - LOG
    - CHECK_EQ
    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*::reserve
    - std::string*::push_back
    - std::string*::size
    - isdigit
    - isupper
    - data
    - isalpha
    - std::string*::empty
    - size
    - butil::back_char
    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:
    - init
    - pthread_mutex_init
    - LOG
    - pthread_mutexattr_settype
    - pthread_mutexattr_destroy
    - pthread_mutexattr_init
    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: 0
    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: 1
    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: 4
    functionsReached:
    - bvar::Variable::hide
    - reserve
    - BAIDU_SCOPED_LOCK
    - clear
    - to_underscored_name
    - LOG
    - empty
    - get_var_map
    - RELEASE_ASSERT_VERBOSE
    - seek
    - bvar::Variable::describe_exposed
    - push_back
    - size
    - butil::back_char
    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: 0
    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:
    - BAIDU_SCOPED_LOCK
    - get_var_map
    - clear
    - CHECK
    - erase
    - empty
    - CHECK_EQ
    - 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:
    - bvar::Variable::count_exposed
    - begin
    - restore_iterator
    - end
    - std::vector<std::string>*::clear
    - std::vector<std::string>*::reserve
    - save_iterator
    - std::vector<std::string>*::push_back
    - std::unique_lock::unlock
    - std::unique_lock::lock
    - std::vector<std::string>*::capacity
    - get_var_maps
    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:
    - seek
    - BAIDU_SCOPED_LOCK
    - VarEntry*::var::describe
    - get_var_map
    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:
    - std::ostringstream::str
    - bvar::Variable::describe_exposed
    - std::string
    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: 0
    functionLinenumber: 274
    functionLinenumberEnd: 278
    functionName: bvar::Variable::get_description
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - describe
    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: 0
    functionLinenumber: 281
    functionLinenumberEnd: 285
    functionName: bvar::Variable::get_value
    functionSourceFile: /src/brpc/src/bvar/variable.cpp
    functionUses: 0
    functionsReached:
    - std::ostringstream::str
    - describe
    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:
    - seek
    - BAIDU_SCOPED_LOCK
    - VarEntry*::var::describe_series
    - get_var_map
    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:
    - seek
    - BAIDU_SCOPED_LOCK
    - VarEntry*::var::get_value
    - get_var_map
    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:
    - pbase
    - pptr
    - butil::BasicStringPiece::BasicStringPiece
    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::MysqlReply::is_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::MysqlReply::is_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:
    - malloc
    - sputc
    - std::max
    - memcpy
    - free
    - pbump
    - brpc::MysqlReply::is_eof
    - BAIDU_UNLIKELY
    - setp
    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:
    - insert
    - reserve
    - butil::StringMultiSplitter::length
    - empty
    - std::string::find_first_of
    - std::string::assign
    - c_str
    - push_back
    - butil::StringMultiSplitter::field
    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:
    - find
    - end
    - empty
    - c_str
    - size
    - wildcmp
    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:
    - WildcardMatcher::match
    - CharArrayStreamBuf::data
    - std::vector::end
    - LOG
    - WildcardMatcher::wildcards
    - std::ostringstream::str
    - std::vector::begin
    - CharArrayStreamBuf::reset
    - WildcardMatcher::exact_names
    - std::sort
    - bvar::Variable::describe_exposed
    - bvar::Variable::list_exposed
    - Dumper*::dump
    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::ifstream::good
    - std::string
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::data
    - std::ifstream::is_open
    - bvar::to_underscored_name
    - butil::back_char
    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:
    - butil::StringPiece::empty
    - to_underscored_name
    - butil::StringPiece::size
    - butil::StringPiece::data
    - isspace
    - butil::StringPiece::remove_suffix
    - push_back
    - butil::back_char
    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:
    - butil::FilePath::value
    - PLOG
    - butil::FilePath
    - fprintf
    - LOG
    - fopen
    - data
    - butil::CreateDirectoryAndGetError
    - c_str
    - size
    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:
    - WildcardMatcher::WildcardMatcher
    - butil::KeyValuePairsSplitter::value
    - emplace_back
    - CommonFileDumper::CommonFileDumper
    - butil::FilePath::AddExtension
    - butil::FilePath::RemoveFinalExtension
    - butil::KeyValuePairsSplitter::key
    - butil::FilePath::FinalExtension
    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:
    - clear
    - size
    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:
    - bvar::FileDumperGroup::dump
    - back
    - first::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::SetNameSimple
      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
    - std::string::find
    - bvar::MVariableBase::dump_exposed
    - std::string::empty
    - PrometheusFileDumper::PrometheusFileDumper
    - bvar::read_command_name
    - pthread_mutex_lock
    - butil::milliseconds_from_now
    - LOG
    - pthread_cond_timedwait
    - bvar::Variable::dump_exposed
    - usleep
    - butil::PlatformThread::SetNameSimple
    - std::string::replace
    - pthread_mutex_unlock
    - CommonFileDumper::CommonFileDumper
    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
    - berror
    - pthread_detach
    - LOG
    - CHECK_EQ
    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*::reserve
    - std::string*::push_back
    - std::string*::size
    - isdigit
    - isupper
    - data
    - isalpha
    - std::string*::empty
    - size
    - butil::back_char
    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::SetNameSimple
      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::SetNameSimple
    - static_cast<Collector*>
    linkageType: ''
    returnType: void
    signature: void * run_grab_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetNameSimple
      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::SetNameSimple
    - 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:
    - pthread_create
    - berror
    - pthread_cond_init
    - pthread_mutex_init
    - butil::cpuwide_time_us
    - LOG
    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_cond_destroy
    - pthread_join
    - pthread_mutex_destroy
    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:
    - GrapMap::begin
    - pthread_mutex_lock
    - pthread_join
    - Collected*::destroy
    - Collected*::InsertBefore
    - CHECK_EQ
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - pthread_create
    - PreprocessorMap::end
    - butil::microseconds_from_now
    - PreprocessorMap::iterator::second::empty
    - butil::LinkNode*::InsertBeforeAsList
    - pthread_cond_signal
    - PreprocessorMap::iterator::first::process
    - butil::LinkNode*::value
    - size
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_us
    - butil::LinkNode*::next
    - bvar::Collector::update_speed_limit
    - GrapMap::end
    - push_back
    - butil::LinkNode::next
    - butil::LinkNode::RemoveFromList
    - pthread_cond_timedwait
    - Collected*::speed_limit
    - pthread_mutex_unlock
    - bvar::Collector::reset
    - PreprocessorMap::iterator::second::clear
    - PreprocessorMap::begin
    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_mutex_lock
    - pthread_cond_signal
    linkageType: ''
    returnType: void
    signature: void Collector::wakeup_grab_thread()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_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: 1
    functionLinenumber: 293
    functionLinenumberEnd: 346
    functionName: bvar::Collector::update_speed_limit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 1
    functionsReached:
    - butil::cpuwide_time_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::cpuwide_time_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: 1
    functionLinenumber: 348
    functionLinenumberEnd: 359
    functionName: bvar::is_collectable_before_first_time_grabbed
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::get_leaky_singleton<Collector>
    - butil::cpuwide_time_us
    - CollectorSpeedLimit*::count_before_grabbed::fetch_add
    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:
    - Collected*::dump_and_destroy
    - BAIDU_SCOPED_LOCK
    - RemoveFromList
    - butil::LinkNode::next
    - butil::cpuwide_time_ns
    - CHECK
    - pthread_cond_wait
    - next
    - butil::LinkNode*::next
    - butil::LinkNode*::InsertBeforeAsList
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode*::value
    - butil::LinkNode::LinkNode
    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:419,1
    - Dst: Collector*::last_active_cpuwide_us
      Src: /src/brpc/src/bvar/collector.cpp:425,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/collector.cpp:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 430
    functionName: bvar::Collected::submit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::get_leaky_singleton<Collector>
    - destroy
    - Collector*::last_active_cpuwide_us
    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: 435
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 435
    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: 440
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 440
    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::SetNameSimple
      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::SetNameSimple
    - static_cast<Collector*>
    linkageType: ''
    returnType: void
    signature: void * run_grab_thread(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetNameSimple
      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::SetNameSimple
    - 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:
    - pthread_create
    - berror
    - pthread_cond_init
    - pthread_mutex_init
    - butil::cpuwide_time_us
    - LOG
    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_cond_destroy
    - pthread_join
    - pthread_mutex_destroy
    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: 2
    functionLinenumber: 156
    functionLinenumberEnd: 284
    functionName: bvar::Collector::grab_thread
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 0
    functionsReached:
    - GrapMap::begin
    - pthread_mutex_lock
    - pthread_join
    - Collected*::destroy
    - Collected*::InsertBefore
    - CHECK_EQ
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode::LinkNode
    - pthread_create
    - PreprocessorMap::end
    - butil::microseconds_from_now
    - PreprocessorMap::iterator::second::empty
    - butil::LinkNode*::InsertBeforeAsList
    - pthread_cond_signal
    - PreprocessorMap::iterator::first::process
    - butil::LinkNode*::value
    - size
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_us
    - butil::LinkNode*::next
    - bvar::Collector::update_speed_limit
    - GrapMap::end
    - push_back
    - butil::LinkNode::next
    - butil::LinkNode::RemoveFromList
    - pthread_cond_timedwait
    - Collected*::speed_limit
    - pthread_mutex_unlock
    - bvar::Collector::reset
    - PreprocessorMap::iterator::second::clear
    - PreprocessorMap::begin
    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_mutex_lock
    - pthread_cond_signal
    linkageType: ''
    returnType: void
    signature: void Collector::wakeup_grab_thread()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_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: 1
    functionLinenumber: 293
    functionLinenumberEnd: 346
    functionName: bvar::Collector::update_speed_limit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::cpuwide_time_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::cpuwide_time_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: 1
    functionLinenumber: 348
    functionLinenumberEnd: 359
    functionName: bvar::is_collectable_before_first_time_grabbed
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::get_leaky_singleton<Collector>
    - butil::cpuwide_time_us
    - CollectorSpeedLimit*::count_before_grabbed::fetch_add
    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:
    - Collected*::dump_and_destroy
    - BAIDU_SCOPED_LOCK
    - RemoveFromList
    - butil::LinkNode::next
    - butil::cpuwide_time_ns
    - CHECK
    - pthread_cond_wait
    - next
    - butil::LinkNode*::next
    - butil::LinkNode*::InsertBeforeAsList
    - butil::LinkNode*::RemoveFromList
    - butil::LinkNode*::value
    - butil::LinkNode::LinkNode
    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:419,1
    - Dst: Collector*::last_active_cpuwide_us
      Src: /src/brpc/src/bvar/collector.cpp:425,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/collector.cpp:428,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 418
    functionDepth: 1
    functionLinenumber: 418
    functionLinenumberEnd: 430
    functionName: bvar::Collected::submit
    functionSourceFile: /src/brpc/src/bvar/collector.cpp
    functionUses: 2
    functionsReached:
    - butil::get_leaky_singleton<Collector>
    - destroy
    - Collector*::last_active_cpuwide_us
    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: 435
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 435
    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: 440
      start: 437
    functionDepth: 0
    functionLinenumber: 437
    functionLinenumberEnd: 440
    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: 1
    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: 2
    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::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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: 1
    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: 2
    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::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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: 1
    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
    - R*::get_sampler
    - CHECK_EQ
    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:
    - value_type
    - bvar::detail::WindowBase::get_span
    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: 4
    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:
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    - std::vector<value_type>*::clear
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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: 1
    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
    - R*::get_sampler
    - CHECK_EQ
    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:
    - value_type
    - bvar::detail::WindowBase::get_span
    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: 4
    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:
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    - std::vector<value_type>*::clear
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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: 1
    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
    - R*::get_sampler
    - CHECK_EQ
    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:
    - value_type
    - bvar::detail::WindowBase::get_span
    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: 4
    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:
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    - std::vector<value_type>*::clear
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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: 1
    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
    - R*::get_sampler
    - CHECK_EQ
    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:
    - value_type
    - bvar::detail::WindowBase::get_span
    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: 4
    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:
    - bvar::detail::WindowBase::get_samples
    - std::vector<value_type>*::reserve
    - std::vector<value_type>*::clear
    linkageType: ''
    returnType: void
    signature: void get_samples(std::vector<value_type> *samples) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bvar::detail::BabylonVariable::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:
    - bvar::detail::BabylonVariable::expose_impl
    - SeriesSampler::SeriesSampler
    - schedule
    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:
    - berror
    - pthread_mutex_init
    - CHECK_EQ
    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:
    - berror
    - pthread_mutex_destroy
    - CHECK_EQ
    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:
    - mutex
    - timer::stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - owns_lock
    - unlock
    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
    - start
    - stop
    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:
    - bvar::detail::UniqueLockBase::try_lock
    - u_elapsed
    - start
    - stop
    - recorder
    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:
    - bvar::detail::UniqueLockBase::unlock
    - u_elapsed
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::release
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_for
    - start
    - stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    - stop
    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:
    - mutex
    - timer::stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - owns_lock
    - unlock
    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
    - start
    - stop
    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:
    - bvar::detail::UniqueLockBase::try_lock
    - u_elapsed
    - start
    - stop
    - recorder
    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:
    - bvar::detail::UniqueLockBase::unlock
    - u_elapsed
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::release
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_for
    - start
    - stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    - stop
    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:
    - berror
    - pthread_mutex_init
    - CHECK_EQ
    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:
    - berror
    - pthread_mutex_destroy
    - CHECK_EQ
    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:
    - mutex
    - timer::stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - owns_lock
    - unlock
    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
    - start
    - stop
    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:
    - bvar::detail::UniqueLockBase::try_lock
    - u_elapsed
    - start
    - stop
    - recorder
    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:
    - bvar::detail::UniqueLockBase::unlock
    - u_elapsed
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::release
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_for
    - start
    - stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    - stop
    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:
    - mutex
    - timer::stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::mutex
    - stop
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - owns_lock
    - unlock
    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
    - start
    - stop
    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:
    - bvar::detail::UniqueLockBase::try_lock
    - u_elapsed
    - start
    - stop
    - recorder
    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:
    - bvar::detail::UniqueLockBase::unlock
    - u_elapsed
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::release
    - bvar::detail::UniqueLockBase::owns_lock
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_for
    - start
    - stop
    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:
    - u_elapsed
    - bvar::detail::UniqueLockBase::try_lock_until
    - start
    - stop
    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:
    - _lock::Acquire
    - element::_lock::Release
    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:
    - Acquire
    - op
    - 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>::compare_exchange_weak"
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    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, const self_shared_type& c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:209,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:211,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' c'
    argTypes:
    - Op
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 214
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 1
    functionsReached:
    - bvar::detail::AgentCombiner::merge_global
    - get
    - lock
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:224,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:225,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 232
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - BinaryOp
    - ElementTp
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    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: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 271
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - 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:278,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 284
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - load
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - head
    - butil::LinkNode*::value
    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: 287
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 287
    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: 289
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 289
    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:297,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 303
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - exchange
    - head
    - butil::LinkNode*::value
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:314,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 317
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::load
    - Agent*::RemoveFromList
    - call_op_returning_void
    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:326,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:327,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 328
    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:332,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:335,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:337,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:341,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 351
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - LOG
    - bvar::detail::AgentCombiner::shared_from_this
    - Agent*::reset
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentGroup::get_tls_agent
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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: 381
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 381
    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:
    - _lock::Acquire
    - element::_lock::Release
    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:
    - Acquire
    - op
    - 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>::compare_exchange_weak"
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    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, const self_shared_type& c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:209,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:211,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' c'
    argTypes:
    - Op
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 214
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 2
    functionsReached:
    - bvar::detail::AgentCombiner::merge_global
    - get
    - lock
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:224,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:225,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 232
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - BinaryOp
    - ElementTp
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    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: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 271
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - 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:278,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 284
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - load
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - head
    - butil::LinkNode*::value
    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: 287
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 287
    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: 289
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 289
    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:297,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 303
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - exchange
    - head
    - butil::LinkNode*::value
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:314,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 317
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::load
    - Agent*::RemoveFromList
    - call_op_returning_void
    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:326,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:327,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 328
    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:332,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:335,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:337,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:341,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 351
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - LOG
    - bvar::detail::AgentCombiner::shared_from_this
    - Agent*::reset
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentGroup::get_tls_agent
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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: 381
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 381
    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:
    - _lock::Acquire
    - element::_lock::Release
    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:
    - Acquire
    - op
    - 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>::compare_exchange_weak"
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    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, const self_shared_type& c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:209,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:211,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' c'
    argTypes:
    - Op
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 214
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 3
    functionsReached:
    - bvar::detail::AgentCombiner::merge_global
    - get
    - lock
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:224,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:225,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 232
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - BinaryOp
    - ElementTp
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    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: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 271
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - 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:278,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 284
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - load
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - head
    - butil::LinkNode*::value
    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: 287
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 287
    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: 289
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 289
    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:297,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 303
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - exchange
    - head
    - butil::LinkNode*::value
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:314,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 317
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::load
    - Agent*::RemoveFromList
    - call_op_returning_void
    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:326,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:327,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 328
    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:332,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:335,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:337,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:341,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 351
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - LOG
    - bvar::detail::AgentCombiner::shared_from_this
    - Agent*::reset
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentGroup::get_tls_agent
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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: 381
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 381
    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:
    - _lock::Acquire
    - element::_lock::Release
    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:
    - Acquire
    - op
    - 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>::compare_exchange_weak"
    - "bvar::detail::ElementContainer<\n    T, typename butil::enable_if<is_atomical<T>::value>::type>::load"
    - call_op_returning_void
    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, const self_shared_type& c)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/bvar/detail/combiner.h:209,1
    - Dst: get
      Src: /src/brpc/src/bvar/detail/combiner.h:211,1
    - Dst: bvar::detail::AgentCombiner::merge_global
      Src: /src/brpc/src/bvar/detail/combiner.h:212,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - ' c'
    argTypes:
    - Op
    - self_shared_type
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 214
    functionName: bvar::detail::AgentCombiner::merge_global
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 4
    functionsReached:
    - bvar::detail::AgentCombiner::merge_global
    - get
    - lock
    linkageType: ''
    returnType: void
    signature: void merge_global(const Op &op, self_shared_type& c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ResultTp
      Src: /src/brpc/src/bvar/detail/combiner.h:224,1
    - Dst: ElementTp
      Src: /src/brpc/src/bvar/detail/combiner.h:225,1
    - Dst: BinaryOp
      Src: /src/brpc/src/bvar/detail/combiner.h:226,1
    - Dst: bvar::detail::AgentGroup::create_new_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:227,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 232
    functionName: bvar::detail::AgentCombiner::AgentCombiner
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - BinaryOp
    - ElementTp
    - ResultTp
    - bvar::detail::AgentGroup::create_new_agent
    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: bvar::detail::AgentGroup::destroy_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:268,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 271
    functionName: ~AgentCombiner()
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - 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:278,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:279,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: load
      Src: /src/brpc/src/bvar/detail/combiner.h:280,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:281,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 284
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 284
    functionName: bvar::detail::AgentCombiner::combine_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - load
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - head
    - butil::LinkNode*::value
    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: 287
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 287
    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: 289
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 289
    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:297,1
    - Dst: end
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::next
      Src: /src/brpc/src/bvar/detail/combiner.h:298,1
    - Dst: butil::LinkNode*::value
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: exchange
      Src: /src/brpc/src/bvar/detail/combiner.h:299,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:300,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 303
    functionName: bvar::detail::AgentCombiner::reset_all_agents
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - end
    - call_op_returning_void
    - butil::LinkNode*::next
    - exchange
    - head
    - butil::LinkNode*::value
    linkageType: ''
    returnType: ResultTp
    signature: ResultTp reset_all_agents()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Agent*::element::load
      Src: /src/brpc/src/bvar/detail/combiner.h:314,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:315,1
    - Dst: Agent*::RemoveFromList
      Src: /src/brpc/src/bvar/detail/combiner.h:316,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 317
    functionName: bvar::detail::AgentCombiner::commit_and_erase
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 0
    functionsReached:
    - Agent*::element::load
    - Agent*::RemoveFromList
    - call_op_returning_void
    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:326,1
    - Dst: call_op_returning_void
      Src: /src/brpc/src/bvar/detail/combiner.h:327,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - agent
    argTypes:
    - Agent*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 328
    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:332,1
    - Dst: bvar::detail::AgentGroup::get_or_create_tls_agent
      Src: /src/brpc/src/bvar/detail/combiner.h:335,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/combiner.h:337,1
    - Dst: Agent*::combiner::expired
      Src: /src/brpc/src/bvar/detail/combiner.h:341,1
    - Dst: Agent*::reset
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: bvar::detail::AgentCombiner::shared_from_this
      Src: /src/brpc/src/bvar/detail/combiner.h:344,1
    - Dst: Append
      Src: /src/brpc/src/bvar/detail/combiner.h:348,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 351
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 351
    functionName: bvar::detail::AgentCombiner::get_or_create_tls_agent
    functionSourceFile: /src/brpc/src/bvar/detail/combiner.h
    functionUses: 6
    functionsReached:
    - LOG
    - bvar::detail::AgentCombiner::shared_from_this
    - Agent*::reset
    - Agent*::combiner::expired
    - Append
    - bvar::detail::AgentGroup::get_tls_agent
    - bvar::detail::AgentGroup::get_or_create_tls_agent
    linkageType: ''
    returnType: Agent
    signature: Agent * get_or_create_tls_agent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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: 381
      start: 381
    functionDepth: 0
    functionLinenumber: 381
    functionLinenumberEnd: 381
    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:
    - bvar::detail::log2
    - butil::BaseIteratorRangeToNumberTraits::max
    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:
    - full
    - get_interval_at
    - clear
    - unlock
    - lock
    - add64
    - get_interval_index
    - added_count
    - 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:
    - get_or_create_tls_agent
    - AddLatency
    - LOG
    - agent_type*::merge_global
    - empty
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: for_each
      Src: /src/brpc/src/bvar/detail/percentile.cpp:134,1
    - Dst: value_type::merge
      Src: /src/brpc/src/bvar/detail/percentile.cpp:136,1
    - Dst: bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:137,1
    - Dst: record_num::load
      Src: /src/brpc/src/bvar/detail/percentile.cpp:138,1
    - Dst: std::min<size_t>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:140,1
    - Dst: set_bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:141,1
    - Dst: bvar::detail::Percentile::reset
      Src: /src/brpc/src/bvar/detail/percentile.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 146
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 2
    functionsReached:
    - std::min<size_t>
    - set_bucket_capacity
    - bvar::detail::Percentile::reset
    - value_type::merge
    - record_num::load
    - for_each
    - bucket_capacity
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:149,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:153,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:154,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:157,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 164
    functionName: '& Percentile::operator<<(int64_t value)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - empty
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: Percentile
    signature: Percentile & Percentile::operator<<(int64_t value)
  - 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:
    - bvar::detail::log2
    - butil::BaseIteratorRangeToNumberTraits::max
    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:
    - full
    - get_interval_at
    - clear
    - unlock
    - lock
    - add64
    - get_interval_index
    - added_count
    - 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: 2
    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:
    - get_or_create_tls_agent
    - AddLatency
    - LOG
    - agent_type*::merge_global
    - empty
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: for_each
      Src: /src/brpc/src/bvar/detail/percentile.cpp:134,1
    - Dst: value_type::merge
      Src: /src/brpc/src/bvar/detail/percentile.cpp:136,1
    - Dst: bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:137,1
    - Dst: record_num::load
      Src: /src/brpc/src/bvar/detail/percentile.cpp:138,1
    - Dst: std::min<size_t>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:140,1
    - Dst: set_bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:141,1
    - Dst: bvar::detail::Percentile::reset
      Src: /src/brpc/src/bvar/detail/percentile.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 146
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 3
    functionsReached:
    - std::min<size_t>
    - set_bucket_capacity
    - bvar::detail::Percentile::reset
    - value_type::merge
    - record_num::load
    - for_each
    - bucket_capacity
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:149,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:153,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:154,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:157,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 164
    functionName: '& Percentile::operator<<(int64_t value)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - empty
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: Percentile
    signature: Percentile & Percentile::operator<<(int64_t value)
  - 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:
    - bvar::detail::log2
    - butil::BaseIteratorRangeToNumberTraits::max
    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:
    - full
    - get_interval_at
    - clear
    - unlock
    - lock
    - add64
    - get_interval_index
    - added_count
    - 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: 3
    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:
    - get_or_create_tls_agent
    - AddLatency
    - LOG
    - agent_type*::merge_global
    - empty
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: for_each
      Src: /src/brpc/src/bvar/detail/percentile.cpp:134,1
    - Dst: value_type::merge
      Src: /src/brpc/src/bvar/detail/percentile.cpp:136,1
    - Dst: bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:137,1
    - Dst: record_num::load
      Src: /src/brpc/src/bvar/detail/percentile.cpp:138,1
    - Dst: std::min<size_t>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:140,1
    - Dst: set_bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:141,1
    - Dst: bvar::detail::Percentile::reset
      Src: /src/brpc/src/bvar/detail/percentile.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 146
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 4
    functionsReached:
    - std::min<size_t>
    - set_bucket_capacity
    - bvar::detail::Percentile::reset
    - value_type::merge
    - record_num::load
    - for_each
    - bucket_capacity
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:149,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:153,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:154,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:157,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 164
    functionName: '& Percentile::operator<<(int64_t value)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - empty
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: Percentile
    signature: Percentile & Percentile::operator<<(int64_t value)
  - 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:
    - bvar::detail::log2
    - butil::BaseIteratorRangeToNumberTraits::max
    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:
    - full
    - get_interval_at
    - clear
    - unlock
    - lock
    - add64
    - get_interval_index
    - added_count
    - 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: 4
    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:
    - get_or_create_tls_agent
    - AddLatency
    - LOG
    - agent_type*::merge_global
    - empty
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: Percentile
    signature: Percentile &Percentile::operator<<(int64_t latency)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: for_each
      Src: /src/brpc/src/bvar/detail/percentile.cpp:134,1
    - Dst: value_type::merge
      Src: /src/brpc/src/bvar/detail/percentile.cpp:136,1
    - Dst: bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:137,1
    - Dst: record_num::load
      Src: /src/brpc/src/bvar/detail/percentile.cpp:138,1
    - Dst: std::min<size_t>
      Src: /src/brpc/src/bvar/detail/percentile.cpp:140,1
    - Dst: set_bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.cpp:141,1
    - Dst: bvar::detail::Percentile::reset
      Src: /src/brpc/src/bvar/detail/percentile.cpp:144,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 146
    functionName: bvar::detail::Percentile::reset
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 5
    functionsReached:
    - std::min<size_t>
    - set_bucket_capacity
    - bvar::detail::Percentile::reset
    - value_type::merge
    - record_num::load
    - for_each
    - bucket_capacity
    linkageType: ''
    returnType: Percentile::value_type
    signature: Percentile::value_type Percentile::reset()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.cpp:149,1
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.cpp:153,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:154,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.cpp:157,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 164
    functionName: '& Percentile::operator<<(int64_t value)'
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - empty
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: Percentile
    signature: Percentile & Percentile::operator<<(int64_t value)
  - 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::SeriesBase<T, Op>::append_minute
    - bvar::detail::inplace_divide
    - second
    - call_op_returning_void
    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::SeriesBase<T, Op>::append_hour
    - call_op_returning_void
    - bvar::detail::inplace_divide
    - 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::SeriesBase<T, Op>::append_day
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    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
    - bvar::detail::Series<T, Op>::_data::minute
    - pthread_mutex_lock
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - pthread_mutex_unlock
    - 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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - pthread_mutex_unlock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    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::SeriesBase<T, Op>::append_minute
    - bvar::detail::inplace_divide
    - second
    - call_op_returning_void
    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::SeriesBase<T, Op>::append_hour
    - call_op_returning_void
    - bvar::detail::inplace_divide
    - 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::SeriesBase<T, Op>::append_day
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    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
    - bvar::detail::Series<T, Op>::_data::minute
    - pthread_mutex_lock
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - pthread_mutex_unlock
    - 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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - pthread_mutex_unlock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    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::SeriesBase<T, Op>::append_minute
    - bvar::detail::inplace_divide
    - second
    - call_op_returning_void
    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::SeriesBase<T, Op>::append_hour
    - call_op_returning_void
    - bvar::detail::inplace_divide
    - 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::SeriesBase<T, Op>::append_day
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    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
    - bvar::detail::Series<T, Op>::_data::minute
    - pthread_mutex_lock
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - pthread_mutex_unlock
    - 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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - pthread_mutex_unlock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    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::SeriesBase<T, Op>::append_minute
    - bvar::detail::inplace_divide
    - second
    - call_op_returning_void
    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::SeriesBase<T, Op>::append_hour
    - call_op_returning_void
    - bvar::detail::inplace_divide
    - 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::SeriesBase<T, Op>::append_day
    - bvar::detail::inplace_divide
    - hour
    - call_op_returning_void
    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
    - bvar::detail::Series<T, Op>::_data::minute
    - pthread_mutex_lock
    - CHECK
    - bvar::detail::Series<T, Op>::_data::second
    - pthread_mutex_unlock
    - 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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::c_str
    - bvar::detail::Series<Vector<T,N>, Op>::_data::hour
    - pthread_mutex_lock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::minute
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::detail::Series<Vector<T,N>, Op>::_data::second
    - pthread_mutex_unlock
    - bvar::detail::Series<Vector<T,N>, Op>::_data::day
    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:
    - pthread_create
    - pthread_atfork
    - LOG
    - berror
    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::SetNameSimple
      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::SetNameSimple
    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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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:
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode::next
    - Sampler*::_mutex::lock
    - butil::cpuwide_time_us
    - Sampler*::take_sample
    - LOG
    - butil::LinkNode*::next
    - butil::LinkNode*::RemoveFromList
    - Sampler*::InsertBeforeAsList
    - PassiveStatus<double>::PassiveStatus<double>
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    - bthread::TaskGroup::usleep
    - butil::LinkNode::LinkNode
    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:
    - unlock
    - lock
    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:
    - pthread_create
    - pthread_atfork
    - LOG
    - berror
    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::SetNameSimple
      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::SetNameSimple
    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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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:
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode::next
    - Sampler*::_mutex::lock
    - butil::cpuwide_time_us
    - Sampler*::take_sample
    - LOG
    - butil::LinkNode*::next
    - butil::LinkNode*::RemoveFromList
    - Sampler*::InsertBeforeAsList
    - PassiveStatus<double>::PassiveStatus<double>
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    - bthread::TaskGroup::usleep
    - butil::LinkNode::LinkNode
    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:
    - unlock
    - lock
    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:
    - pthread_create
    - pthread_atfork
    - LOG
    - berror
    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::SetNameSimple
      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::SetNameSimple
    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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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:
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode::next
    - Sampler*::_mutex::lock
    - butil::cpuwide_time_us
    - Sampler*::take_sample
    - LOG
    - butil::LinkNode*::next
    - butil::LinkNode*::RemoveFromList
    - Sampler*::InsertBeforeAsList
    - PassiveStatus<double>::PassiveStatus<double>
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    - bthread::TaskGroup::usleep
    - butil::LinkNode::LinkNode
    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:
    - unlock
    - lock
    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:
    - pthread_create
    - pthread_atfork
    - LOG
    - berror
    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::SetNameSimple
      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::SetNameSimple
    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::cpuwide_time_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::cpuwide_time_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::cpuwide_time_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:
    - bvar::detail::SamplerCollector::reset
    - butil::LinkNode::next
    - Sampler*::_mutex::lock
    - butil::cpuwide_time_us
    - Sampler*::take_sample
    - LOG
    - butil::LinkNode*::next
    - butil::LinkNode*::RemoveFromList
    - Sampler*::InsertBeforeAsList
    - PassiveStatus<double>::PassiveStatus<double>
    - butil::LinkNode*::value
    - Sampler*::_mutex::unlock
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    - bthread::TaskGroup::usleep
    - butil::LinkNode::LinkNode
    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:
    - unlock
    - lock
    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:
    - __builtin_expect
    - ThreadBlock*::at
    - size
    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::vector<ThreadBlock *>::vector<ThreadBlock *>
    - berror
    - std::max
    - CHECK
    - LOG
    - __builtin_expect
    - ThreadBlock::ThreadBlock
    - ThreadBlock*::at
    - butil::thread_atexit
    - size
    - resize
    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:
    - __builtin_expect
    - std::deque<AgentId>::deque<AgentId>
    - 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:
    - __builtin_expect
    - ThreadBlock*::at
    - size
    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::vector<ThreadBlock *>::vector<ThreadBlock *>
    - berror
    - std::max
    - CHECK
    - LOG
    - __builtin_expect
    - ThreadBlock::ThreadBlock
    - ThreadBlock*::at
    - butil::thread_atexit
    - size
    - resize
    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:
    - __builtin_expect
    - std::deque<AgentId>::deque<AgentId>
    - 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:
    - __builtin_expect
    - ThreadBlock*::at
    - size
    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::vector<ThreadBlock *>::vector<ThreadBlock *>
    - berror
    - std::max
    - CHECK
    - LOG
    - __builtin_expect
    - ThreadBlock::ThreadBlock
    - ThreadBlock*::at
    - butil::thread_atexit
    - size
    - resize
    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:
    - __builtin_expect
    - std::deque<AgentId>::deque<AgentId>
    - 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:
    - __builtin_expect
    - ThreadBlock*::at
    - size
    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::vector<ThreadBlock *>::vector<ThreadBlock *>
    - berror
    - std::max
    - CHECK
    - LOG
    - __builtin_expect
    - ThreadBlock::ThreadBlock
    - ThreadBlock*::at
    - butil::thread_atexit
    - size
    - resize
    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:
    - __builtin_expect
    - std::deque<AgentId>::deque<AgentId>
    - 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:44,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - a
    - b
    argTypes:
    - unsigned long
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 48
    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: 58
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 58
    functionName: PercentileInterval::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:70,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:73,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 76
    functionName: PercentileInterval::get_sample_at
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - std::sort
    - CHECK_EQ
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_sample_at(size_t index)
  - BBCount: 27
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bvar/detail/percentile.h:88,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:90,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:103,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:110,1
    - Dst: round_of_expectation
      Src: /src/brpc/src/bvar/detail/percentile.h:122,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/bvar/detail/percentile.h:124,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:127,1
    - Dst: CHECK_LE
      Src: /src/brpc/src/bvar/detail/percentile.h:130,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:135,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:140,1
    - Dst: PercentileInterval::merge
      Src: /src/brpc/src/bvar/detail/percentile.h:146,1
    - Dst: record_num::load
      Src: /src/brpc/src/bvar/detail/percentile.h:147,1
    - Dst: std::min
      Src: /src/brpc/src/bvar/detail/percentile.h:151,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/bvar/detail/percentile.h:151,1
    - Dst: __builtin_memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:154,1
    - Dst: static_cast<float>
      Src: /src/brpc/src/bvar/detail/percentile.h:159,1
    - Dst: __builtin_memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:164,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/bvar/detail/percentile.h:169,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/bvar/detail/percentile.h:170,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:188,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:193,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:197,1
    - Dst: std::swap
      Src: /src/brpc/src/bvar/detail/percentile.h:200,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.h:210,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.h:211,1
    - Dst: PercentileInterval::add32
      Src: /src/brpc/src/bvar/detail/percentile.h:222,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:248,1
    - Dst: memcmp
      Src: /src/brpc/src/bvar/detail/percentile.h:260,1
    - Dst: memset
      Src: /src/brpc/src/bvar/detail/percentile.h:289,1
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:305,1
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:306,1
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:318,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:319,1
    - Dst: PercentileInterval::clear
      Src: /src/brpc/src/bvar/detail/percentile.h:321,1
    - Dst: ceil
      Src: /src/brpc/src/bvar/detail/percentile.h:336,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:347,1
    - Dst: PercentileInterval::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:348,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:348,1
    - Dst: PercentileInterval::get_sample_at
      Src: /src/brpc/src/bvar/detail/percentile.h:350,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:352,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/percentile.h:354,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.h:355,1
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:363,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:364,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:371,1
    - Dst: PercentileInterval::clear
      Src: /src/brpc/src/bvar/detail/percentile.h:382,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:398,1
    - Dst: PercentileInterval::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:399,1
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:417,1
    - Dst: BAIDU_TYPEOF
      Src: /src/brpc/src/bvar/detail/percentile.h:420,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:423,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:424,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:428,1
    - Dst: std::min
      Src: /src/brpc/src/bvar/detail/percentile.h:429,1
    - Dst: round_of_expectation
      Src: /src/brpc/src/bvar/detail/percentile.h:430,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:431,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:432,1
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:441,1
    - Dst: PercentileInterval::describe
      Src: /src/brpc/src/bvar/detail/percentile.h:443,1
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:465,1
    - Dst: PercentileInterval::describe
      Src: /src/brpc/src/bvar/detail/percentile.h:479,1
    - Dst: PercentileInterval::describe
      Src: /src/brpc/src/bvar/detail/percentile.h:485,1
    - Dst: PercentileInterval::merge
      Src: /src/brpc/src/bvar/detail/percentile.h:499,1
    - Dst: detail::AddPercentileSamples
      Src: /src/brpc/src/bvar/detail/percentile.h:522,1
    - Dst: VoidOp
      Src: /src/brpc/src/bvar/detail/percentile.h:524,1
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/detail/percentile.h:529,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/detail/percentile.h:530,1
    - Dst: valid
      Src: /src/brpc/src/bvar/detail/percentile.h:541,1
    - Dst: assign
      Src: /src/brpc/src/bvar/detail/percentile.h:545,1
    - Dst: data
      Src: /src/brpc/src/bvar/detail/percentile.h:545,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/percentile.h:545,1
    - Dst: set_bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.h:577,1
    - Dst: destroy
      Src: /src/brpc/src/bvar/detail/percentile.h:584,1
    - Dst: Op
      Src: /src/brpc/src/bvar/detail/percentile.h:588,1
    - Dst: InvOp
      Src: /src/brpc/src/bvar/detail/percentile.h:589,1
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/detail/percentile.h:593,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/detail/percentile.h:594,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.h:602,1
    - Dst: value_type
      Src: /src/brpc/src/bvar/detail/percentile.h:603,1
    - Dst: assign
      Src: /src/brpc/src/bvar/detail/percentile.h:612,1
    - Dst: data
      Src: /src/brpc/src/bvar/detail/percentile.h:612,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/percentile.h:612,1
    CyclomaticComplexity: 55
    EdgeCount: 55
    ICount: 220
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - PercentileInterval<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 622
    functionName: PercentileInterval::merge
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached:
    - value_type
    - BAIDU_CASSERT
    - get_interval_at
    - std::min
    - LOG
    - Op
    - sampler_type::sampler_type
    - PercentileInterval::add32
    - CHECK_EQ
    - std::swap
    - CHECK_LE
    - memcpy
    - CHECK
    - PercentileInterval::sample_count
    - PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
    - data
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
    - VoidOp
    - butil::fast_rand
    - PercentileInterval::merge
    - static_cast<uint64_t>
    - size
    - InvOp
    - static_cast<uint32_t>
    - butil::fast_rand_less_than
    - destroy
    - PercentileInterval::added_count
    - butil::BaseIteratorRangeToNumberTraits::max
    - assign
    - memset
    - round_of_expectation
    - record_num::load
    - BAIDU_UNLIKELY
    - PercentileInterval::empty
    - memcmp
    - valid
    - __builtin_memcpy
    - PercentileInterval::clear
    - set_bucket_capacity
    - PercentileInterval::describe
    - ceil
    - static_cast<float>
    - schedule
    - PercentileInterval::get_sample_at
    - LOG_EVERY_SECOND
    - detail::AddPercentileSamples
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
    - BAIDU_TYPEOF
    linkageType: ''
    returnType: void
    signature: void merge(const PercentileInterval<size2> &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bvar/detail/percentile.h:135,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bvar/detail/percentile.h:140,1
    - Dst: PercentileInterval::merge
      Src: /src/brpc/src/bvar/detail/percentile.h:146,1
    - Dst: record_num::load
      Src: /src/brpc/src/bvar/detail/percentile.h:147,1
    - Dst: std::min
      Src: /src/brpc/src/bvar/detail/percentile.h:151,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/bvar/detail/percentile.h:151,1
    - Dst: __builtin_memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:154,1
    - Dst: static_cast<float>
      Src: /src/brpc/src/bvar/detail/percentile.h:159,1
    - Dst: __builtin_memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:164,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/bvar/detail/percentile.h:169,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/bvar/detail/percentile.h:170,1
    - Dst: memcpy
      Src: /src/brpc/src/bvar/detail/percentile.h:188,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - _num_samples
    argTypes:
    - rhs
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 132
    functionDepth: 3
    functionLinenumber: 132
    functionLinenumberEnd: 191
    functionName: PercentileInterval::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - static_cast<uint32_t>
    - __builtin_memcpy
    - memcpy
    - butil::fast_rand_less_than
    - std::min
    - static_cast<float>
    - CHECK_EQ
    - record_num::load
    - butil::fast_rand
    - PercentileInterval::merge
    - static_cast<uint64_t>
    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#if WITH_BABYLON_COUNTER\n    size_t merge(const
      babylon::ConcurrentSampler::SampleBucket& bucket) {\n        auto num_added
      = bucket.record_num.load(std::memory_order_acquire);\n        if (num_added
      == 0) {\n            return 0;\n        }\n        auto num_samples = std::min(num_added,
      static_cast<uint32_t>(bucket.capacity));\n        // If there is space, deposit
      directly.\n        if (_num_samples + num_samples <= SAMPLE_SIZE) {\n            __builtin_memcpy(_samples
      + _num_samples, bucket.data,\n                             sizeof(uint32_t)
      * num_samples);\n            _num_samples += num_samples;\n        } else {\n
      \           // Sample probability weighting.\n            float ratio = static_cast<float>(num_samples)
      / num_added;\n            // Try to deposit directly first.\n            if
      (_num_samples < SAMPLE_SIZE) {\n                auto copy_size = SAMPLE_SIZE
      - _num_samples;\n                num_samples -= copy_size;\n                __builtin_memcpy(_samples
      + _num_samples,\n                                 bucket.data + num_samples,
      sizeof(uint32_t) * copy_size);\n            }\n            // The remaining
      samples are stored according to probability.\n            for (size_t i = 0;
      i < num_samples; ++i) {\n                auto index = butil::fast_rand() %\n
      \                   static_cast<uint64_t>((_num_added + i) * ratio + 1);\n                if
      (index < SAMPLE_SIZE) {\n                    _samples[index] = bucket.data[i];\n
      \               }\n            }\n            _num_samples = SAMPLE_SIZE;\n
      \       }\n        _num_added += num_added;\n        return num_added;\n    }\n#endif
      // WITH_BABYLON_COUNTER\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) {\n        CHECK(n <= mutable_rhs._num_samples);\n        _num_added
      += mutable_rhs._num_added;\n        if (_num_samples + n <= SAMPLE_SIZE && n
      == mutable_rhs._num_samples)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bvar/detail/percentile.h:210,1
    - Dst: LOG
      Src: /src/brpc/src/bvar/detail/percentile.h:211,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - x
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 217
    functionName: PercentileInterval::add32
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached:
    - BAIDU_UNLIKELY
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool add32(uint32_t x)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval::add32
      Src: /src/brpc/src/bvar/detail/percentile.h:222,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - x
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 220
    functionDepth: 2
    functionLinenumber: 220
    functionLinenumberEnd: 225
    functionName: PercentileInterval::add64
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileInterval::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: 232
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 232
    functionName: PercentileInterval::clear
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    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: 235
      start: 235
    functionDepth: 0
    functionLinenumber: 235
    functionLinenumberEnd: 235
    functionName: PercentileInterval::full
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    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: 238
      start: 238
    functionDepth: 0
    functionLinenumber: 238
    functionLinenumberEnd: 238
    functionName: PercentileInterval::empty
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    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: 241
      start: 241
    functionDepth: 0
    functionLinenumber: 241
    functionLinenumberEnd: 241
    functionName: PercentileInterval::added_count
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    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: 244
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 244
    functionName: PercentileInterval::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: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:248,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 253
    functionName: PercentileInterval::describe
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached:
    - PercentileInterval::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:260,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileInterval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 261
    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: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: PercentileInterval::PercentileSamples
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    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: 298
      start: 292
    functionDepth: 0
    functionLinenumber: 292
    functionLinenumberEnd: 298
    functionName: ~PercentileSamples()
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~PercentileSamples()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:305,1
    - Dst: PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
      Src: /src/brpc/src/bvar/detail/percentile.h:306,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 311
    functionName: PercentileInterval::PercentileSamples
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileInterval::empty
    - PercentileInterval<SAMPLE_SIZE>::PercentileInterval<SAMPLE_SIZE>
    linkageType: ''
    returnType: void
    signature: void PercentileSamples(const PercentileSamples& rhs)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bvar/detail/percentile.h:318,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:319,1
    - Dst: clear
      Src: /src/brpc/src/bvar/detail/percentile.h:321,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - PercentileSamples
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 324
    functionName: operator=(const PercentileSamples& rhs)
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - clear
    - get_interval_at
    - empty
    linkageType: ''
    returnType: void
    signature: void operator=(const PercentileSamples& rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: ceil
      Src: /src/brpc/src/bvar/detail/percentile.h:336,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:347,1
    - Dst: PercentileInterval::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:348,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:348,1
    - Dst: PercentileInterval::get_sample_at
      Src: /src/brpc/src/bvar/detail/percentile.h:350,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:352,1
    - Dst: CHECK
      Src: /src/brpc/src/bvar/detail/percentile.h:354,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bvar/detail/percentile.h:355,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - ratio
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 335
    functionDepth: 1
    functionLinenumber: 335
    functionLinenumberEnd: 356
    functionName: PercentileInterval::get_number
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileInterval::added_count
    - ceil
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - PercentileInterval::get_sample_at
    - PercentileInterval::sample_count
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t get_number(double ratio)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:363,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:364,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - PercentileSamples<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 360
    functionDepth: 1
    functionLinenumber: 360
    functionLinenumberEnd: 367
    functionName: PercentileInterval::merge
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 2
    functionsReached:
    - get_interval_at
    - PercentileInterval::empty
    linkageType: ''
    returnType: void
    signature: void merge(const PercentileSamples<size2> &rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' bucket'
    - index
    argTypes:
    - babylon::ConcurrentSampler::SampleBucket
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 370
    functionDepth: 0
    functionLinenumber: 370
    functionLinenumberEnd: 372
    functionName: PercentileInterval::merge
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 2
    functionsReached:
    - get_interval_at
    linkageType: ''
    returnType: void
    signature: void merge(const babylon::ConcurrentSampler::SampleBucket& bucket,
      size_t index)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval::clear
      Src: /src/brpc/src/bvar/detail/percentile.h:382,1
    - Dst: PercentileInterval::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:398,1
    - Dst: PercentileInterval::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:399,1
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:417,1
    - Dst: BAIDU_TYPEOF
      Src: /src/brpc/src/bvar/detail/percentile.h:420,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:423,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:424,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
      Src: /src/brpc/src/bvar/detail/percentile.h:428,1
    - Dst: std::min
      Src: /src/brpc/src/bvar/detail/percentile.h:429,1
    - Dst: round_of_expectation
      Src: /src/brpc/src/bvar/detail/percentile.h:430,1
    - Dst: typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
      Src: /src/brpc/src/bvar/detail/percentile.h:431,1
    - Dst: get_interval_at
      Src: /src/brpc/src/bvar/detail/percentile.h:432,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 33
    argCount: 2
    argNames:
    - ' begin'
    - ' end'
    argTypes:
    - Iterator
    - Iterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 377
    functionDepth: 2
    functionLinenumber: 377
    functionLinenumberEnd: 435
    functionName: PercentileInterval::combine_of
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - PercentileInterval::clear
    - get_interval_at
    - PercentileInterval::added_count
    - std::min
    - round_of_expectation
    - PercentileInterval::sample_count
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::sample_count
    - typename butil::add_reference<BAIDU_TYPEOF(*(iter->_intervals[i]))>::type::added_count
    - PercentileInterval::empty
    - BAIDU_TYPEOF
    linkageType: ''
    returnType: void
    signature: void combine_of(const Iterator& begin, const Iterator& end)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PercentileInterval::empty
      Src: /src/brpc/src/bvar/detail/percentile.h:441,1
    - Dst: PercentileInterval::describe
      Src: /src/brpc/src/bvar/detail/percentile.h:443,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 438
    functionDepth: 1
    functionLinenumber: 438
    functionLinenumberEnd: 447
    functionName: PercentileInterval::describe
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 2
    functionsReached:
    - PercentileInterval::describe
    - PercentileInterval::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: 457
      start: 450
    functionDepth: 0
    functionLinenumber: 450
    functionLinenumberEnd: 457
    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:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 463
    functionDepth: 0
    functionLinenumber: 463
    functionLinenumberEnd: 468
    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:479,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - p
    argTypes:
    - std::ostream
    - PercentileInterval<size>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 481
    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:485,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - os
    - p
    argTypes:
    - std::ostream
    - PercentileSamples<size>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 484
    functionDepth: 0
    functionLinenumber: 484
    functionLinenumberEnd: 487
    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:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b1
    - b2
    argTypes:
    - PercentileSamples<size1>
    - PercentileSamples<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 500
    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: PercentileSamples<size1>::merge
      Src: /src/brpc/src/bvar/detail/percentile.h:499,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - b1
    - b2
    argTypes:
    - PercentileSamples<size1>
    - PercentileSamples<size2>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 497
    functionDepth: 0
    functionLinenumber: 497
    functionLinenumberEnd: 500
    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: detail::AddPercentileSamples
      Src: /src/brpc/src/bvar/detail/percentile.h:522,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 523
      start: 521
    functionDepth: 0
    functionLinenumber: 521
    functionLinenumberEnd: 523
    functionName: PercentileInterval::Percentile::op
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - detail::AddPercentileSamples
    linkageType: ''
    returnType: detail::AddPercentileSamples
    signature: detail::AddPercentileSamples op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: VoidOp
      Src: /src/brpc/src/bvar/detail/percentile.h:524,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 524
    functionDepth: 0
    functionLinenumber: 524
    functionLinenumberEnd: 524
    functionName: PercentileInterval::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:529,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/detail/percentile.h:530,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 527
    functionDepth: 0
    functionLinenumber: 527
    functionLinenumberEnd: 533
    functionName: PercentileInterval::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: PercentileInterval::Percentile::valid
      Src: /src/brpc/src/bvar/detail/percentile.h:541,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 541
    functionDepth: 1
    functionLinenumber: 541
    functionLinenumberEnd: 541
    functionName: PercentileInterval::Percentile::valid
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached:
    - PercentileInterval::Percentile::valid
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/bvar/detail/percentile.h:545,1
    - Dst: data
      Src: /src/brpc/src/bvar/detail/percentile.h:545,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/percentile.h:545,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 544
    functionDepth: 0
    functionLinenumber: 544
    functionLinenumberEnd: 546
    functionName: PercentileInterval::Percentile::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - size
    - data
    - assign
    linkageType: ''
    returnType: void
    signature: void set_debug_name(const butil::StringPiece& name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: set_bucket_capacity
      Src: /src/brpc/src/bvar/detail/percentile.h:577,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 564
    functionDepth: 0
    functionLinenumber: 564
    functionLinenumberEnd: 579
    functionName: PercentileInterval::Percentile::Percentile
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - set_bucket_capacity
    linkageType: ''
    returnType: void
    signature: void Percentile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: destroy
      Src: /src/brpc/src/bvar/detail/percentile.h:584,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 586
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 586
    functionName: ~Percentile() noexcept
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - destroy
    linkageType: ''
    returnType: void
    signature: void ~Percentile() noexcept
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Op
      Src: /src/brpc/src/bvar/detail/percentile.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: PercentileInterval::Percentile::op
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - Op
    linkageType: ''
    returnType: Op
    signature: Op op() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: InvOp
      Src: /src/brpc/src/bvar/detail/percentile.h:589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 589
    functionDepth: 0
    functionLinenumber: 589
    functionLinenumberEnd: 589
    functionName: PercentileInterval::Percentile::inv_op
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - InvOp
    linkageType: ''
    returnType: InvOp
    signature: InvOp inv_op() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sampler_type::sampler_type
      Src: /src/brpc/src/bvar/detail/percentile.h:593,1
    - Dst: schedule
      Src: /src/brpc/src/bvar/detail/percentile.h:594,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 597
      start: 591
    functionDepth: 0
    functionLinenumber: 591
    functionLinenumberEnd: 597
    functionName: PercentileInterval::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: LOG_EVERY_SECOND
      Src: /src/brpc/src/bvar/detail/percentile.h:602,1
    - Dst: value_type
      Src: /src/brpc/src/bvar/detail/percentile.h:603,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 601
    functionDepth: 1
    functionLinenumber: 601
    functionLinenumberEnd: 604
    functionName: PercentileInterval::Percentile::get_value
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - value_type
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: value_type
    signature: value_type get_value() const
  - 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: PercentileInterval::Percentile::valid
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool valid() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: assign
      Src: /src/brpc/src/bvar/detail/percentile.h:612,1
    - Dst: data
      Src: /src/brpc/src/bvar/detail/percentile.h:612,1
    - Dst: size
      Src: /src/brpc/src/bvar/detail/percentile.h:612,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 611
    functionDepth: 0
    functionLinenumber: 611
    functionLinenumberEnd: 613
    functionName: PercentileInterval::Percentile::set_debug_name
    functionSourceFile: /src/brpc/src/bvar/detail/percentile.h
    functionUses: 0
    functionsReached:
    - size
    - data
    - assign
    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::cpuwide_time_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:
    - malloc
    - capacity
    - std::max
    - butil::BoundedQueue::push
    - butil::cpuwide_time_us
    - pop
    - elim_push
    - butil::BoundedQueue::swap
    - reset
    - bvar::detail::ReducerSampler::get_value
    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:
    - BAIDU_SCOPED_LOCK
    - top
    - LOG
    - DCHECK
    - inv_op
    - bottom
    - op
    - size
    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:
    - BAIDU_SCOPED_LOCK
    - LOG
    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
    - top
    - LOG
    - std::vector<T>*::push_back
    - bottom
    - size
    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::cpuwide_time_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:
    - malloc
    - capacity
    - std::max
    - butil::BoundedQueue::push
    - butil::cpuwide_time_us
    - pop
    - elim_push
    - butil::BoundedQueue::swap
    - reset
    - bvar::detail::ReducerSampler::get_value
    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:
    - BAIDU_SCOPED_LOCK
    - top
    - LOG
    - DCHECK
    - inv_op
    - bottom
    - op
    - size
    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:
    - BAIDU_SCOPED_LOCK
    - LOG
    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
    - top
    - LOG
    - std::vector<T>*::push_back
    - bottom
    - size
    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::cpuwide_time_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:
    - malloc
    - capacity
    - std::max
    - butil::BoundedQueue::push
    - butil::cpuwide_time_us
    - pop
    - elim_push
    - butil::BoundedQueue::swap
    - reset
    - bvar::detail::ReducerSampler::get_value
    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:
    - BAIDU_SCOPED_LOCK
    - top
    - LOG
    - DCHECK
    - inv_op
    - bottom
    - op
    - size
    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:
    - BAIDU_SCOPED_LOCK
    - LOG
    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
    - top
    - LOG
    - std::vector<T>*::push_back
    - bottom
    - size
    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::cpuwide_time_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:
    - malloc
    - capacity
    - std::max
    - butil::BoundedQueue::push
    - butil::cpuwide_time_us
    - pop
    - elim_push
    - butil::BoundedQueue::swap
    - reset
    - bvar::detail::ReducerSampler::get_value
    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:
    - BAIDU_SCOPED_LOCK
    - top
    - LOG
    - DCHECK
    - inv_op
    - bottom
    - op
    - size
    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:
    - BAIDU_SCOPED_LOCK
    - LOG
    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
    - top
    - LOG
    - std::vector<T>*::push_back
    - bottom
    - size
    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:
    - '& OutputStream::Area::operator=(const OutputStream::~Area'
    - Area::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:
    - std::vector<butil::StringPiece>::const_iterator::size
    - begin
    - end
    - fast_memcpy
    - std::vector<butil::StringPiece>::const_iterator::data
    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:
    - Area::add
    - Next
    - mcpack2pb::OutputStream::set_bad
    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: 2
    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: 2
    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:
    - '& OutputStream::Area::operator=(const OutputStream::~Area'
    - Area::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:
    - std::vector<butil::StringPiece>::const_iterator::size
    - begin
    - end
    - fast_memcpy
    - std::vector<butil::StringPiece>::const_iterator::data
    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:
    - Area::add
    - Next
    - mcpack2pb::OutputStream::set_bad
    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: 2
    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: 2
    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_size
    - mcpack2pb::FieldShortHead::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: 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: 1
    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:
    - good
    - peek_group_info
    - CHECK
    - free
    - std::ostringstream::str
    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:
    - mcpack2pb::size
    - CHECK
    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:
    - mcpack2pb::type2str
    - mcpack2pb::add_pending_nulls
    - CHECK
    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:
    - FixedHeadAndValue::head::set_type
    - OutputStream*::set_bad
    - FixedHeadAndValue::head::set_name_size
    - OutputStream*::append_packed_pod
    - OutputStream*::good
    - mcpack2pb::array_add_item
    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:
    - mcpack2pb::add_primitive
    - OutputStream*::set_bad
    - FieldFixedHead::set_type
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - fast_memcpy
    - mcpack2pb::object_add_item
    - empty
    - OutputStream*::good
    - data
    - mcpack2pb::size
    - FieldFixedHead::set_name_size
    - OutputStream*::skip_continuous
    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:
    - head::set_type
    - OutputStream*::set_bad
    - head::set_name_size
    - OutputStream*::append
    - std::min
    - OutputStream*::good
    - mcpack2pb::array_add_item
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - FieldLongHead::set_type
    - FieldShortHead::set_name_size
    - OutputStream*::set_bad
    - FieldShortHead::set_value_size
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - OutputStream*::good
    - FieldShortHead::set_type
    - data
    - mcpack2pb::size
    - mcpack2pb::array_add_item
    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:
    - FieldLongHead::set_type
    - FieldShortHead::set_name_size
    - mcpack2pb::add_binary_internal
    - OutputStream*::set_bad
    - FieldShortHead::set_value_size
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - mcpack2pb::object_add_item
    - empty
    - OutputStream*::good
    - FieldShortHead::set_type
    - data
    - mcpack2pb::size
    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:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - data
    - peek_group_info
    - size
    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:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - data
    - peek_group_info
    - size
    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:
    - peek_group_info
    - add_binary_internal
    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:
    - peek_group_info
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    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:
    - peek_group_info
    - add_binary_internal
    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:
    - peek_group_info
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    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:
    - OutputStream*::set_bad
    - CHECK
    - std::min
    - OutputStream*::append
    - OutputStream*::good
    - arraysize
    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:
    - mcpack2pb::add_null_internal
    - OutputStream*::set_bad
    - FieldFixedHead::set_type
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - mcpack2pb::object_add_item
    - empty
    - OutputStream*::good
    - data
    - mcpack2pb::size
    - FieldFixedHead::set_name_size
    - OutputStream*::push_back
    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*::set_bad
    - ArrayHead::head::set_value_size
    - OutputStream*::append_packed_pod
    - ArrayHead::head::set_name_size
    - OutputStream*::good
    - ArrayHead::head::set_type
    - mcpack2pb::array_add_item
    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:
    - FieldLongHead::set_type
    - OutputStream*::set_bad
    - OutputStream*::append
    - FieldLongHead::set_value_size
    - OutputStream*::append_packed_pod
    - FieldLongHead::set_name_size
    - mcpack2pb::object_add_item
    - mcpack2pb::add_empty_array_internal
    - empty
    - OutputStream*::good
    - data
    - mcpack2pb::size
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - peek_group_info
    - CHECK
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::push_group_info
    - array_add_item
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - object_add_item
    - CHECK
    - append
    - empty
    - mcpack2pb::Serializer::begin_object_internal
    - mcpack2pb::Serializer::good
    - data
    - mcpack2pb::Serializer::push_group_info
    - peek_group_info
    - size
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - FieldLongHead::set_type
    - ObjectHead::head::set_value_size
    - CHECK
    - assign
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - mcpack2pb::Serializer::good
    - pop_group_info
    - ObjectHead::head::set_name_size
    - peek_group_info
    - ObjectHead::head::set_type
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - get_primitive_type_size
    - peek_group_info
    - CHECK
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::push_group_info
    - array_add_item
    - push_back
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - get_primitive_type_size
    - object_add_item
    - CHECK
    - append
    - empty
    - mcpack2pb::Serializer::good
    - data
    - mcpack2pb::Serializer::push_group_info
    - peek_group_info
    - mcpack2pb::Serializer::begin_array_internal
    - push_back
    - size
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - FieldLongHead::set_type
    - CHECK
    - backup
    - assign
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - mcpack2pb::Serializer::good
    - add_pending_nulls
    - pop_group_info
    - peek_group_info
    - mcpack2pb::Serializer::set_bad
    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_size
    - mcpack2pb::FieldShortHead::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: 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: 1
    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:
    - good
    - peek_group_info
    - CHECK
    - free
    - std::ostringstream::str
    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:
    - mcpack2pb::size
    - CHECK
    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:
    - mcpack2pb::type2str
    - mcpack2pb::add_pending_nulls
    - CHECK
    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:
    - FixedHeadAndValue::head::set_type
    - OutputStream*::set_bad
    - FixedHeadAndValue::head::set_name_size
    - OutputStream*::append_packed_pod
    - OutputStream*::good
    - mcpack2pb::array_add_item
    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:
    - mcpack2pb::add_primitive
    - OutputStream*::set_bad
    - FieldFixedHead::set_type
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - fast_memcpy
    - mcpack2pb::object_add_item
    - empty
    - OutputStream*::good
    - data
    - mcpack2pb::size
    - FieldFixedHead::set_name_size
    - OutputStream*::skip_continuous
    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:
    - head::set_type
    - OutputStream*::set_bad
    - head::set_name_size
    - OutputStream*::append
    - std::min
    - OutputStream*::good
    - mcpack2pb::array_add_item
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitive
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - peek_group_info
    - add_primitives
    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:
    - FieldLongHead::set_type
    - FieldShortHead::set_name_size
    - OutputStream*::set_bad
    - FieldShortHead::set_value_size
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - OutputStream*::good
    - FieldShortHead::set_type
    - data
    - mcpack2pb::size
    - mcpack2pb::array_add_item
    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:
    - FieldLongHead::set_type
    - FieldShortHead::set_name_size
    - mcpack2pb::add_binary_internal
    - OutputStream*::set_bad
    - FieldShortHead::set_value_size
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - mcpack2pb::object_add_item
    - empty
    - OutputStream*::good
    - FieldShortHead::set_type
    - data
    - mcpack2pb::size
    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:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - data
    - peek_group_info
    - size
    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:
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    - data
    - peek_group_info
    - size
    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:
    - peek_group_info
    - add_binary_internal
    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:
    - peek_group_info
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    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:
    - peek_group_info
    - add_binary_internal
    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:
    - peek_group_info
    - butil::BasicStringPiece::BasicStringPiece
    - add_binary_internal
    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:
    - OutputStream*::set_bad
    - CHECK
    - std::min
    - OutputStream*::append
    - OutputStream*::good
    - arraysize
    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:
    - mcpack2pb::add_null_internal
    - OutputStream*::set_bad
    - FieldFixedHead::set_type
    - OutputStream*::append
    - OutputStream*::append_packed_pod
    - mcpack2pb::object_add_item
    - empty
    - OutputStream*::good
    - data
    - mcpack2pb::size
    - FieldFixedHead::set_name_size
    - OutputStream*::push_back
    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*::set_bad
    - ArrayHead::head::set_value_size
    - OutputStream*::append_packed_pod
    - ArrayHead::head::set_name_size
    - OutputStream*::good
    - ArrayHead::head::set_type
    - mcpack2pb::array_add_item
    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:
    - FieldLongHead::set_type
    - OutputStream*::set_bad
    - OutputStream*::append
    - FieldLongHead::set_value_size
    - OutputStream*::append_packed_pod
    - FieldLongHead::set_name_size
    - mcpack2pb::object_add_item
    - mcpack2pb::add_empty_array_internal
    - empty
    - OutputStream*::good
    - data
    - mcpack2pb::size
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - peek_group_info
    - CHECK
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::push_group_info
    - array_add_item
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - object_add_item
    - CHECK
    - append
    - empty
    - mcpack2pb::Serializer::begin_object_internal
    - mcpack2pb::Serializer::good
    - data
    - mcpack2pb::Serializer::push_group_info
    - peek_group_info
    - size
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - FieldLongHead::set_type
    - ObjectHead::head::set_value_size
    - CHECK
    - assign
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - mcpack2pb::Serializer::good
    - pop_group_info
    - ObjectHead::head::set_name_size
    - peek_group_info
    - ObjectHead::head::set_type
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - get_primitive_type_size
    - peek_group_info
    - CHECK
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::push_group_info
    - array_add_item
    - push_back
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - reserve
    - get_primitive_type_size
    - object_add_item
    - CHECK
    - append
    - empty
    - mcpack2pb::Serializer::good
    - data
    - mcpack2pb::Serializer::push_group_info
    - peek_group_info
    - mcpack2pb::Serializer::begin_array_internal
    - push_back
    - size
    - mcpack2pb::Serializer::set_bad
    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:
    - mcpack2pb::Serializer::pushed_bytes
    - FieldLongHead::set_type
    - CHECK
    - backup
    - assign
    - FieldLongHead::set_value_size
    - FieldLongHead::set_name_size
    - mcpack2pb::Serializer::good
    - add_pending_nulls
    - pop_group_info
    - peek_group_info
    - mcpack2pb::Serializer::set_bad
    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: 0
    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: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: mcpack2pb::ObjectIterator::ObjectIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - stream
    - size
    - 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: 0
    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: 0
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: mcpack2pb::ArrayIterator::ArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ArrayIterator::init
    - stream
    - size
    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: 0
    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: 0
    functionLinenumber: 230
    functionLinenumberEnd: 231
    functionName: mcpack2pb::ISOArrayIterator::ISOArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::init
    - stream
    - size
    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_end
    - mcpack2pb::ISOArrayIterator::set_bad
    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: 0
    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: 0
    functionLinenumber: 156
    functionLinenumberEnd: 157
    functionName: mcpack2pb::ObjectIterator::ObjectIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - stream
    - size
    - 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: 0
    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: 0
    functionLinenumber: 196
    functionLinenumberEnd: 197
    functionName: mcpack2pb::ArrayIterator::ArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ArrayIterator::init
    - stream
    - size
    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: 0
    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: 0
    functionLinenumber: 230
    functionLinenumberEnd: 231
    functionName: mcpack2pb::ISOArrayIterator::ISOArrayIterator
    functionSourceFile: /src/brpc/src/mcpack2pb/parser.h
    functionUses: 0
    functionsReached:
    - mcpack2pb::ISOArrayIterator::init
    - stream
    - size
    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_end
    - mcpack2pb::ISOArrayIterator::set_bad
    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:
    - mcpack2pb::StringWrapper::size
    - c_str
    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:
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    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:
    - mcpack2pb::StringWrapper::size
    - c_str
    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:
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    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: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:37,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:37,1
    - Dst: std::string::empty
      Src: /src/brpc/src/mcpack2pb/generator.cpp:38,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:38,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: mcpack2pb::get_idl_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::name
    - google::protobuf::FieldDescriptor*::options
    - butil::EnsureString
    - std::string::empty
    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: 55
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 55
    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:58,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:70,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:70,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:74,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 39
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 81
    functionName: mcpack2pb::field_to_string
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::FieldDescriptor*::enum_type
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::type
    linkageType: ''
    returnType: std::string
    signature: std::string field_to_string(const google::protobuf::FieldDescriptor*
      f)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 105
    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:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 126
    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:131,1
    - Dst: ::toupper
      Src: /src/brpc/src/mcpack2pb/generator.cpp:135,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 139
    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: 159
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 159
    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:163,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 169
    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:173,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:173,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:174,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:176,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:178,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: mcpack2pb::to_cpp_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::size
    - std::string::reserve
    - std::string::append
    - std::string::push_back
    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:188,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:188,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:189,1
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/generator.cpp:201,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:201,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:202,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:208,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: 209
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 209
    functionName: mcpack2pb::generate_declarations
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - begin
    - failed
    - Print
    - end
    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: 214
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 214
    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: 220
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 220
    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: 225
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 225
    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: 246
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 246
    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: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:251,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:252,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:256,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:256,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:260,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:260,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:264,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - d
    argTypes:
    - google::protobuf::Descriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 268
    functionName: mcpack2pb::is_map_entry
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::field_count
    - LOG
    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:274,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:274,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:274,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:275,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:275,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:275,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:276,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:278,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:278,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:279,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:280,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:281,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:282,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:283,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:284,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:285,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:285,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:286,1
    - Dst: TEMPLATE_OF_ADD_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:286,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:288,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:289,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:291,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:291,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:293,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:294,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:297,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:297,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:299,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:300,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:303,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:303,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:305,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:306,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:309,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:309,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:311,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:312,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:315,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:315,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:317,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:318,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:321,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:343,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:343,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:343,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:344,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:347,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:347,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:349,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:350,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:353,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:353,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:355,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:356,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:359,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:381,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:382,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:385,1
    - Dst: butil::EnsureString
      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: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:387,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:387,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:388,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:389,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:399,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:400,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:411,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:412,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:415,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:416,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:475,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:476,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:480,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:481,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:485,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:485,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:486,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:487,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:488,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:489,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:489,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:491,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:492,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:493,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:496,1
    - Dst: TEMPLATE_OF_SET_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:496,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:498,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:499,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:501,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:501,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:503,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:504,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:507,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:507,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:509,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:510,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:513,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:513,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:515,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:516,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:519,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:519,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:521,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:522,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:525,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:525,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:527,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:528,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:531,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:531,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:533,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:534,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:537,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:537,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:539,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:540,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:543,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:549,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:549,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:549,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:550,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:554,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:567,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:568,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:572,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:573,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:580,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:581,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:586,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:592,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:649,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:650,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    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: 651
      start: 270
    functionDepth: 2
    functionLinenumber: 270
    functionLinenumberEnd: 651
    functionName: mcpack2pb::generate_parsing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - insert
    - failed
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - mcpack2pb::is_map_entry
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::FieldDescriptor*::enum_type
    - Print
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::FieldDescriptor*::name
    - mcpack2pb::to_var_name
    - TEMPLATE_OF_ADD_FUNC_BODY
    - TEMPLATE_OF_ADD_FUNC_SIGNATURE
    - mcpack2pb::to_cpp_name
    - mcpack2pb::field_to_string
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::lowercase_name
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::message_type
    - TEMPLATE_OF_SET_FUNC_SIGNATURE
    - google::protobuf::FieldDescriptor*::number
    - butil::string_printf
    - TEMPLATE_OF_SET_FUNC_BODY
    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: 723
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 723
    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: 726
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 726
    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: 755
      start: 728
    functionDepth: 0
    functionLinenumber: 728
    functionLinenumberEnd: 755
    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: 759
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 759
    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: 828
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 828
    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: 831
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 831
    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: 854
      start: 833
    functionDepth: 0
    functionLinenumber: 833
    functionLinenumberEnd: 854
    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: 858
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 858
    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:863,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:863,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:863,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:865,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:866,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:873,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:874,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:878,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:881,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:882,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:883,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:884,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:888,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:890,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:891,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:893,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:895,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:896,1
    - Dst: mcpack2pb::describe_idl_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:897,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:899,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:899,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:900,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:901,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:902,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:902,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:903,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:904,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:908,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:913,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:917,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:921,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:926,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:931,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:932,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:934,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:935,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:939,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:939,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:945,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:945,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:946,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:947,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:950,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:953,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:954,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:955,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:959,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:960,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:962,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:963,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:965,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:968,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:971,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:974,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:977,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:980,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:983,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:986,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:989,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:992,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:993,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:993,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:994,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:995,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1002,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1008,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1009,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1020,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1021,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1023,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1024,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1027,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1029,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1031,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1032,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1033,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1034,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1035,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1036,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1037,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1038,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1039,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1042,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1043,1
    - Dst: mcpack2pb::to_mcpack_typestr_uppercase
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1043,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1044,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1045,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1046,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1048,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1048,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1049,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1050,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1054,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1055,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1056,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1068,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1069,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1070,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1071,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1076,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1082,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1091,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1092,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1094,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1095,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1096,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1096,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1097,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1102,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1107,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1108,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1112,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1113,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1117,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1118,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1122,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1123,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1127,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1128,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1129,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1131,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1132,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1133,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1136,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1136,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1141,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1145,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1146,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1146,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1147,1
    - Dst: TEMPLATE_INNER_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1153,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1153,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1156,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1157,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1161,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1162,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1166,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1167,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1171,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1172,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1173,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1175,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1176,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1177,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1180,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1180,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1185,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1189,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1190,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1193,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1194,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1195,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1199,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1203,1
    - Dst: TEMPLATE_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1209,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1212,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1216,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1220,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1225,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1226,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1228,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1229,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1233,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1239,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1239,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1240,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1241,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1245,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1246,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1251,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1252,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1256,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1257,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1260,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1262,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1266,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1267,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1282,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: 1283
      start: 859
    functionDepth: 2
    functionLinenumber: 859
    functionLinenumberEnd: 1283
    functionName: mcpack2pb::generate_serializing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - insert
    - failed
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - TEMPLATE_SERIALIZE_INTEGRAL
    - mcpack2pb::is_map_entry
    - LOG
    - mcpack2pb::describe_idl_type
    - Outdent
    - google::protobuf::Descriptor*::field_count
    - mcpack2pb::to_mcpack_typestr
    - mcpack2pb::get_idl_name
    - TEMPLATE_SERIALIZE_REPEATED
    - TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
    - Indent
    - google::protobuf::FieldDescriptor*::type
    - Print
    - CHECK
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::FieldDescriptor*::name
    - mcpack2pb::to_var_name
    - mcpack2pb::to_cpp_name
    - std::string::c_str
    - mcpack2pb::field_to_string
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::full_name
    - TEMPLATE_INNER_SERIALIZE_INTEGRAL
    - google::protobuf::FieldDescriptor*::lowercase_name
    - TEMPLATE_INNER_SERIALIZE
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::message_type
    - mcpack2pb::to_mcpack_typestr_uppercase
    - TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
    - TEMPLATE_INNER_SERIALIZE_REPEATED
    - google::protobuf::FieldDescriptor*::number
    - TEMPLATE_SERIALIZE
    - butil::string_printf
    - google::protobuf::FieldDescriptor*::options
    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:1287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1288,1
    - Dst: isdigit
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1289,1
    - Dst: isalpha
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1289,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1290,1
    - Dst: snprintf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1293,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1294,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' fname'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1298
      start: 1285
    functionDepth: 1
    functionLinenumber: 1285
    functionLinenumberEnd: 1298
    functionName: mcpack2pb::protobuf_style_normalize_filename
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - std::string::push_back
    - snprintf
    - mcpack2pb::size
    - isalpha
    - std::string::reserve
    - isdigit
    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:1303,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1303,1
    - Dst: google::protobuf::FileDescriptor*::package
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1303,1
    - Dst: mcpack2pb::protobuf_style_normalize_filename
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1304,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1304,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1304,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1305,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1310,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1311,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1312,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1313,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1316,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1321,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1321,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1322,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1323,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1324,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1326,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1327,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1329,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1337,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1340,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1341,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1342,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1345,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: 1346
      start: 1300
    functionDepth: 2
    functionLinenumber: 1300
    functionLinenumberEnd: 1346
    functionName: mcpack2pb::generate_registration
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::to_cpp_name
    - failed
    - butil::EnsureString
    - Indent
    - google::protobuf::Descriptor*::field
    - Print
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::FileDescriptor*::package
    - google::protobuf::FileDescriptor*::message_type_count
    - google::protobuf::FieldDescriptor*::lowercase_name
    - butil::string_printf
    - Outdent
    - mcpack2pb::to_var_name
    - mcpack2pb::get_idl_name
    - mcpack2pb::protobuf_style_normalize_filename
    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:1360,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1365,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1365,1
    - Dst: std::string::find_last_of
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1366,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1368,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1368,1
    - Dst: std::string::resize
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1371,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1372,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1375,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1376,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1381,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1383,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1385,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1391,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1392,1
    - Dst: generate_parsing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1393,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1394,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1396,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1396,1
    - Dst: generate_serializing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1399,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1400,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1402,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1402,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1405,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1405,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1405,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1406,1
    - Dst: generate_declarations
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1410,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1411,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1413,1
    - Dst: generate_registration
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1416,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1417,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1419,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: 1423
      start: 1356
    functionDepth: 1
    functionLinenumber: 1356
    functionLinenumberEnd: 1423
    functionName: mcpack2pb::McpackToProtobuf::Generate
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - std::string::find_last_of
    - generate_registration
    - generate_parsing
    - std::string::append
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type
    - std::string::resize
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::io::Printer::Print
    - google::protobuf::FileDescriptor*::options
    - google::protobuf::FileDescriptor*::message_type_count
    - butil::string_printf
    - generate_declarations
    - mcpack2pb::to_var_name
    - generate_serializing
    - google::protobuf::compiler::GeneratorContext*::OpenForInsert
    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: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:37,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:37,1
    - Dst: std::string::empty
      Src: /src/brpc/src/mcpack2pb/generator.cpp:38,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:38,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: mcpack2pb::get_idl_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::name
    - google::protobuf::FieldDescriptor*::options
    - butil::EnsureString
    - std::string::empty
    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: 55
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 55
    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:58,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:70,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:70,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:74,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 39
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 81
    functionName: mcpack2pb::field_to_string
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::FieldDescriptor*::message_type
    - google::protobuf::FieldDescriptor*::enum_type
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::type
    linkageType: ''
    returnType: std::string
    signature: std::string field_to_string(const google::protobuf::FieldDescriptor*
      f)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:84,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - f
    argTypes:
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 105
    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:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 32
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 126
    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:131,1
    - Dst: ::toupper
      Src: /src/brpc/src/mcpack2pb/generator.cpp:135,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - type
    - f
    argTypes:
    - ConvertibleIdlType
    - google::protobuf::FieldDescriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 128
    functionDepth: 1
    functionLinenumber: 128
    functionLinenumberEnd: 139
    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: 159
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 159
    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:163,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 169
    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:173,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:173,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:174,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:176,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:178,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' full_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: mcpack2pb::to_cpp_name
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 3
    functionsReached:
    - mcpack2pb::size
    - std::string::reserve
    - std::string::append
    - std::string::push_back
    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:188,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:188,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:189,1
    - Dst: begin
      Src: /src/brpc/src/mcpack2pb/generator.cpp:201,1
    - Dst: end
      Src: /src/brpc/src/mcpack2pb/generator.cpp:201,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:202,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:208,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: 209
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 209
    functionName: mcpack2pb::generate_declarations
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - begin
    - failed
    - Print
    - end
    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: 214
      start: 211
    functionDepth: 0
    functionLinenumber: 211
    functionLinenumberEnd: 214
    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: 220
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 220
    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: 225
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 225
    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: 246
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 246
    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: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:251,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:252,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:256,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:256,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:260,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:260,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:264,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 17
    argCount: 1
    argNames:
    - d
    argTypes:
    - google::protobuf::Descriptor*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 268
    functionName: mcpack2pb::is_map_entry
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 2
    functionsReached:
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::field_count
    - LOG
    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:274,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:274,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:274,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:275,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:275,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:275,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:276,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:278,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:278,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:279,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:280,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:281,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:282,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:283,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:284,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:285,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:285,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:286,1
    - Dst: TEMPLATE_OF_ADD_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:286,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:288,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:289,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:291,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:291,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:293,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:294,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:297,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:297,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:299,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:300,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:303,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:303,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:305,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:306,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:309,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:309,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:311,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:312,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:315,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:315,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:317,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:318,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:321,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:343,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:343,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:343,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:344,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:347,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:347,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:349,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:350,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:353,1
    - Dst: TEMPLATE_OF_ADD_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:353,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:355,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:356,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:359,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:381,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:382,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:385,1
    - Dst: butil::EnsureString
      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: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:386,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:387,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:387,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:388,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:389,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:399,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:400,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:411,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:412,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:415,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:416,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:475,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:476,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:480,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:481,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:485,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:485,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:486,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:487,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:488,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:489,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:489,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:491,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:492,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:493,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:494,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:496,1
    - Dst: TEMPLATE_OF_SET_FUNC_SIGNATURE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:496,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:498,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:499,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:501,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:501,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:503,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:504,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:507,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:507,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:509,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:510,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:513,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:513,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:515,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:516,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:519,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:519,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:521,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:522,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:525,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:525,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:527,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:528,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:531,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:531,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:533,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:534,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:537,1
    - Dst: TEMPLATE_OF_SET_FUNC_BODY
      Src: /src/brpc/src/mcpack2pb/generator.cpp:537,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:539,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:540,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:543,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:549,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:549,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:549,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:550,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:554,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:567,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:568,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:571,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:572,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:573,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:580,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:581,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:586,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:592,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:649,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:650,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    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: 651
      start: 270
    functionDepth: 2
    functionLinenumber: 270
    functionLinenumberEnd: 651
    functionName: mcpack2pb::generate_parsing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - insert
    - failed
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - mcpack2pb::is_map_entry
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::FieldDescriptor*::enum_type
    - Print
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::FieldDescriptor*::name
    - mcpack2pb::to_var_name
    - TEMPLATE_OF_ADD_FUNC_BODY
    - TEMPLATE_OF_ADD_FUNC_SIGNATURE
    - mcpack2pb::to_cpp_name
    - mcpack2pb::field_to_string
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::lowercase_name
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::message_type
    - TEMPLATE_OF_SET_FUNC_SIGNATURE
    - google::protobuf::FieldDescriptor*::number
    - butil::string_printf
    - TEMPLATE_OF_SET_FUNC_BODY
    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: 723
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 723
    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: 726
      start: 723
    functionDepth: 0
    functionLinenumber: 723
    functionLinenumberEnd: 726
    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: 755
      start: 728
    functionDepth: 0
    functionLinenumber: 728
    functionLinenumberEnd: 755
    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: 759
      start: 756
    functionDepth: 0
    functionLinenumber: 756
    functionLinenumberEnd: 759
    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: 828
      start: 761
    functionDepth: 0
    functionLinenumber: 761
    functionLinenumberEnd: 828
    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: 831
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 831
    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: 854
      start: 833
    functionDepth: 0
    functionLinenumber: 833
    functionLinenumberEnd: 854
    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: 858
      start: 855
    functionDepth: 0
    functionLinenumber: 855
    functionLinenumberEnd: 858
    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:863,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:863,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:863,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:864,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:865,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:866,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:873,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:874,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:878,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:881,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:882,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:883,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:884,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:888,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:890,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:891,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:893,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:895,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:896,1
    - Dst: mcpack2pb::describe_idl_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:897,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:899,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:899,1
    - Dst: mcpack2pb::field_to_string
      Src: /src/brpc/src/mcpack2pb/generator.cpp:900,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:901,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:902,1
    - Dst: google::protobuf::FieldDescriptor*::number
      Src: /src/brpc/src/mcpack2pb/generator.cpp:902,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:903,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:904,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:908,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:913,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:917,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:921,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:926,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:931,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:932,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:934,1
    - Dst: TEMPLATE_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:935,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:939,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:939,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:945,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:945,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:946,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:947,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:950,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:951,1
    - Dst: mcpack2pb::to_cpp_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:952,1
    - Dst: mcpack2pb::is_map_entry
      Src: /src/brpc/src/mcpack2pb/generator.cpp:953,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:954,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:955,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:959,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:960,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:962,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:963,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:965,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:968,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:971,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:974,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:977,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:980,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:983,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:986,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:989,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:992,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:993,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:993,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:994,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:995,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1002,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1008,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1009,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1020,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1021,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1023,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1024,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1027,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1029,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1031,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1032,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1033,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1034,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1035,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1036,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1037,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1038,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1039,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1042,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1043,1
    - Dst: mcpack2pb::to_mcpack_typestr_uppercase
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1043,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1044,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1045,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1046,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1048,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1048,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1049,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1050,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1053,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1054,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1055,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1056,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1068,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1069,1
    - Dst: google::protobuf::FieldDescriptor*::options
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1070,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1071,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1076,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1082,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1091,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1092,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1094,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1095,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1096,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1096,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1097,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1101,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1102,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1107,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1108,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1112,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1113,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1117,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1118,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1122,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1123,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1127,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1128,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1129,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1131,1
    - Dst: TEMPLATE_INNER_SERIALIZE_REPEATED
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1132,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1133,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1136,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1136,1
    - Dst: CHECK
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1141,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1145,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1146,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1146,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1147,1
    - Dst: TEMPLATE_INNER_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1153,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1153,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1156,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1157,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1161,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1162,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1166,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1167,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1171,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1172,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1173,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1175,1
    - Dst: TEMPLATE_INNER_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1176,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1177,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1180,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1180,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1185,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1189,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1190,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1193,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1194,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1195,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1199,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1203,1
    - Dst: TEMPLATE_SERIALIZE_INTEGRAL
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1209,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1212,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1216,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1220,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1225,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1226,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1228,1
    - Dst: TEMPLATE_SERIALIZE
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1229,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1233,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1239,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1239,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1240,1
    - Dst: mcpack2pb::to_mcpack_typestr
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1241,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1244,1
    - Dst: insert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1245,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1246,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1251,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1252,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1256,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1257,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1260,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1262,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1266,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1267,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1282,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: 1283
      start: 859
    functionDepth: 2
    functionLinenumber: 859
    functionLinenumberEnd: 1283
    functionName: mcpack2pb::generate_serializing
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - insert
    - failed
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - TEMPLATE_SERIALIZE_INTEGRAL
    - mcpack2pb::is_map_entry
    - LOG
    - mcpack2pb::describe_idl_type
    - Outdent
    - google::protobuf::Descriptor*::field_count
    - mcpack2pb::to_mcpack_typestr
    - mcpack2pb::get_idl_name
    - TEMPLATE_SERIALIZE_REPEATED
    - TEMPLATE_INNER_SERIALIZE_REPEATED_INTEGRAL
    - Indent
    - google::protobuf::FieldDescriptor*::type
    - Print
    - CHECK
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::FieldDescriptor*::name
    - mcpack2pb::to_var_name
    - mcpack2pb::to_cpp_name
    - std::string::c_str
    - mcpack2pb::field_to_string
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::full_name
    - TEMPLATE_INNER_SERIALIZE_INTEGRAL
    - google::protobuf::FieldDescriptor*::lowercase_name
    - TEMPLATE_INNER_SERIALIZE
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::message_type
    - mcpack2pb::to_mcpack_typestr_uppercase
    - TEMPLATE_SERIALIZE_REPEATED_INTEGRAL
    - TEMPLATE_INNER_SERIALIZE_REPEATED
    - google::protobuf::FieldDescriptor*::number
    - TEMPLATE_SERIALIZE
    - butil::string_printf
    - google::protobuf::FieldDescriptor*::options
    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:1287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1287,1
    - Dst: mcpack2pb::size
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1288,1
    - Dst: isdigit
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1289,1
    - Dst: isalpha
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1289,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1290,1
    - Dst: snprintf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1293,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1294,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' fname'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1298
      start: 1285
    functionDepth: 1
    functionLinenumber: 1285
    functionLinenumberEnd: 1298
    functionName: mcpack2pb::protobuf_style_normalize_filename
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 1
    functionsReached:
    - std::string::append
    - std::string::push_back
    - snprintf
    - mcpack2pb::size
    - isalpha
    - std::string::reserve
    - isdigit
    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:1303,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1303,1
    - Dst: google::protobuf::FileDescriptor*::package
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1303,1
    - Dst: mcpack2pb::protobuf_style_normalize_filename
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1304,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1304,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1304,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1305,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1310,1
    - Dst: Indent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1311,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1312,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1313,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1314,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1316,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1321,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1321,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1322,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1323,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1324,1
    - Dst: mcpack2pb::get_idl_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1326,1
    - Dst: google::protobuf::FieldDescriptor*::lowercase_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1327,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1329,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1337,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1340,1
    - Dst: Outdent
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1341,1
    - Dst: Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1342,1
    - Dst: failed
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1345,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: 1346
      start: 1300
    functionDepth: 2
    functionLinenumber: 1300
    functionLinenumberEnd: 1346
    functionName: mcpack2pb::generate_registration
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::to_cpp_name
    - failed
    - butil::EnsureString
    - Indent
    - google::protobuf::Descriptor*::field
    - Print
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::FileDescriptor*::package
    - google::protobuf::FileDescriptor*::message_type_count
    - google::protobuf::FieldDescriptor*::lowercase_name
    - butil::string_printf
    - Outdent
    - mcpack2pb::to_var_name
    - mcpack2pb::get_idl_name
    - mcpack2pb::protobuf_style_normalize_filename
    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:1360,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1365,1
    - Dst: google::protobuf::FileDescriptor*::name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1365,1
    - Dst: std::string::find_last_of
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1366,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1368,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1368,1
    - Dst: std::string::resize
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1371,1
    - Dst: std::string::append
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1372,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1375,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1376,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1381,1
    - Dst: google::protobuf::compiler::GeneratorContext*::OpenForInsert
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1383,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1385,1
    - Dst: google::protobuf::FileDescriptor*::message_type_count
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1391,1
    - Dst: google::protobuf::FileDescriptor*::message_type
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1392,1
    - Dst: generate_parsing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1393,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1394,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1396,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1396,1
    - Dst: generate_serializing
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1399,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1400,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1402,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1402,1
    - Dst: mcpack2pb::to_var_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1405,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1405,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1405,1
    - Dst: google::protobuf::io::Printer::Print
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1406,1
    - Dst: generate_declarations
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1410,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1411,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1413,1
    - Dst: generate_registration
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1416,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1417,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/mcpack2pb/generator.cpp:1419,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: 1423
      start: 1356
    functionDepth: 1
    functionLinenumber: 1356
    functionLinenumberEnd: 1423
    functionName: mcpack2pb::McpackToProtobuf::Generate
    functionSourceFile: /src/brpc/src/mcpack2pb/generator.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - std::string::find_last_of
    - generate_registration
    - generate_parsing
    - std::string::append
    - google::protobuf::FileDescriptor*::name
    - google::protobuf::FileDescriptor*::message_type
    - std::string::resize
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::io::Printer::Print
    - google::protobuf::FileDescriptor*::options
    - google::protobuf::FileDescriptor*::message_type_count
    - butil::string_printf
    - generate_declarations
    - mcpack2pb::to_var_name
    - generate_serializing
    - google::protobuf::compiler::GeneratorContext*::OpenForInsert
    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:1428,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - argc
    - argv
    argTypes:
    - int
    - char*[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1429
      start: 1426
    functionDepth: 0
    functionLinenumber: 1426
    functionLinenumberEnd: 1429
    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:
    - init
    - butil::FlatMap<std::string, MessageHandler>::string, MessageHandler>
    - 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:
    - exit
    - seek
    - LOG
    - pthread_once
    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:
    - init
    - butil::FlatMap<std::string, MessageHandler>::string, MessageHandler>
    - 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:
    - exit
    - seek
    - LOG
    - pthread_once
    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_size
    - mcpack2pb::FieldFixedHead::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: 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_offset
    - mcpack2pb::FieldFixedHead::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: 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_size
    - mcpack2pb::FieldShortHead::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: 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:
    - popped_bytes
    - FieldLongHead::full_size
    - FieldFixedHead::full_size
    - ref_cut
    - CHECK
    - FieldShortHead::type
    - FieldShortHead::value_size
    - FieldFixedHead::value_size
    - cut_packed_pod
    - FieldShortHead::full_size
    - FieldShortHead::name_size
    - left_size
    - name::empty
    - peek1
    - FieldFixedHead::name_size
    - set_bad
    - set_end
    - value::set
    - FieldLongHead::name_size
    - FieldLongHead::type
    - value::size
    - FieldFixedHead::type
    - name::remove_suffix
    - FieldLongHead::value_size
    - popn
    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:
    - set
    - popped_bytes
    - FieldLongHead::full_size
    - FieldFixedHead::full_size
    - CHECK
    - FieldShortHead::type
    - FieldShortHead::value_size
    - FieldFixedHead::value_size
    - cut_packed_pod
    - FieldShortHead::full_size
    - size
    - FieldShortHead::name_size
    - left_size
    - peek1
    - FieldFixedHead::name_size
    - set_bad
    - set_end
    - FieldLongHead::name_size
    - FieldLongHead::type
    - FieldFixedHead::type
    - FieldLongHead::value_size
    - popn
    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
    - FieldLongHead::type
    - mcpack2pb::type2str
    - CHECK
    - InputStream*::cut_packed_pod
    - FieldLongHead::value_size
    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:
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - cut_packed_pod
    - 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
    - set_bad
    - cut_packed_pod
    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:
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - cut_packed_pod
    - 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:
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - cut_packed_pod
    - 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
    - set_bad
    - cut_packed_pod
    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
    - set_bad
    - cut_packed_pod
    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
    - set_bad
    - cut_packed_pod
    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:
    - popn
    - cutn
    - CHECK
    - std::string*::resize
    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
    - CHECK
    - std::string*::resize
    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_size
    - mcpack2pb::FieldFixedHead::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: 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_offset
    - mcpack2pb::FieldFixedHead::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: 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_size
    - mcpack2pb::FieldShortHead::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: 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:
    - popped_bytes
    - FieldLongHead::full_size
    - FieldFixedHead::full_size
    - ref_cut
    - CHECK
    - FieldShortHead::type
    - FieldShortHead::value_size
    - FieldFixedHead::value_size
    - cut_packed_pod
    - FieldShortHead::full_size
    - FieldShortHead::name_size
    - left_size
    - name::empty
    - peek1
    - FieldFixedHead::name_size
    - set_bad
    - set_end
    - value::set
    - FieldLongHead::name_size
    - FieldLongHead::type
    - value::size
    - FieldFixedHead::type
    - name::remove_suffix
    - FieldLongHead::value_size
    - popn
    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:
    - set
    - popped_bytes
    - FieldLongHead::full_size
    - FieldFixedHead::full_size
    - CHECK
    - FieldShortHead::type
    - FieldShortHead::value_size
    - FieldFixedHead::value_size
    - cut_packed_pod
    - FieldShortHead::full_size
    - size
    - FieldShortHead::name_size
    - left_size
    - peek1
    - FieldFixedHead::name_size
    - set_bad
    - set_end
    - FieldLongHead::name_size
    - FieldLongHead::type
    - FieldFixedHead::type
    - FieldLongHead::value_size
    - popn
    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
    - FieldLongHead::type
    - mcpack2pb::type2str
    - CHECK
    - InputStream*::cut_packed_pod
    - FieldLongHead::value_size
    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:
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - cut_packed_pod
    - 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
    - set_bad
    - cut_packed_pod
    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:
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::GetJsService::jquery_min
    - cut_packed_pod
    - 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:
    - CHECK
    - butil::BaseIteratorRangeToNumberTraits::max
    - type2str
    - cut_packed_pod
    - 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
    - set_bad
    - cut_packed_pod
    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
    - set_bad
    - cut_packed_pod
    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
    - set_bad
    - cut_packed_pod
    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:
    - popn
    - cutn
    - CHECK
    - std::string*::resize
    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
    - CHECK
    - std::string*::resize
    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:
    - CHECK
    - cut_packed_pod
    - popped_bytes
    - 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:
    - mcpack2pb::ArrayIterator::set_bad
    - CHECK
    - cut_packed_pod
    - popped_bytes
    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:
    - get_primitive_type_size
    - CHECK
    - mcpack2pb::ISOArrayIterator::set_bad
    - type2str
    - cut_packed_pod
    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:
    - CHECK
    - std::min
    - cutn
    - set_bad
    - set_end
    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 uint16_t*>
    - static_cast<const int8_t*>
    - static_cast<const int16_t*>
    - static_cast<const uint8_t*>
    - static_cast<const int32_t*>
    - static_cast<const uint32_t*>
    - static_cast<const uint64_t*>
    - static_cast<const int64_t*>
    - static_cast<const bool*>
    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 double*>
    - static_cast<const float*>
    - T
    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:
    - CHECK
    - cut_packed_pod
    - popped_bytes
    - 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:
    - mcpack2pb::ArrayIterator::set_bad
    - CHECK
    - cut_packed_pod
    - popped_bytes
    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:
    - get_primitive_type_size
    - CHECK
    - mcpack2pb::ISOArrayIterator::set_bad
    - type2str
    - cut_packed_pod
    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:
    - CHECK
    - std::min
    - cutn
    - set_bad
    - set_end
    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 uint16_t*>
    - static_cast<const int8_t*>
    - static_cast<const int16_t*>
    - static_cast<const uint8_t*>
    - static_cast<const int32_t*>
    - static_cast<const uint32_t*>
    - static_cast<const uint64_t*>
    - static_cast<const int64_t*>
    - static_cast<const bool*>
    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 double*>
    - static_cast<const float*>
    - T
    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: 50
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 50
    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: 62
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 62
    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:89,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:90,1
    - Dst: IsBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:91,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:92,1
    - Dst: GetBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:92,1
    - Dst: IsInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:93,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:94,1
    - Dst: GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:94,1
    - Dst: IsUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:95,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: GetUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: IsInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:97,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:98,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:98,1
    - Dst: IsUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:99,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:100,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:100,1
    - Dst: IsDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:101,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:102,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:102,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:104,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:105,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:105,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:106,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:107,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:108,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:109,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:110,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 2
    argNames:
    - ' value'
    - output
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 112
    functionName: json2pb::string_append_value
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - GetBool
    - butil::string_appendf
    - GetUint64
    - IsUint64
    - IsNull
    - IsObject
    - GetString
    - IsString
    - IsUint
    - GetDouble
    - GetUint
    - IsArray
    - IsInt
    - std::string*::append
    - IsBool
    - std::string*::push_back
    - GetInt
    - GetStringLength
    - GetInt64
    - IsDouble
    - IsInt64
    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_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:122,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:122,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:124,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:125,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:127,1
    - Dst: json2pb::string_append_value
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:128,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:129,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:131,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:131,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    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: 137
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 137
    functionName: json2pb::value_invalid
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - std::string*::append
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::FieldDescriptor*::full_name
    - json2pb::string_append_value
    - google::protobuf::FieldDescriptor*::is_repeated
    - 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:149,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:151,1
    - Dst: std::numeric_limits<T>::quiet_NaN
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:152,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:156,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:157,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:161,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:162,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:165,1
    - Dst: typeid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:165,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: 166
      start: 140
    functionDepth: 3
    functionLinenumber: 140
    functionLinenumberEnd: 166
    functionName: json2pb::convert_string_to_double_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - std::numeric_limits<T>::quiet_NaN
    - json2pb::value_invalid
    - typeid
    - strcasecmp
    - std::numeric_limits<T>::infinity
    - GetString
    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:173,1
    - Dst: google::protobuf::Reflection*::AddFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:175,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:175,1
    - Dst: google::protobuf::Reflection*::SetFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:177,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:177,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:179,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:180,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:187,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: 190
      start: 168
    functionDepth: 4
    functionLinenumber: 168
    functionLinenumberEnd: 190
    functionName: json2pb::convert_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - GetDouble
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::AddFloat
    - json2pb::value_invalid
    - IsNumber
    - IsString
    - google::protobuf::Reflection*::SetFloat
    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:197,1
    - Dst: google::protobuf::Reflection*::AddDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:199,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:199,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:201,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:201,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:203,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:204,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:211,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: 214
      start: 192
    functionDepth: 4
    functionLinenumber: 192
    functionLinenumberEnd: 214
    functionName: json2pb::convert_double_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - GetDouble
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::AddDouble
    - json2pb::value_invalid
    - google::protobuf::Reflection*::SetDouble
    - IsNumber
    - IsString
    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:222,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:223,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:223,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:224,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:225,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:225,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:228,1
    - Dst: google::protobuf::Reflection*::AddEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:231,1
    - Dst: google::protobuf::Reflection*::SetEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:233,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: 236
      start: 216
    functionDepth: 3
    functionLinenumber: 216
    functionLinenumberEnd: 236
    functionName: json2pb::convert_enum_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Reflection*::AddEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
    - google::protobuf::Reflection*::SetEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
    - json2pb::value_invalid
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
    - google::protobuf::FieldDescriptor*::enum_type
    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:245,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:247,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:247,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:249,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:249,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:251,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:252,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:252,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:252,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:255,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:257,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:260,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: 263
      start: 238
    functionDepth: 3
    functionLinenumber: 238
    functionLinenumberEnd: 263
    functionName: json2pb::convert_int64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Reflection*::AddInt64
    - json2pb::value_invalid
    - GetStringLength
    - GetInt64
    - GetString
    - IsString
    - google::protobuf::Reflection*::SetInt64
    - butil::StringToInt64
    - IsInt64
    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:272,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:274,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:274,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:276,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:276,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:278,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:279,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:279,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:279,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:282,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:284,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:287,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: 290
      start: 265
    functionDepth: 3
    functionLinenumber: 265
    functionLinenumberEnd: 290
    functionName: json2pb::convert_uint64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Reflection*::SetUInt64
    - GetUint64
    - google::protobuf::Reflection*::AddUInt64
    - json2pb::value_invalid
    - GetStringLength
    - IsUint64
    - GetString
    - IsString
    - butil::StringToUint64
    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: 319
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 319
    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:327,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:328,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:335,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:336,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:337,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:338,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:338,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:343,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:344,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:361,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:362,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:363,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:367,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:368,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:372,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:377,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:384,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:385,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:389,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:394,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:401,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:402,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:405,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:410,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:417,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:418,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:421,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:426,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:433,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:434,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:437,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:438,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:438,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:439,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:442,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: google::protobuf::Reflection*::AddString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:448,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:451,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:452,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:452,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:453,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:456,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:457,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:457,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:462,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:467,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:468,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:471,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:476,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:483,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:484,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:487,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:488,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:489,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:494,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:495,1
    CyclomaticComplexity: 47
    EdgeCount: 47
    ICount: 120
    argCount: 6
    argNames:
    - ' value'
    - field
    - message
    - ' options'
    - err
    - depth
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 321
    functionDepth: 5
    functionLinenumber: 321
    functionLinenumberEnd: 501
    functionName: json2pb::JsonValueToProtoField
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - json2pb::convert_int64_type
    - google::protobuf::FieldDescriptor*::is_required
    - json2pb::convert_enum_type
    - google::protobuf::Reflection*::AddString
    - json2pb::convert_float_type
    - google::protobuf::Message*::GetReflection
    - json2pb::convert_uint64_type
    - J2PCHECKTYPE
    - google::protobuf::FieldDescriptor*::type
    - IsNull
    - J2PERROR_WITH_PB
    - google::protobuf::FieldDescriptor*::cpp_type
    - GetString
    - google::protobuf::Reflection*::MutableMessage
    - CASE_FIELD_TYPE
    - Size
    - std::string::c_str
    - google::protobuf::FieldDescriptor*::full_name
    - IsArray
    - json2pb::JsonValueToProtoMessage
    - google::protobuf::FieldDescriptor*::is_repeated
    - J2PERROR
    - butil::Base64Decode
    - json2pb::convert_double_type
    - GetStringLength
    - google::protobuf::Reflection*::AddMessage
    - google::protobuf::Reflection*::SetString
    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,\n                                  int depth)"
  - 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: 361
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 361
    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:509,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:510,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:511,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:511,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:515,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:517,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:519,1
    - Dst: MemberBegin
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:522,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:522,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:523,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:524,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:525,1
    - Dst: std::string
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:526,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:526,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:527,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:528,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 6
    argNames:
    - ' value'
    - map_desc
    - message
    - ' options'
    - err
    - depth
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 503
    functionDepth: 6
    functionLinenumber: 503
    functionLinenumberEnd: 533
    functionName: json2pb::JsonMapToProtoMap
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
    - google::protobuf::FieldDescriptor*::full_name
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
    - std::string
    - MemberBegin
    - json2pb::JsonValueToProtoField
    - IsObject
    - MemberEnd
    - google::protobuf::FieldDescriptor*::message_type
    - J2PERROR
    - google::protobuf::Message*::GetReflection
    - google::protobuf::Reflection*::AddMessage
    - 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,\n                       int
      depth)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:541,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:544,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:545,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:546,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:547,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:551,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:554,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:555,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:557,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:561,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:561,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:565,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:567,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:571,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:572,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:572,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:575,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:576,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:576,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:577,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:577,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:580,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:586,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:589,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:589,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:590,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:596,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:597,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:598,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:598,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:598,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:606,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:606,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:608,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:617,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:617,1
    - Dst: json2pb::JsonMapToProtoMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:619,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:623,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 57
    argCount: 5
    argNames:
    - ' json_value'
    - message
    - ' options'
    - err
    - depth
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 535
    functionDepth: 7
    functionLinenumber: 535
    functionLinenumberEnd: 629
    functionName: json2pb::JsonValueToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - json2pb::IsProtobufMap
    - std::vector::size
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Message*::GetDescriptor
    - google::protobuf::Message*::GetReflection
    - json2pb::JsonMapToProtoMap
    - std::vector::reserve
    - J2PERROR_WITH_PB
    - google::protobuf::Descriptor*::extension_range
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - std::vector::front
    - google::protobuf::FieldDescriptor*::name
    - json2pb::JsonValueToProtoField
    - IsObject
    - data
    - MemberEnd
    - FindMember
    - std::vector::push_back
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - IsArray
    - json2pb::decode_name
    - J2PERROR
    - google::protobuf::Descriptor*::extension_range_count
    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                             int depth)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:637,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:641,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:641,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:643,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:646,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:646,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:648,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:650,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:656,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:656,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:656,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:659,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: 660
      start: 631
    functionDepth: 8
    functionLinenumber: 631
    functionLinenumberEnd: 660
    functionName: json2pb::JsonToProtoMessageInline
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 0
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - std::string*::clear
    - J2PERROR_WITH_PB
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - json2pb::JsonValueToProtoMessage
    - c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    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:667,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: 668
      start: 662
    functionDepth: 9
    functionLinenumber: 662
    functionLinenumberEnd: 668
    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:676,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: 677
      start: 670
    functionDepth: 1
    functionLinenumber: 670
    functionLinenumberEnd: 677
    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:685,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:689,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:691,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:694,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:696,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:698,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:704,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:704,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:704,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:707,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: 708
      start: 679
    functionDepth: 8
    functionLinenumber: 679
    functionLinenumberEnd: 708
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - std::string*::clear
    - J2PERROR_WITH_PB
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - json2pb::JsonValueToProtoMessage
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    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:713,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:713,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: 714
      start: 710
    functionDepth: 9
    functionLinenumber: 710
    functionLinenumberEnd: 714
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - Json2PbOptions
    - json2pb::JsonToProtoMessageInline
    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:723,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:723,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: 724
      start: 720
    functionDepth: 9
    functionLinenumber: 720
    functionLinenumberEnd: 724
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 52
    functionsReached:
    - Json2PbOptions
    - json2pb::JsonToProtoMessageInline
    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:729,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:729,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: 730
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 53
    functionsReached:
    - Json2PbOptions
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream
      *stream,\n                        google::protobuf::Message* message,\n                        std::string*
      error)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::json::JsonStreamToMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:737,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:738,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:740,1
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:744,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:745,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:746,1
    - Dst: google::protobuf::util::JsonToBinaryStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:748,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:749,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:750,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:752,1
    - Dst: google::protobuf::Message*::ParseFromCodedStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:759,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 4
    argNames:
    - json
    - message
    - ' options'
    - error
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - ProtoJson2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 732
    functionDepth: 1
    functionLinenumber: 732
    functionLinenumberEnd: 765
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 6
    functionsReached:
    - auto::ok
    - google::protobuf::json::JsonStreamToMessage
    - auto::ToString
    - json2pb::GetTypeUrl
    - google::protobuf::Message*::ParseFromCodedStream
    - TypeResolverUniqueptr::get
    - butil::IOBuf::IOBuf
    - json2pb::GetTypeResolver
    - 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:769,1
    - Dst: size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:769,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:770,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: 771
      start: 767
    functionDepth: 1
    functionLinenumber: 767
    functionLinenumberEnd: 771
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 7
    functionsReached:
    - size
    - data
    - json2pb::ProtoJsonToProtoMessage
    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:89,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:90,1
    - Dst: IsBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:91,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:92,1
    - Dst: GetBool
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:92,1
    - Dst: IsInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:93,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:94,1
    - Dst: GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:94,1
    - Dst: IsUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:95,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: GetUint
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:96,1
    - Dst: IsInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:97,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:98,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:98,1
    - Dst: IsUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:99,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:100,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:100,1
    - Dst: IsDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:101,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:102,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:102,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:104,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:105,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:105,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:106,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:107,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:108,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:109,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:110,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 2
    argNames:
    - ' value'
    - output
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 112
    functionName: json2pb::string_append_value
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - GetBool
    - butil::string_appendf
    - GetUint64
    - IsUint64
    - IsNull
    - IsObject
    - GetString
    - IsString
    - IsUint
    - GetDouble
    - GetUint
    - IsArray
    - IsInt
    - std::string*::append
    - IsBool
    - std::string*::push_back
    - GetInt
    - GetStringLength
    - GetInt64
    - IsDouble
    - IsInt64
    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_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:122,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:122,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:124,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:125,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:127,1
    - Dst: json2pb::string_append_value
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:128,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:129,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:131,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:131,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    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: 137
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 137
    functionName: json2pb::value_invalid
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 6
    functionsReached:
    - butil::string_appendf
    - std::string*::append
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::FieldDescriptor*::full_name
    - json2pb::string_append_value
    - google::protobuf::FieldDescriptor*::is_repeated
    - 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:149,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:151,1
    - Dst: std::numeric_limits<T>::quiet_NaN
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:152,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:156,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:157,1
    - Dst: strcasecmp
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:161,1
    - Dst: std::numeric_limits<T>::infinity
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:162,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:165,1
    - Dst: typeid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:165,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: 166
      start: 140
    functionDepth: 3
    functionLinenumber: 140
    functionLinenumberEnd: 166
    functionName: json2pb::convert_string_to_double_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 2
    functionsReached:
    - std::numeric_limits<T>::quiet_NaN
    - json2pb::value_invalid
    - typeid
    - strcasecmp
    - std::numeric_limits<T>::infinity
    - GetString
    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:173,1
    - Dst: google::protobuf::Reflection*::AddFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:175,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:175,1
    - Dst: google::protobuf::Reflection*::SetFloat
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:177,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:177,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:179,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:180,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:187,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: 190
      start: 168
    functionDepth: 4
    functionLinenumber: 168
    functionLinenumberEnd: 190
    functionName: json2pb::convert_float_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - GetDouble
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::AddFloat
    - json2pb::value_invalid
    - IsNumber
    - IsString
    - google::protobuf::Reflection*::SetFloat
    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:197,1
    - Dst: google::protobuf::Reflection*::AddDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:199,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:199,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:201,1
    - Dst: GetDouble
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:201,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:203,1
    - Dst: json2pb::convert_string_to_double_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:204,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:211,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: 214
      start: 192
    functionDepth: 4
    functionLinenumber: 192
    functionLinenumberEnd: 214
    functionName: json2pb::convert_double_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - GetDouble
    - json2pb::convert_string_to_double_float_type
    - google::protobuf::Reflection*::AddDouble
    - json2pb::value_invalid
    - google::protobuf::Reflection*::SetDouble
    - IsNumber
    - IsString
    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:222,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:223,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:223,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:224,1
    - Dst: google::protobuf::FieldDescriptor*::enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:225,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:225,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:228,1
    - Dst: google::protobuf::Reflection*::AddEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:231,1
    - Dst: google::protobuf::Reflection*::SetEnum
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:233,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: 236
      start: 216
    functionDepth: 3
    functionLinenumber: 216
    functionLinenumberEnd: 236
    functionName: json2pb::convert_enum_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Reflection*::AddEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetString
    - google::protobuf::Reflection*::SetEnum
    - BUTIL_RAPIDJSON_NAMESPACE::Value::GetInt
    - json2pb::value_invalid
    - BUTIL_RAPIDJSON_NAMESPACE::Value::IsString
    - google::protobuf::FieldDescriptor*::enum_type
    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:245,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:247,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:247,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:249,1
    - Dst: GetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:249,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:251,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:252,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:252,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:252,1
    - Dst: google::protobuf::Reflection*::AddInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:255,1
    - Dst: google::protobuf::Reflection*::SetInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:257,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:260,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: 263
      start: 238
    functionDepth: 3
    functionLinenumber: 238
    functionLinenumberEnd: 263
    functionName: json2pb::convert_int64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Reflection*::AddInt64
    - json2pb::value_invalid
    - GetStringLength
    - GetInt64
    - GetString
    - IsString
    - google::protobuf::Reflection*::SetInt64
    - butil::StringToInt64
    - IsInt64
    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:272,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:274,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:274,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:276,1
    - Dst: GetUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:276,1
    - Dst: IsString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:278,1
    - Dst: butil::StringToUint64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:279,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:279,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:279,1
    - Dst: google::protobuf::Reflection*::AddUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:282,1
    - Dst: google::protobuf::Reflection*::SetUInt64
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:284,1
    - Dst: json2pb::value_invalid
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:287,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: 290
      start: 265
    functionDepth: 3
    functionLinenumber: 265
    functionLinenumberEnd: 290
    functionName: json2pb::convert_uint64_type
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - google::protobuf::Reflection*::SetUInt64
    - GetUint64
    - google::protobuf::Reflection*::AddUInt64
    - json2pb::value_invalid
    - GetStringLength
    - IsUint64
    - GetString
    - IsString
    - butil::StringToUint64
    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: 319
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 319
    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:327,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:328,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:329,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:335,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:336,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:337,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:338,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:338,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:343,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:344,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:361,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:362,1
    - Dst: CASE_FIELD_TYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:363,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:367,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:368,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:372,1
    - Dst: json2pb::convert_int64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:377,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:384,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:385,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:389,1
    - Dst: json2pb::convert_uint64_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:394,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:401,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:402,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:405,1
    - Dst: json2pb::convert_float_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:410,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:417,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:418,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:421,1
    - Dst: json2pb::convert_double_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:426,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:433,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:434,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:437,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:438,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:438,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:439,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:442,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:443,1
    - Dst: google::protobuf::Reflection*::AddString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:448,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:451,1
    - Dst: GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:452,1
    - Dst: GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:452,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:453,1
    - Dst: butil::Base64Decode
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:456,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:457,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:457,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:462,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:467,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:468,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:471,1
    - Dst: json2pb::convert_enum_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:476,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:483,1
    - Dst: Size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:484,1
    - Dst: J2PCHECKTYPE
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:487,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:488,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:489,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:494,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:495,1
    CyclomaticComplexity: 47
    EdgeCount: 47
    ICount: 120
    argCount: 6
    argNames:
    - ' value'
    - field
    - message
    - ' options'
    - err
    - depth
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 501
      start: 321
    functionDepth: 8
    functionLinenumber: 321
    functionLinenumberEnd: 501
    functionName: json2pb::JsonValueToProtoField
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 2
    functionsReached:
    - butil::EnsureString
    - json2pb::convert_int64_type
    - google::protobuf::FieldDescriptor*::is_required
    - json2pb::convert_enum_type
    - google::protobuf::Reflection*::AddString
    - json2pb::convert_float_type
    - google::protobuf::Message*::GetReflection
    - json2pb::convert_uint64_type
    - J2PCHECKTYPE
    - google::protobuf::FieldDescriptor*::type
    - IsNull
    - J2PERROR_WITH_PB
    - google::protobuf::FieldDescriptor*::cpp_type
    - GetString
    - google::protobuf::Reflection*::MutableMessage
    - CASE_FIELD_TYPE
    - Size
    - std::string::c_str
    - google::protobuf::FieldDescriptor*::full_name
    - IsArray
    - json2pb::JsonValueToProtoMessage
    - google::protobuf::FieldDescriptor*::is_repeated
    - J2PERROR
    - butil::Base64Decode
    - json2pb::convert_double_type
    - GetStringLength
    - google::protobuf::Reflection*::AddMessage
    - google::protobuf::Reflection*::SetString
    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,\n                                  int depth)"
  - 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: 361
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 361
    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:509,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:510,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:511,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:511,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:515,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:517,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:519,1
    - Dst: MemberBegin
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:522,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:522,1
    - Dst: google::protobuf::Reflection*::AddMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:523,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:524,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:525,1
    - Dst: std::string
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:526,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:526,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:527,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:528,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 6
    argNames:
    - ' value'
    - map_desc
    - message
    - ' options'
    - err
    - depth
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::FieldDescriptor*
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 503
    functionDepth: 6
    functionLinenumber: 503
    functionLinenumberEnd: 533
    functionName: json2pb::JsonMapToProtoMap
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 1
    functionsReached:
    - butil::EnsureString
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetString
    - google::protobuf::FieldDescriptor*::full_name
    - BUTIL_RAPIDJSON_NAMESPACE::Value::ConstMemberIterator::name::GetStringLength
    - std::string
    - MemberBegin
    - json2pb::JsonValueToProtoField
    - IsObject
    - MemberEnd
    - google::protobuf::FieldDescriptor*::message_type
    - J2PERROR
    - google::protobuf::Message*::GetReflection
    - google::protobuf::Reflection*::AddMessage
    - 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,\n                       int
      depth)"
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:541,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:544,1
    - Dst: IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:545,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:546,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:547,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:551,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:554,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:555,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:557,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:561,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:561,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:565,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:567,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:571,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:572,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:572,1
    - Dst: IsArray
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:575,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:576,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:576,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:577,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:577,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:580,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:586,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:589,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:589,1
    - Dst: json2pb::decode_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:590,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:595,1
    - Dst: MemberEnd
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:596,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:597,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:598,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:598,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:598,1
    - Dst: FindMember
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:606,1
    - Dst: data
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:606,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:608,1
    - Dst: J2PERROR
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:609,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:617,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:617,1
    - Dst: json2pb::JsonMapToProtoMap
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:619,1
    - Dst: json2pb::JsonValueToProtoField
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:623,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 57
    argCount: 5
    argNames:
    - ' json_value'
    - message
    - ' options'
    - err
    - depth
    argTypes:
    - BUTIL_RAPIDJSON_NAMESPACE::Value
    - google::protobuf::Message*
    - Json2PbOptions
    - std::string*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 535
    functionDepth: 7
    functionLinenumber: 535
    functionLinenumberEnd: 629
    functionName: json2pb::JsonValueToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 4
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::Value*::IsObject
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - json2pb::IsProtobufMap
    - std::vector::size
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Message*::GetDescriptor
    - google::protobuf::Message*::GetReflection
    - json2pb::JsonMapToProtoMap
    - std::vector::reserve
    - J2PERROR_WITH_PB
    - google::protobuf::Descriptor*::extension_range
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - std::vector::front
    - google::protobuf::FieldDescriptor*::name
    - json2pb::JsonValueToProtoField
    - IsObject
    - data
    - MemberEnd
    - FindMember
    - std::vector::push_back
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - IsArray
    - json2pb::decode_name
    - J2PERROR
    - google::protobuf::Descriptor*::extension_range_count
    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                             int depth)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:637,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:641,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:641,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:643,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:646,1
    - Dst: c_str
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:646,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:648,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:650,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:656,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:656,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:656,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:659,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: 660
      start: 631
    functionDepth: 8
    functionLinenumber: 631
    functionLinenumberEnd: 660
    functionName: json2pb::JsonToProtoMessageInline
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 3
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - std::string*::clear
    - J2PERROR_WITH_PB
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - json2pb::JsonValueToProtoMessage
    - c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    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:667,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: 668
      start: 662
    functionDepth: 9
    functionLinenumber: 662
    functionLinenumberEnd: 668
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 53
    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:676,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: 677
      start: 670
    functionDepth: 1
    functionLinenumber: 670
    functionLinenumberEnd: 677
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 54
    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:685,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:689,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:691,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:694,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:696,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:698,1
    - Dst: J2PERROR_WITH_PB
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:704,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:704,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:704,1
    - Dst: json2pb::JsonValueToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:707,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: 708
      start: 679
    functionDepth: 8
    functionLinenumber: 679
    functionLinenumberEnd: 708
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 54
    functionsReached:
    - BUTIL_RAPIDJSON_NAMESPACE::Document::ParseStream
    - BUTIL_RAPIDJSON_NAMESPACE::GetParseError_En
    - std::string*::clear
    - J2PERROR_WITH_PB
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - json2pb::JsonValueToProtoMessage
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetErrorOffset
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    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:713,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:713,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: 714
      start: 710
    functionDepth: 9
    functionLinenumber: 710
    functionLinenumberEnd: 714
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 54
    functionsReached:
    - Json2PbOptions
    - json2pb::JsonToProtoMessageInline
    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:723,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:723,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: 724
      start: 720
    functionDepth: 9
    functionLinenumber: 720
    functionLinenumberEnd: 724
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 54
    functionsReached:
    - Json2PbOptions
    - json2pb::JsonToProtoMessageInline
    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:729,1
    - Dst: Json2PbOptions
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:729,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: 730
      start: 726
    functionDepth: 1
    functionLinenumber: 726
    functionLinenumberEnd: 730
    functionName: json2pb::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 55
    functionsReached:
    - Json2PbOptions
    - json2pb::JsonToProtoMessage
    linkageType: ''
    returnType: bool
    signature: "bool JsonToProtoMessage(google::protobuf::io::ZeroCopyInputStream
      *stream,\n                        google::protobuf::Message* message,\n                        std::string*
      error)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: google::protobuf::json::JsonStreamToMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:737,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:738,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:740,1
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:744,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:745,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:746,1
    - Dst: google::protobuf::util::JsonToBinaryStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:748,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:749,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:750,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:752,1
    - Dst: google::protobuf::Message*::ParseFromCodedStream
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:759,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 4
    argNames:
    - json
    - message
    - ' options'
    - error
    argTypes:
    - google::protobuf::io::ZeroCopyInputStream*
    - google::protobuf::Message*
    - ProtoJson2PbOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 765
      start: 732
    functionDepth: 1
    functionLinenumber: 732
    functionLinenumberEnd: 765
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 7
    functionsReached:
    - auto::ok
    - google::protobuf::json::JsonStreamToMessage
    - auto::ToString
    - json2pb::GetTypeUrl
    - google::protobuf::Message*::ParseFromCodedStream
    - TypeResolverUniqueptr::get
    - butil::IOBuf::IOBuf
    - json2pb::GetTypeResolver
    - 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:769,1
    - Dst: size
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:769,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/json2pb/json_to_pb.cpp:770,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: 771
      start: 767
    functionDepth: 1
    functionLinenumber: 767
    functionLinenumberEnd: 771
    functionName: json2pb::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/json2pb/json_to_pb.cpp
    functionUses: 8
    functionsReached:
    - size
    - data
    - json2pb::ProtoJsonToProtoMessage
    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:
    - json2pb::ZeroCopyStreamReader::ReadBlockTail
    - Next
    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:
    - json2pb::ZeroCopyStreamReader::ReadBlockTail
    - Next
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:48,1
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:49,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:53,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:54,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:54,1
    - Dst: google::protobuf::Descriptor*::file
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:59,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: std::vector::end
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: std::vector::end
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: cpp_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:64,1
    - Dst: is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:68,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:69,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:72,1
    - Dst: json2pb::ExceedMaxDepth
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:73,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:78,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:80,1
    - Dst: json2pb::ExceedMaxDepth
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:81,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - ' message'
    - current_depth
    argTypes:
    - google::protobuf::Message
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 88
    functionName: json2pb::ExceedMaxDepth
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 1
    functionsReached:
    - json2pb::ExceedMaxDepth
    - std::vector::insert
    - std::vector::push_back
    - google::protobuf::Reflection*::GetRepeatedMessage
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::file
    - std::vector::end
    - google::protobuf::Reflection*::HasField
    - GetDescriptor
    - GetReflection
    - google::protobuf::Reflection*::FieldSize
    - std::vector::begin
    - google::protobuf::Reflection*::GetMessage
    - is_repeated
    - google::protobuf::Descriptor*::field_count
    - cpp_type
    linkageType: ''
    returnType: bool
    signature: bool ExceedMaxDepth(const google::protobuf::Message& message, int current_depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 102
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 111
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 111
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:129,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:130,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:132,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:133,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:135,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:138,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:142,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:142,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:146,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:148,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:154,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:156,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:158,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:163,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:163,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:163,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:168,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:172,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:174,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:174,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:176,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:177,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:177,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:184,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:185,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:191,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:191,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:192,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:194,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:194,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:194,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:195,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:201,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:204,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:206,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:210,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:210,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:211,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:213,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:213,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:213,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:214,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:216,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:218,1
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:219,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:220,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:225,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:230,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:233,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 60
    argCount: 3
    argNames:
    - ' message'
    - ' handler'
    - depth
    argTypes:
    - google::protobuf::Message
    - Handler
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 235
    functionName: json2pb::PbToJsonConverter::Convert
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::Reflection*::GetRepeatedMessage
    - json2pb::IsProtobufMap
    - Key
    - std::vector::size
    - google::protobuf::Descriptor*::field_count
    - std::vector::reserve
    - json2pb::PbToJsonConverter::_PbFieldToJson
    - google::protobuf::Reflection*::GetStringReference
    - google::protobuf::Descriptor*::extension_range
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - std::vector::front
    - google::protobuf::FieldDescriptor*::name
    - data
    - size
    - std::vector::push_back
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - GetDescriptor
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::message_type
    - EndObject
    - StartObject
    - google::protobuf::Reflection*::HasField
    - GetReflection
    - google::protobuf::Reflection*::FieldSize
    - google::protobuf::Descriptor*::extension_range_count
    - std::string::data
    - std::vector::empty
    - std::string::size
    - decode_name
    linkageType: ''
    returnType: bool
    signature: bool PbToJsonConverter::Convert(const google::protobuf::Message& message,
      Handler& handler, int depth)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:242,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:243,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:274,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:275,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:276,1
    - Dst: google::protobuf::Reflection*::GetRepeatedStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:278,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:280,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:283,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:284,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:284,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:284,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:286,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:286,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:286,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:289,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:292,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:293,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:296,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:297,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:297,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:297,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:299,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:299,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:299,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:306,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:307,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:308,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:311,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:311,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:313,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:313,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:313,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:317,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:317,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:321,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:326,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:326,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:329,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:329,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:336,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:337,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:338,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:340,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:340,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:345,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:348,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:348,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 73
    argCount: 4
    argNames:
    - ' message'
    - field
    - ' handler'
    - depth
    argTypes:
    - google::protobuf::Message
    - google::protobuf::FieldDescriptor*
    - Handler
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 356
    functionName: json2pb::PbToJsonConverter::_PbFieldToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 1
    functionsReached:
    - butil::EnsureString
    - google::protobuf::Reflection*::GetRepeatedMessage
    - google::protobuf::Reflection*::GetRepeatedEnum
    - butil::Base64Encode
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::Reflection*::GetRepeatedStringReference
    - EndArray
    - google::protobuf::Reflection*::GetEnum
    - json2pb::PbToJsonConverter::Convert
    - google::protobuf::Reflection*::GetMessage
    - AddInt
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::Reflection*::FieldSize
    - GetReflection
    - String
    - StartArray
    - std::string::data
    - std::string::size
    - google::protobuf::Reflection*::GetStringReference
    linkageType: ''
    returnType: bool
    signature: "bool PbToJsonConverter::_PbFieldToJson(\n    const google::protobuf::Message&
      message,\n    const google::protobuf::FieldDescriptor* field,\n    Handler&
      handler, int depth)"
  - 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: 262
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 262
    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:366,1
    - Dst: PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:369,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:372,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:373,1
    - Dst: PbToJsonConverter::ErrorText
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:373,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: 376
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 376
    functionName: json2pb::ProtoMessageToJsonStream
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 0
    functionsReached:
    - PbToJsonConverter::ErrorText
    - std::string*::append
    - PbToJsonConverter::Convert
    - std::string*::clear
    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:385,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:386,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:386,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:386,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: 390
      start: 378
    functionDepth: 2
    functionLinenumber: 378
    functionLinenumberEnd: 390
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 54
    functionsReached:
    - std::string*::append
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
    - json2pb::ProtoMessageToJsonStream
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    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:394,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:394,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: 395
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 55
    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:401,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: 402
      start: 397
    functionDepth: 2
    functionLinenumber: 397
    functionLinenumberEnd: 402
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 55
    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:407,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:407,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: 408
      start: 404
    functionDepth: 1
    functionLinenumber: 404
    functionLinenumberEnd: 408
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 56
    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: 6
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ExceedMaxDepth
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:413,1
    - Dst: json2pb::ProtoMessageToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:420,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:421,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:423,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:427,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:429,1
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:433,1
    - Dst: google::protobuf::util::BinaryToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:435,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:436,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:436,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:438,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:440,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - Pb2ProtoJsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 410
    functionDepth: 2
    functionLinenumber: 410
    functionLinenumberEnd: 444
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 6
    functionsReached:
    - json2pb::ExceedMaxDepth
    - auto::ok
    - auto::ToString
    - json2pb::ProtoMessageToJsonStream
    - SerializeToZeroCopyStream
    - json2pb::GetTypeUrl
    - google::protobuf::util::BinaryToJsonStream
    - TypeResolverUniqueptr::get
    - butil::IOBuf::IOBuf
    - json2pb::GetTypeResolver
    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:449,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: 450
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 450
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 7
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:48,1
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:49,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:53,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:54,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:54,1
    - Dst: google::protobuf::Descriptor*::file
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:59,1
    - Dst: std::vector::insert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: std::vector::end
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: std::vector::end
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:60,1
    - Dst: cpp_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:64,1
    - Dst: is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:68,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:69,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:72,1
    - Dst: json2pb::ExceedMaxDepth
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:73,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:78,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:80,1
    - Dst: json2pb::ExceedMaxDepth
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:81,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - ' message'
    - current_depth
    argTypes:
    - google::protobuf::Message
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 88
    functionName: json2pb::ExceedMaxDepth
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 3
    functionsReached:
    - json2pb::ExceedMaxDepth
    - std::vector::insert
    - std::vector::push_back
    - google::protobuf::Reflection*::GetRepeatedMessage
    - google::protobuf::Descriptor*::field
    - google::protobuf::Descriptor*::file
    - std::vector::end
    - google::protobuf::Reflection*::HasField
    - GetDescriptor
    - GetReflection
    - google::protobuf::Reflection*::FieldSize
    - std::vector::begin
    - google::protobuf::Reflection*::GetMessage
    - is_repeated
    - google::protobuf::Descriptor*::field_count
    - cpp_type
    linkageType: ''
    returnType: bool
    signature: bool ExceedMaxDepth(const google::protobuf::Message& message, int current_depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 102
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 111
      start: 111
    functionDepth: 0
    functionLinenumber: 111
    functionLinenumberEnd: 111
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:129,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:130,1
    - Dst: google::protobuf::Descriptor*::extension_range_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:132,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:133,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:135,1
    - Dst: google::protobuf::Descriptor*::extension_range
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:138,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::start_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:142,1
    - Dst: google::protobuf::Descriptor::ExtensionRange*::end_number
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:142,1
    - Dst: google::protobuf::Reflection*::FindKnownExtensionByNumber
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:146,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:148,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:154,1
    - Dst: json2pb::IsProtobufMap
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:155,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:156,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:158,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:163,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:163,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:163,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: std::vector::front
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:164,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:168,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:172,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:174,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:174,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:176,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:177,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:177,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:184,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:185,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:191,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:191,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:192,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:194,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:194,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:194,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:195,1
    - Dst: std::vector::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:201,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:204,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:206,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:210,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:210,1
    - Dst: decode_name
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:211,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:213,1
    - Dst: data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:213,1
    - Dst: size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:213,1
    - Dst: StartObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:214,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:216,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:218,1
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:219,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:220,1
    - Dst: Key
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:222,1
    - Dst: json2pb::PbToJsonConverter::_PbFieldToJson
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:225,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:230,1
    - Dst: EndObject
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:233,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 60
    argCount: 3
    argNames:
    - ' message'
    - ' handler'
    - depth
    argTypes:
    - google::protobuf::Message
    - Handler
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 124
    functionDepth: 2
    functionLinenumber: 124
    functionLinenumberEnd: 235
    functionName: json2pb::PbToJsonConverter::Convert
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 1
    functionsReached:
    - butil::EnsureString
    - google::protobuf::FieldDescriptor*::is_required
    - google::protobuf::Reflection*::GetRepeatedMessage
    - json2pb::IsProtobufMap
    - Key
    - std::vector::size
    - google::protobuf::Descriptor*::field_count
    - std::vector::reserve
    - json2pb::PbToJsonConverter::_PbFieldToJson
    - google::protobuf::Reflection*::GetStringReference
    - google::protobuf::Descriptor*::extension_range
    - google::protobuf::Descriptor::ExtensionRange*::start_number
    - google::protobuf::Descriptor::ExtensionRange*::end_number
    - google::protobuf::Reflection*::FindKnownExtensionByNumber
    - std::vector::front
    - google::protobuf::FieldDescriptor*::name
    - data
    - size
    - std::vector::push_back
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - GetDescriptor
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::FieldDescriptor*::message_type
    - EndObject
    - StartObject
    - google::protobuf::Reflection*::HasField
    - GetReflection
    - google::protobuf::Reflection*::FieldSize
    - google::protobuf::Descriptor*::extension_range_count
    - std::string::data
    - std::vector::empty
    - std::string::size
    - decode_name
    linkageType: ''
    returnType: bool
    signature: bool PbToJsonConverter::Convert(const google::protobuf::Message& message,
      Handler& handler, int depth)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: GetReflection
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:242,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:243,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:274,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:275,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:276,1
    - Dst: google::protobuf::Reflection*::GetRepeatedStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:278,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:280,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:283,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:284,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:284,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:284,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:286,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:286,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:286,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:289,1
    - Dst: google::protobuf::Reflection*::GetStringReference
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:292,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:293,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:296,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:297,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:297,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:297,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:299,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:299,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:299,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:306,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:307,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:308,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:311,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:311,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:313,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:313,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:313,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:317,1
    - Dst: google::protobuf::Reflection*::GetRepeatedEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:317,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:321,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:326,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:326,1
    - Dst: String
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: std::string::data
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: std::string::size
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:327,1
    - Dst: AddInt
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:329,1
    - Dst: google::protobuf::Reflection*::GetEnum
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:329,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:336,1
    - Dst: google::protobuf::Reflection*::FieldSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:337,1
    - Dst: StartArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:338,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:340,1
    - Dst: google::protobuf::Reflection*::GetRepeatedMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:340,1
    - Dst: EndArray
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:345,1
    - Dst: json2pb::PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:348,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:348,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 73
    argCount: 4
    argNames:
    - ' message'
    - field
    - ' handler'
    - depth
    argTypes:
    - google::protobuf::Message
    - google::protobuf::FieldDescriptor*
    - Handler
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 238
    functionDepth: 1
    functionLinenumber: 238
    functionLinenumberEnd: 356
    functionName: json2pb::PbToJsonConverter::_PbFieldToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 2
    functionsReached:
    - butil::EnsureString
    - google::protobuf::Reflection*::GetRepeatedMessage
    - google::protobuf::Reflection*::GetRepeatedEnum
    - butil::Base64Encode
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::Reflection*::GetRepeatedStringReference
    - EndArray
    - google::protobuf::Reflection*::GetEnum
    - json2pb::PbToJsonConverter::Convert
    - google::protobuf::Reflection*::GetMessage
    - AddInt
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::Reflection*::FieldSize
    - GetReflection
    - String
    - StartArray
    - std::string::data
    - std::string::size
    - google::protobuf::Reflection*::GetStringReference
    linkageType: ''
    returnType: bool
    signature: "bool PbToJsonConverter::_PbFieldToJson(\n    const google::protobuf::Message&
      message,\n    const google::protobuf::FieldDescriptor* field,\n    Handler&
      handler, int depth)"
  - 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: 262
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 262
    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:366,1
    - Dst: PbToJsonConverter::Convert
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:369,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:372,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:373,1
    - Dst: PbToJsonConverter::ErrorText
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:373,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: 376
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 376
    functionName: json2pb::ProtoMessageToJsonStream
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 3
    functionsReached:
    - PbToJsonConverter::ErrorText
    - std::string*::append
    - PbToJsonConverter::Convert
    - std::string*::clear
    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:385,1
    - Dst: std::string*::append
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:386,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:386,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:386,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: 390
      start: 378
    functionDepth: 2
    functionLinenumber: 378
    functionLinenumberEnd: 390
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 56
    functionsReached:
    - std::string*::append
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetSize
    - json2pb::ProtoMessageToJsonStream
    - BUTIL_RAPIDJSON_NAMESPACE::StringBuffer::GetString
    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:394,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:394,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: 395
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 395
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 57
    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:401,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: 402
      start: 397
    functionDepth: 2
    functionLinenumber: 397
    functionLinenumberEnd: 402
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 57
    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:407,1
    - Dst: Pb2JsonOptions
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:407,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: 408
      start: 404
    functionDepth: 1
    functionLinenumber: 404
    functionLinenumberEnd: 408
    functionName: json2pb::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 58
    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: 6
    BranchProfiles: []
    Callsites:
    - Dst: json2pb::ExceedMaxDepth
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:413,1
    - Dst: json2pb::ProtoMessageToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:420,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:421,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:423,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:427,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:429,1
    - Dst: json2pb::GetTypeResolver
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:433,1
    - Dst: google::protobuf::util::BinaryToJsonStream
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:435,1
    - Dst: TypeResolverUniqueptr::get
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:436,1
    - Dst: json2pb::GetTypeUrl
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:436,1
    - Dst: auto::ok
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:438,1
    - Dst: auto::ToString
      Src: /src/brpc/src/json2pb/pb_to_json.cpp:440,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 18
    argCount: 4
    argNames:
    - ' message'
    - json
    - ' options'
    - error
    argTypes:
    - google::protobuf::Message
    - google::protobuf::io::ZeroCopyOutputStream*
    - Pb2ProtoJsonOptions
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 444
      start: 410
    functionDepth: 2
    functionLinenumber: 410
    functionLinenumberEnd: 444
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 7
    functionsReached:
    - json2pb::ExceedMaxDepth
    - auto::ok
    - auto::ToString
    - json2pb::ProtoMessageToJsonStream
    - SerializeToZeroCopyStream
    - json2pb::GetTypeUrl
    - google::protobuf::util::BinaryToJsonStream
    - TypeResolverUniqueptr::get
    - butil::IOBuf::IOBuf
    - json2pb::GetTypeResolver
    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:449,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: 450
      start: 446
    functionDepth: 1
    functionLinenumber: 446
    functionLinenumberEnd: 450
    functionName: json2pb::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/json2pb/pb_to_json.cpp
    functionUses: 8
    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:
    - begin
    - reserve
    - isalnum
    - end
    - clear
    - append
    - size
    - isdigit
    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:
    - begin
    - reserve
    - end
    - clear
    - append
    - json2pb::match_pattern
    - push_back
    - size
    - static_cast<char>
    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:
    - begin
    - reserve
    - isalnum
    - end
    - clear
    - append
    - size
    - isdigit
    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:
    - begin
    - reserve
    - end
    - clear
    - append
    - json2pb::match_pattern
    - push_back
    - size
    - static_cast<char>
    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: 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: 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:
    - FieldDescriptor*::message_type
    - FieldDescriptor*::is_repeated
    - FieldDescriptor*::type
    - Descriptor*::field
    - FieldDescriptor*::cpp_type
    - FieldDescriptor*::name
    - Descriptor*::field_count
    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: 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: 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:
    - FieldDescriptor*::message_type
    - FieldDescriptor*::is_repeated
    - FieldDescriptor*::type
    - Descriptor*::field
    - FieldDescriptor*::cpp_type
    - FieldDescriptor*::name
    - Descriptor*::field_count
    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:35,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:36,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: json2pb::GetTypeUrl
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 4
    functionsReached:
    - GetDescriptor
    - butil::EnsureString
    - butil::string_printf
    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: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    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: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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:35,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:36,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:36,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' message'
    argTypes:
    - google::protobuf::Message
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 37
    functionName: json2pb::GetTypeUrl
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 4
    functionsReached:
    - GetDescriptor
    - butil::EnsureString
    - butil::string_printf
    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: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    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: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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:68,1
    - Dst: google::protobuf::DescriptorPool::generated_pool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: butil::create_leaky_singleton_obj
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached:
    - google::protobuf::util::NewTypeResolverForDescriptorPool
    - google::protobuf::DescriptorPool::generated_pool
    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:68,1
    - Dst: google::protobuf::DescriptorPool::generated_pool
      Src: /src/brpc/src/json2pb/protobuf_type_resolver.h:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 70
    functionName: butil::create_leaky_singleton_obj
    functionSourceFile: /src/brpc/src/json2pb/protobuf_type_resolver.h
    functionUses: 0
    functionsReached:
    - google::protobuf::util::NewTypeResolverForDescriptorPool
    - google::protobuf::DescriptorPool::generated_pool
    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: 104
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 104
    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: 106
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 106
    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: 104
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 104
    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: 106
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 106
    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:
    - __builtin_expect
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    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::RemainSize
    - memset
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    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::RemainSize
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    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:
    - __builtin_expect
    - Next
    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:
    - __builtin_expect
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    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::RemainSize
    - memset
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    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::RemainSize
    - json2pb::ZeroCopyStreamWriter::AcquireNextBuf
    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:
    - __builtin_expect
    - Next
    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:
    - butil::get_leaky_singleton<TypeResolver>
    - GetDescriptor
    - DescriptorPool::generated_pool
    - NewTypeResolverForDescriptorPool
    - TypeResolverDeleter
    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:
    - butil::get_leaky_singleton<TypeResolver>
    - GetDescriptor
    - DescriptorPool::generated_pool
    - NewTypeResolverForDescriptorPool
    - TypeResolverDeleter
    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_cond_init
    - pthread_mutex_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_cond_destroy
    - pthread_mutex_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:
    - std::unordered_map<void*, SimuFutex>::unordered_map<void*, SimuFutex>
    - exit
    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
    - butil::timespec_from_now
    - LOG
    - pthread_cond_timedwait
    - pthread_cond_wait
    - erase
    - std::unique_lock::unlock
    - exit
    - static_cast<butil::atomic<int>*>
    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:
    - find
    - end
    - LOG
    - erase
    - pthread_cond_signal
    - std::unique_lock::unlock
    - exit
    - pthread_once
    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_cond_init
    - pthread_mutex_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_cond_destroy
    - pthread_mutex_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:
    - std::unordered_map<void*, SimuFutex>::unordered_map<void*, SimuFutex>
    - exit
    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
    - butil::timespec_from_now
    - LOG
    - pthread_cond_timedwait
    - pthread_cond_wait
    - erase
    - std::unique_lock::unlock
    - exit
    - static_cast<butil::atomic<int>*>
    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:
    - find
    - end
    - LOG
    - erase
    - pthread_cond_signal
    - std::unique_lock::unlock
    - exit
    - pthread_once
    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_kill
    - pthread_once
    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_kill
    - pthread_once
    linkageType: ''
    returnType: int
    signature: int interrupt_pthread(pthread_t th)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: bthread::SubKeyTable
      Src: /src/brpc/src/bthread/key.cpp:93,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:94,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:95,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:100,1
    - Dst: KeyInfo::dtor
      Src: /src/brpc/src/bthread/key.cpp:113,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 147
    functionName: bthread::SubKeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - fetch_sub
    - fetch_add
    - bthread::SubKeyTable
    - KeyInfo::dtor
    - memset
    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:100,1
    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: ~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:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - offset
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 117
    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: 128
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 128
    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: 135
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 135
    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: 139
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 139
    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:153,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:154,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: bthread::KeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - memset
    - bthread::KeyTable
    - fetch_add
    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:159,1
    - Dst: bthread::clear
      Src: /src/brpc/src/bthread/key.cpp:163,1
    - Dst: bthread::cleared
      Src: /src/brpc/src/bthread/key.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:180,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 181
    functionName: ~KeyTable()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - fetch_sub
    - bthread::clear
    - bthread::cleared
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~KeyTable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SubKeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:188,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 193
    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:201,1
    - Dst: SubKeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:207,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/key.cpp:211,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - key
    - data
    argTypes:
    - bthread_key_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 213
    functionName: bthread::set_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - SubKeyTable::SubKeyTable
    - SubKeyTable*::set_data
    - CHECK
    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:93,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:94,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:95,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/key.cpp:100,1
    - Dst: KeyInfo::dtor
      Src: /src/brpc/src/bthread/key.cpp:113,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 147
    functionName: bthread::SubKeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - fetch_sub
    - fetch_add
    - bthread::SubKeyTable
    - KeyInfo::dtor
    - memset
    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:100,1
    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: ~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:113,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 1
    argNames:
    - offset
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 117
    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: 128
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 128
    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: 135
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 135
    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: 139
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 139
    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:153,1
    - Dst: memset
      Src: /src/brpc/src/bthread/key.cpp:154,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/key.cpp:155,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 156
    functionName: bthread::KeyTable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - memset
    - bthread::KeyTable
    - fetch_add
    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:159,1
    - Dst: clear
      Src: /src/brpc/src/bthread/key.cpp:163,1
    - Dst: cleared
      Src: /src/brpc/src/bthread/key.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:180,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 181
    functionName: ~KeyTable()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - clear
    - fetch_sub
    - cleared
    - LOG
    linkageType: ''
    returnType: void
    signature: void ~KeyTable()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: SubKeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:188,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 193
    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:201,1
    - Dst: SubKeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:207,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/key.cpp:211,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 2
    argNames:
    - key
    - data
    argTypes:
    - bthread_key_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 213
    functionName: bthread::set_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - SubKeyTable::SubKeyTable
    - SubKeyTable*::set_data
    - CHECK
    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:223,1
    - Dst: _head
      Src: /src/brpc/src/bthread/key.cpp:224,1
    - Dst: _tail
      Src: /src/brpc/src/bthread/key.cpp:224,1
    - Dst: _length
      Src: /src/brpc/src/bthread/key.cpp:224,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:227,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:228,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:233,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:235,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:241,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:243,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:245,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 78
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 325
    functionName: KeyTableList
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 1
    functionsReached:
    - _tail
    - tls_bls_ptr
    - TaskGroup*::current_task
    - _head
    - KeyTableList
    - _length
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:227,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:228,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:233,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:235,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:241,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:243,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:245,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 247
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 247
    functionName: ~KeyTableList()
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - tls_bls_ptr
    - TaskGroup*::current_task
    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: 261
      start: 249
    functionDepth: 0
    functionLinenumber: 249
    functionLinenumberEnd: 261
    functionName: append
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 339
    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: 274
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 274
    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: 304
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 304
    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: 308
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 308
    functionName: get_length
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 4
    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: 319
      start: 311
    functionDepth: 0
    functionLinenumber: 311
    functionLinenumberEnd: 319
    functionName: check_length
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool check_length()
  - BBCount: 10
    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:343,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:345,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:351,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:353,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:360,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:367,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:368,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:374,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:378,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 50
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 382
      start: 327
    functionDepth: 1
    functionLinenumber: 327
    functionLinenumberEnd: 382
    functionName: borrow_keytable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 2
    functionsReached:
    - auto::get
    - pthread_rwlock_unlock
    - pthread_rwlock_wrlock
    - pthread_rwlock_rdlock
    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:396,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:398,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:403,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:404,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:405,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:408,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:411,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:412,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:417,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 2
    argNames:
    - pool
    - kt
    argTypes:
    - bthread_keytable_pool_t*
    - KeyTable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 419
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 419
    functionName: return_keytable
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 4
    functionsReached:
    - auto::get
    - pthread_rwlock_unlock
    - pthread_rwlock_wrlock
    - pthread_rwlock_rdlock
    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:422,1
    - Dst: tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:426,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 428
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 428
    functionName: cleanup_pthread
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - tls_bls_ptr
    - 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: 433
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 433
    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:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 438
    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:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 439
    functionDepth: 0
    functionLinenumber: 439
    functionLinenumberEnd: 441
    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:443,1
    - Dst: load
      Src: /src/brpc/src/bthread/key.cpp:444,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 442
    functionDepth: 0
    functionLinenumber: 442
    functionLinenumberEnd: 446
    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:461,1
    - Dst: pthread_rwlock_init
      Src: /src/brpc/src/bthread/key.cpp:464,1
    - Dst: butil::ThreadLocal<bthread::KeyTableList>::KeyTableList>
      Src: /src/brpc/src/bthread/key.cpp:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 470
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 470
    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:474,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:478,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:485,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:489,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:490,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:494,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:496,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:499,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:501,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:503,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 27
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 472
    functionDepth: 1
    functionLinenumber: 472
    functionLinenumberEnd: 509
    functionName: bthread_keytable_pool_destroy
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 6
    functionsReached:
    - bthread::tls_bls_ptr
    - pthread_rwlock_wrlock
    - LOG
    - bthread::TaskGroup*::current_task
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - pthread_rwlock_unlock
    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:514,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:517,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:519,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: 521
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 521
    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:525,1
    - Dst: pthread_rwlock_rdlock
      Src: /src/brpc/src/bthread/key.cpp:529,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:531,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:536,1
    - Dst: auto::get
      Src: /src/brpc/src/bthread/key.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:538,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:541,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - pool
    argTypes:
    - bthread_keytable_pool_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 523
    functionDepth: 1
    functionLinenumber: 523
    functionLinenumberEnd: 543
    functionName: get_thread_local_keytable_list_length
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 4
    functionsReached:
    - auto::get
    - pthread_rwlock_rdlock
    - pthread_rwlock_unlock
    - LOG
    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:554,1
    - Dst: bthread_keytable_pool_getstat
      Src: /src/brpc/src/bthread/key.cpp:558,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/key.cpp:559,1
    - Dst: bthread::KeyTable::KeyTable
      Src: /src/brpc/src/bthread/key.cpp:563,1
    - Dst: ctor
      Src: /src/brpc/src/bthread/key.cpp:567,1
    - Dst: bthread::KeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:569,1
    - Dst: pthread_rwlock_wrlock
      Src: /src/brpc/src/bthread/key.cpp:572,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:574,1
    - Dst: pthread_rwlock_unlock
      Src: /src/brpc/src/bthread/key.cpp:581,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: 586
      start: 548
    functionDepth: 2
    functionLinenumber: 548
    functionLinenumberEnd: 586
    functionName: bthread_keytable_pool_reserve
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - bthread::KeyTable::KeyTable
    - bthread_keytable_pool_getstat
    - pthread_rwlock_wrlock
    - LOG
    - bthread::KeyTable*::set_data
    - pthread_rwlock_unlock
    - ctor
    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:593,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - key
    - dtor_args
    argTypes:
    - bthread_key_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 611
      start: 588
    functionDepth: 1
    functionLinenumber: 588
    functionLinenumberEnd: 611
    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:615,1
    - Dst: bthread_key_create2
      Src: /src/brpc/src/bthread/key.cpp:617,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 613
    functionDepth: 2
    functionLinenumber: 613
    functionLinenumberEnd: 619
    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:624,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/key.cpp:635,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 637
    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::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:645,1
    - Dst: bthread::KeyTable::KeyTable
      Src: /src/brpc/src/bthread/key.cpp:647,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:651,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:652,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:654,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:659,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:660,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/key.cpp:661,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bthread/key.cpp:661,1
    - Dst: bthread::KeyTable*::set_data
      Src: /src/brpc/src/bthread/key.cpp:665,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - key
    - data
    argTypes:
    - bthread_key_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 644
    functionDepth: 1
    functionLinenumber: 644
    functionLinenumberEnd: 666
    functionName: bthread_setspecific
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 22
    functionsReached:
    - bthread::tls_bls_ptr
    - bthread::KeyTable::KeyTable
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::current_task
    - bthread::KeyTable*::set_data
    - CHECK_EQ
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::thread_atexit
    linkageType: ''
    returnType: int
    signature: int bthread_setspecific(bthread_key_t key, void* data)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:669,1
    - Dst: bthread::KeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:671,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/key.cpp:673,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:675,1
    - Dst: borrow_keytable
      Src: /src/brpc/src/bthread/key.cpp:676,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/key.cpp:678,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:679,1
    - Dst: bthread::KeyTable*::get_data
      Src: /src/brpc/src/bthread/key.cpp:680,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - key
    argTypes:
    - bthread_key_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 684
      start: 668
    functionDepth: 2
    functionLinenumber: 668
    functionLinenumberEnd: 684
    functionName: bthread_getspecific
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 20
    functionsReached:
    - borrow_keytable
    - bthread::tls_bls_ptr
    - bthread::KeyTable*::get_data
    - bthread::TaskGroup*::current_task
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: void
    signature: void * bthread_getspecific(bthread_key_t key)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:687,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 688
      start: 686
    functionDepth: 1
    functionLinenumber: 686
    functionLinenumberEnd: 688
    functionName: bthread_assign_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - bthread::tls_bls_ptr
    linkageType: ''
    returnType: void
    signature: void bthread_assign_data(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/key.cpp:691,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 690
    functionDepth: 1
    functionLinenumber: 690
    functionLinenumberEnd: 692
    functionName: bthread_get_assigned_data
    functionSourceFile: /src/brpc/src/bthread/key.cpp
    functionUses: 0
    functionsReached:
    - bthread::tls_bls_ptr
    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: p
      Src: /src/brpc/src/bthread/condition_variable.h:68,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:69,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:69,1
    - Dst: p
      Src: /src/brpc/src/bthread/condition_variable.h:75,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:76,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:76,1
    - Dst: wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:84,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:84,1
    - Dst: wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:89,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:89,1
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/src/bthread/condition_variable.h:94,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:95,1
    - Dst: bthread_cond_timedwait
      Src: /src/brpc/src/bthread/condition_variable.h:101,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:102,1
    - Dst: bthread_cond_signal
      Src: /src/brpc/src/bthread/condition_variable.h:107,1
    - Dst: bthread_cond_broadcast
      Src: /src/brpc/src/bthread/condition_variable.h:111,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 40
    functionDepth: 1
    functionLinenumber: 40
    functionLinenumberEnd: 118
    functionName: namespace
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - mutex
    - bthread_cond_broadcast
    - bthread_cond_wait
    - p
    - bthread_cond_signal
    - bthread_cond_timedwait
    - bthread_cond_init
    - bthread_cond_destroy
    - butil::microseconds_from_now
    - wait_until
    - CHECK_EQ
    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:
    - bthread_cond_init
    - CHECK_EQ
    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:
    - bthread_cond_destroy
    - CHECK_EQ
    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:
    - mutex
    - bthread_cond_wait
    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:
    - mutex
    - bthread_cond_wait
    linkageType: ''
    returnType: void
    signature: void wait(std::unique_lock<bthread_mutex_t>& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: p
      Src: /src/brpc/src/bthread/condition_variable.h:68,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:69,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:69,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lock'
    - p
    argTypes:
    - std::unique_lock<bthread::Mutex>
    - Predicate
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: ConditionVariable::wait
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - p
    - mutex
    - bthread_cond_wait
    linkageType: ''
    returnType: void
    signature: void wait(std::unique_lock<bthread::Mutex>& lock, Predicate p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: p
      Src: /src/brpc/src/bthread/condition_variable.h:75,1
    - Dst: bthread_cond_wait
      Src: /src/brpc/src/bthread/condition_variable.h:76,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:76,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - ' lock'
    - p
    argTypes:
    - std::unique_lock<bthread_mutex_t>
    - Predicate
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: ConditionVariable::wait
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 0
    functionsReached:
    - p
    - mutex
    - bthread_cond_wait
    linkageType: ''
    returnType: void
    signature: void wait(std::unique_lock<bthread_mutex_t>& lock, Predicate p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ConditionVariable::wait_until
      Src: /src/brpc/src/bthread/condition_variable.h:84,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:84,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: 85
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 85
    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:89,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/condition_variable.h:89,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: 90
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 90
    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:94,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lock'
    - duetime
    argTypes:
    - std::unique_lock<bthread::Mutex>
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 97
    functionName: ConditionVariable::wait_until
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 2
    functionsReached:
    - mutex
    - bthread_cond_timedwait
    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:101,1
    - Dst: mutex
      Src: /src/brpc/src/bthread/condition_variable.h:102,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: 104
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 104
    functionName: ConditionVariable::wait_until
    functionSourceFile: /src/brpc/src/bthread/condition_variable.h
    functionUses: 2
    functionsReached:
    - mutex
    - bthread_cond_timedwait
    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:107,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 108
    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: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: 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:
    - CHECK_GT
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    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:
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    - reinterpret_cast<void*>
    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:
    - BUTIL_ASAN_START_SWITCH_FIBER
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    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:
    - CHECK_GT
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    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:
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    - reinterpret_cast<void*>
    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:
    - BUTIL_ASAN_START_SWITCH_FIBER
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    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::allocate_stack_storage
    - bthread::zeroize
    - bthread_make_fcontext
    - BTHREAD_ASAN_POISON_MEMORY_REGION
    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::zeroize
    - bthread::deallocate_stack_storage
    - BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    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*::storage::zeroize
    - ContextualStack::ContextualStack
    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:
    - bthread::return_stack
    - assert
    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:
    - CHECK_GT
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    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:
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    - reinterpret_cast<void*>
    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:
    - BUTIL_ASAN_START_SWITCH_FIBER
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    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:
    - CHECK_GT
    - reinterpret_cast<void*>
    - BUTIL_ASAN_POISON_MEMORY_REGION
    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:
    - BUTIL_ASAN_UNPOISON_MEMORY_REGION
    - CHECK_GT
    - reinterpret_cast<void*>
    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:
    - BUTIL_ASAN_START_SWITCH_FIBER
    - reinterpret_cast<void*>
    - RELEASE_ASSERT
    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::allocate_stack_storage
    - bthread::zeroize
    - bthread_make_fcontext
    - BTHREAD_ASAN_POISON_MEMORY_REGION
    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:
    - zeroize
    - deallocate_stack_storage
    - BTHREAD_ASAN_UNPOISON_MEMORY_REGION
    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*::storage::zeroize
    - ContextualStack::ContextualStack
    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:
    - bthread::return_stack
    - assert
    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:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 42
    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: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    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:99,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:103,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:104,1
    - Dst: TaskControl::TaskControl
      Src: /src/brpc/src/bthread/bthread.cpp:108,1
    - Dst: TaskControl*::init
      Src: /src/brpc/src/bthread/bthread.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:116,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/src/bthread/bthread.cpp:120,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 122
    functionName: bthread::get_or_new_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - LOG
    - TaskControl::TaskControl
    - butil::atomic*::store
    - TaskControl*::init
    - butil::atomic*::load
    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:132,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:134,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/bthread.cpp:140,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/bthread.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:142,1
    - Dst: bthread::make_tid
      Src: /src/brpc/src/bthread/bthread.cpp:147,1
    - Dst: TaskControl*::_task_tracer::set_running_status
      Src: /src/brpc/src/bthread/bthread.cpp:149,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/bthread.cpp:149,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bthread/bthread.cpp:152,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:156,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/bthread.cpp:157,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:167,1
    - Dst: WaitForTracing
      Src: /src/brpc/src/bthread/bthread.cpp:167,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:169,1
    - Dst: set_status
      Src: /src/brpc/src/bthread/bthread.cpp:169,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/bthread.cpp:172,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/bthread.cpp:172,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 177
    functionName: bthread::init_for_pthread_stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::_task_tracer::set_running_status
    - butil::return_resource
    - bthread::get_slot
    - bthread::make_tid
    - BAIDU_SCOPED_LOCK
    - set_status
    - bthread::TaskTracer::set_end_status_unsafe
    - syscall
    - LOG
    - WaitForTracing
    - bthread::get_task_control
    - BAIDU_UNLIKELY
    - butil::get_resource
    - butil::thread_atexit
    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:180,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:185,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 186
    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:189,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 194
    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: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:200,1
    - Dst: TaskControl*::get_living_bthreads
      Src: /src/brpc/src/bthread/bthread.cpp:205,1
    - Dst: auto::empty
      Src: /src/brpc/src/bthread/bthread.cpp:206,1
    - Dst: bthread::print_task
      Src: /src/brpc/src/bthread/bthread.cpp:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - enable_trace
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 213
    functionName: bthread::print_living_tasks
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - bthread::print_task
    - auto::empty
    - TaskControl*::get_living_bthreads
    linkageType: ''
    returnType: void
    signature: void print_living_tasks(std::ostream& os, bool enable_trace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:217,1
    - Dst: auto::add_workers
      Src: /src/brpc/src/bthread/bthread.cpp:219,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 222
    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:231,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:235,1
    - Dst: TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:236,1
    - Dst: bthread::add_workers_for_each_tag
      Src: /src/brpc/src/bthread/bthread.cpp:238,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 243
    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:251,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:252,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:257,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 259
    functionName: bthread::validate_bthread_current_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - auto::concurrency
    - 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:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 263
    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:272,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:285,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:287,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:288,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/bthread.cpp:294,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/bthread.cpp:294,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/bthread.cpp:296,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:300,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 4
    argNames:
    - tid
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 267
    functionDepth: 2
    functionLinenumber: 267
    functionLinenumberEnd: 301
    functionName: bthread::start_from_non_worker
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - auto::tag
    - bthread::get_or_new_task_control
    - TaskControl*::choose_one_group
    - CHECK_EQ
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 311
    functionName: bthread::can_run_thread_local
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 318
    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:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 325
    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:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 331
    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:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 42
    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: 95
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 95
    functionName: bthread::get_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 7
    functionsReached: []
    linkageType: ''
    returnType: TaskControl
    signature: TaskControl * get_task_control()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:99,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:103,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/bthread.cpp:104,1
    - Dst: TaskControl::TaskControl
      Src: /src/brpc/src/bthread/bthread.cpp:108,1
    - Dst: TaskControl*::init
      Src: /src/brpc/src/bthread/bthread.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:116,1
    - Dst: butil::atomic*::store
      Src: /src/brpc/src/bthread/bthread.cpp:120,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 122
    functionName: bthread::get_or_new_task_control
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - LOG
    - TaskControl::TaskControl
    - butil::atomic*::store
    - TaskControl*::init
    - butil::atomic*::load
    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:132,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:134,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/bthread.cpp:140,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/bthread.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:142,1
    - Dst: bthread::make_tid
      Src: /src/brpc/src/bthread/bthread.cpp:147,1
    - Dst: TaskControl*::_task_tracer::set_running_status
      Src: /src/brpc/src/bthread/bthread.cpp:149,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/bthread.cpp:149,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/bthread/bthread.cpp:152,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:156,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/bthread.cpp:157,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:167,1
    - Dst: WaitForTracing
      Src: /src/brpc/src/bthread/bthread.cpp:167,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:169,1
    - Dst: set_status
      Src: /src/brpc/src/bthread/bthread.cpp:169,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/bthread.cpp:172,1
    - Dst: bthread::get_slot
      Src: /src/brpc/src/bthread/bthread.cpp:172,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 31
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 177
    functionName: bthread::init_for_pthread_stack_trace
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - TaskControl*::_task_tracer::set_running_status
    - butil::return_resource
    - bthread::get_slot
    - bthread::make_tid
    - BAIDU_SCOPED_LOCK
    - set_status
    - bthread::TaskTracer::set_end_status_unsafe
    - syscall
    - LOG
    - WaitForTracing
    - bthread::get_task_control
    - BAIDU_UNLIKELY
    - butil::get_resource
    - butil::thread_atexit
    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:180,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:185,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 186
    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:189,1
    - Dst: TaskControl*::stack_trace
      Src: /src/brpc/src/bthread/bthread.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 194
    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: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:200,1
    - Dst: TaskControl*::get_living_bthreads
      Src: /src/brpc/src/bthread/bthread.cpp:205,1
    - Dst: auto::empty
      Src: /src/brpc/src/bthread/bthread.cpp:206,1
    - Dst: bthread::print_task
      Src: /src/brpc/src/bthread/bthread.cpp:211,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - enable_trace
    argTypes:
    - std::ostream
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 199
    functionDepth: 1
    functionLinenumber: 199
    functionLinenumberEnd: 213
    functionName: bthread::print_living_tasks
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - bthread::print_task
    - auto::empty
    - TaskControl*::get_living_bthreads
    linkageType: ''
    returnType: void
    signature: void print_living_tasks(std::ostream& os, bool enable_trace)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:217,1
    - Dst: auto::add_workers
      Src: /src/brpc/src/bthread/bthread.cpp:219,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 222
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 222
    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:231,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:235,1
    - Dst: TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:236,1
    - Dst: bthread::add_workers_for_each_tag
      Src: /src/brpc/src/bthread/bthread.cpp:238,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 243
      start: 224
    functionDepth: 1
    functionLinenumber: 224
    functionLinenumberEnd: 243
    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:251,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:252,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:257,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 259
    functionName: bthread::validate_bthread_current_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - auto::concurrency
    - 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:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 263
    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:272,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:285,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:287,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:288,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/bthread.cpp:294,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/bthread.cpp:294,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/bthread.cpp:296,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/bthread.cpp:300,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 17
    argCount: 4
    argNames:
    - tid
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 267
    functionDepth: 2
    functionLinenumber: 267
    functionLinenumberEnd: 301
    functionName: bthread::start_from_non_worker
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - auto::tag
    - bthread::get_or_new_task_control
    - TaskControl*::choose_one_group
    - CHECK_EQ
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 311
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 311
    functionName: bthread::can_run_thread_local
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:318,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 318
    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:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 325
    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:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 331
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:342,1
    - Dst: bthread::can_run_thread_local
      Src: /src/brpc/src/bthread/bthread.cpp:345,1
    - Dst: bthread::TaskGroup::start_foreground
      Src: /src/brpc/src/bthread/bthread.cpp:346,1
    - Dst: bthread::start_from_non_worker
      Src: /src/brpc/src/bthread/bthread.cpp:349,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: 350
      start: 338
    functionDepth: 3
    functionLinenumber: 338
    functionLinenumberEnd: 350
    functionName: bthread_start_urgent
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 139
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::start_from_non_worker
    - bthread::TaskGroup::start_foreground
    - bthread::can_run_thread_local
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:356,1
    - Dst: bthread::can_run_thread_local
      Src: /src/brpc/src/bthread/bthread.cpp:359,1
    - Dst: bthread::start_from_non_worker
      Src: /src/brpc/src/bthread/bthread.cpp:363,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: 364
      start: 352
    functionDepth: 3
    functionLinenumber: 352
    functionLinenumberEnd: 364
    functionName: bthread_start_background
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 81
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::start_from_non_worker
    - bthread::can_run_thread_local
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:367,1
    - Dst: bthread::TaskGroup*::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/bthread.cpp:369,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:371,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:374,1
    - Dst: bthread::TaskGroup*::flush_nosignal_tasks_remote
      Src: /src/brpc/src/bthread/bthread.cpp:375,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 377
    functionName: bthread_flush
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 6
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::flush_nosignal_tasks_remote
    - bthread::TaskGroup*::flush_nosignal_tasks
    linkageType: ''
    returnType: void
    signature: void bthread_flush()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::interrupt
      Src: /src/brpc/src/bthread/bthread.cpp:380,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:380,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 381
      start: 379
    functionDepth: 1
    functionLinenumber: 379
    functionLinenumberEnd: 381
    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:384,1
    - Dst: bthread_interrupt
      Src: /src/brpc/src/bthread/bthread.cpp:385,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 383
    functionDepth: 2
    functionLinenumber: 383
    functionLinenumberEnd: 386
    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:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 388
    functionDepth: 1
    functionLinenumber: 388
    functionLinenumberEnd: 390
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:393,1
    - Dst: bthread::TaskGroup*::is_current_main_task
      Src: /src/brpc/src/bthread/bthread.cpp:397,1
    - Dst: bthread::TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/bthread.cpp:398,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 401
    functionName: bthread_self
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 25
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::is_current_main_task
    - bthread::TaskGroup*::current_tid
    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: 405
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 405
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:408,1
    - Dst: bthread::TaskGroup*::is_current_main_task
      Src: /src/brpc/src/bthread/bthread.cpp:409,1
    - Dst: bthread::ExitException::ExitException
      Src: /src/brpc/src/bthread/bthread.cpp:410,1
    - Dst: pthread_exit
      Src: /src/brpc/src/bthread/bthread.cpp:412,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 6
    argCount: 1
    argNames:
    - retval
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 407
    functionDepth: 1
    functionLinenumber: 407
    functionLinenumberEnd: 414
    functionName: bthread_exit
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tid
    - thread_return
    argTypes:
    - bthread_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 418
    functionName: bthread_join
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 201
    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: 423
      start: 420
    functionDepth: 0
    functionLinenumber: 420
    functionLinenumberEnd: 423
    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: 427
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 427
    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:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tid
    - attr
    argTypes:
    - bthread_t
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 431
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 431
    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: 435
      start: 433
    functionDepth: 0
    functionLinenumber: 433
    functionLinenumberEnd: 435
    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:439,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:452,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:454,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:456,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:460,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:461,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:471,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:472,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:474,1
    - Dst: bthread::TaskControl*::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:475,1
    - Dst: bthread::add_workers_for_each_tag
      Src: /src/brpc/src/bthread/bthread.cpp:479,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 43
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 437
    functionDepth: 1
    functionLinenumber: 437
    functionLinenumberEnd: 483
    functionName: bthread_setconcurrency
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 34
    functionsReached:
    - bthread::add_workers_for_each_tag
    - BAIDU_SCOPED_LOCK
    - LOG
    - bthread::get_task_control
    - 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:486,1
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:487,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:491,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 485
    functionDepth: 1
    functionLinenumber: 485
    functionLinenumberEnd: 492
    functionName: bthread_getconcurrency_by_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_task_control
    - auto::concurrency
    - 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:501,1
    - Dst: bthread::get_or_new_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:504,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/bthread.cpp:505,1
    - Dst: auto::concurrency
      Src: /src/brpc/src/bthread/bthread.cpp:506,1
    - Dst: auto::add_workers
      Src: /src/brpc/src/bthread/bthread.cpp:510,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/bthread.cpp:514,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - num
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 519
    functionName: bthread_setconcurrency_by_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached:
    - auto::add_workers
    - auto::concurrency
    - BAIDU_SCOPED_LOCK
    - LOG
    - bthread::get_or_new_task_control
    linkageType: ''
    returnType: int
    signature: int bthread_setconcurrency_by_tag(int num, bthread_tag_t tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:522,1
    - Dst: bthread::TaskGroup*::current_task
      Src: /src/brpc/src/bthread/bthread.cpp:524,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 521
    functionDepth: 1
    functionLinenumber: 521
    functionLinenumberEnd: 531
    functionName: bthread_about_to_quit
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:535,1
    - Dst: bthread::get_or_create_global_timer_thread
      Src: /src/brpc/src/bthread/bthread.cpp:539,1
    - Dst: bthread::TimerThread*::schedule
      Src: /src/brpc/src/bthread/bthread.cpp:543,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - id
    - abstime
    - arg
    argTypes:
    - bthread_timer_t*
    - timespec
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 533
    functionDepth: 2
    functionLinenumber: 533
    functionLinenumberEnd: 549
    functionName: bthread_timer_add
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - bthread::get_or_create_global_timer_thread
    - bthread::get_or_new_task_control
    - bthread::TimerThread*::schedule
    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:552,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/bthread.cpp:554,1
    - Dst: bthread::TimerThread*::unschedule
      Src: /src/brpc/src/bthread/bthread.cpp:558,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_timer_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 551
    functionDepth: 1
    functionLinenumber: 551
    functionLinenumberEnd: 564
    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:567,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/bthread.cpp:568,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/bthread.cpp:569,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/bthread.cpp:571,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - microseconds
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 566
    functionDepth: 1
    functionLinenumber: 566
    functionLinenumberEnd: 572
    functionName: bthread_usleep
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 270
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup::usleep
    - 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:575,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/bthread.cpp:576,1
    - Dst: bthread::TaskGroup::yield
      Src: /src/brpc/src/bthread/bthread.cpp:577,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/bthread.cpp:581,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 582
    functionName: bthread_yield
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup::yield
    - sched_yield
    - 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: 590
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 590
    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: 598
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 598
    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:
    - Dst: bthread::get_task_control
      Src: /src/brpc/src/bthread/bthread.cpp:601,1
    - Dst: bthread::TaskControl*::stop_and_join
      Src: /src/brpc/src/bthread/bthread.cpp:603,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 600
    functionDepth: 1
    functionLinenumber: 600
    functionLinenumberEnd: 605
    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:610,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 620
    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:623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 622
    functionDepth: 0
    functionLinenumber: 622
    functionLinenumberEnd: 625
    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:631,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - list
    - id
    argTypes:
    - bthread_list_t*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 632
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 632
    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:638,1
    - Dst: bthread::TidStopper
      Src: /src/brpc/src/bthread/bthread.cpp:638,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 634
    functionDepth: 0
    functionLinenumber: 634
    functionLinenumberEnd: 640
    functionName: bthread_list_stop
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - static_cast<bthread::TidList*>
    - bthread::TidStopper
    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:646,1
    - Dst: bthread::TidJoiner
      Src: /src/brpc/src/bthread/bthread.cpp:646,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - list
    argTypes:
    - bthread_list_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 648
      start: 642
    functionDepth: 0
    functionLinenumber: 642
    functionLinenumberEnd: 648
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:651,1
    - Dst: bthread::TaskGroup*::tag
      Src: /src/brpc/src/bthread/bthread.cpp:652,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 653
      start: 650
    functionDepth: 1
    functionLinenumber: 650
    functionLinenumberEnd: 653
    functionName: bthread_self_tag
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 12
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::tag
    linkageType: ''
    returnType: bthread_tag_t
    signature: bthread_tag_t bthread_self_tag(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/bthread.cpp:656,1
    - Dst: bthread::TaskGroup*::is_current_main_task
      Src: /src/brpc/src/bthread/bthread.cpp:657,1
    - Dst: bthread::TaskGroup*::current_task_cpu_clock_ns
      Src: /src/brpc/src/bthread/bthread.cpp:658,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 661
    functionName: bthread_cpu_clock_ns
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::TaskGroup*::is_current_main_task
    - bthread::TaskGroup*::current_task_cpu_clock_ns
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t bthread_cpu_clock_ns(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 9
    argCount: 3
    argNames:
    - create_fn
    - destroy_fn
    - end_fn
    argTypes:
    - bthread_create_span_fn
    - bthread_destroy_span_fn
    - bthread_end_span_fn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 676
    functionName: bthread_set_span_funcs
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int bthread_set_span_funcs(bthread_create_span_fn create_fn,\n                            bthread_destroy_span_fn
      destroy_fn,\n                            bthread_end_span_fn end_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strncpy
      Src: /src/brpc/src/bthread/bthread.cpp:682,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - attr
    - name
    argTypes:
    - bthread_attr_t*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 685
      start: 680
    functionDepth: 0
    functionLinenumber: 680
    functionLinenumberEnd: 685
    functionName: bthread_attr_set_name
    functionSourceFile: /src/brpc/src/bthread/bthread.cpp
    functionUses: 0
    functionsReached:
    - strncpy
    linkageType: ''
    returnType: void
    signature: void bthread_attr_set_name(bthread_attr_t* attr, const char* name)
  - 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:116,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/butex.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: bthread::Butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - FastPthreadMutex::FastPthreadMutex
    - butil::atomic::atomic
    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: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    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: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    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:116,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/butex.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 119
      start: 112
    functionDepth: 1
    functionLinenumber: 112
    functionLinenumberEnd: 119
    functionName: bthread::Butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - FastPthreadMutex::FastPthreadMutex
    - butil::atomic::atomic
    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: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    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: 114
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 114
    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:137,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/butex.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pw
    argTypes:
    - ButexPthreadWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    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:155,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:155,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/butex.cpp:156,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/butex.cpp:160,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:161,1
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:175,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:178,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 2
    argNames:
    - ' pw'
    - abstime
    argTypes:
    - ButexPthreadWaiter
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 147
    functionDepth: 1
    functionLinenumber: 147
    functionLinenumberEnd: 188
    functionName: bthread::wait_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::timespec_to_microseconds
    - butil::microseconds_to_timespec
    - sig::load
    - bthread::erase_from_butex
    - bthread::futex_wait_private
    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:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - w
    - timer_thread
    argTypes:
    - ButexBthreadWaiter*
    - TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 205
    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:265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 270
    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:276,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:277,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:277,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/butex.cpp:278,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - butex
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 279
    functionName: bthread::butex_destroy
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - static_cast<Butex*>
    - container_of
    - butil::return_object
    - static_cast<butil::atomic<int>*>
    linkageType: ''
    returnType: void
    signature: void butex_destroy(void* butex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:283,1
    - Dst: auto::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: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 285
    functionName: bthread::is_same_tag
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - auto::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: 2
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:294,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - tag
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 293
    functionDepth: 2
    functionLinenumber: 293
    functionLinenumberEnd: 296
    functionName: bthread::get_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:300,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/butex.cpp:302,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - g
    - next_meta
    - nosignal
    argTypes:
    - TaskGroup*
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: bthread::run_in_local_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::exchange
    - TaskGroup*::ready_to_run
    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:307,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:307,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:310,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:311,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:314,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:315,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:316,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:319,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:319,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:322,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:323,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:323,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:324,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:325,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:326,1
    - Dst: TaskGroup*::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:328,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:328,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/butex.cpp:328,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 306
    functionDepth: 3
    functionLinenumber: 306
    functionLinenumberEnd: 331
    functionName: bthread::butex_wake
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 8
    functionsReached:
    - Butex*::waiters::head
    - bthread::get_task_group
    - bthread::run_in_local_task_group
    - BAIDU_SCOPED_LOCK
    - bthread::unsleep_if_necessary
    - bthread::check_nosignal
    - TaskGroup*::tag
    - Butex*::waiters::empty
    - ButexWaiter*::RemoveFromList
    - bthread::wakeup_pthread
    - TaskGroup*::ready_to_run_remote
    - container_of
    - ButexWaiter*::container::store
    - static_cast<ButexBthreadWaiter*>
    - bthread::get_global_timer_thread
    - static_cast<ButexPthreadWaiter*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<butil::atomic<int>*>
    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:334,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:334,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:339,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:340,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:341,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:342,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:343,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:345,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:347,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:353,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:354,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:355,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:356,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:357,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:360,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:364,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:366,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:367,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:368,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:369,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:369,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:371,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:373,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:374,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:375,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:376,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:376,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:377,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:378,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:379,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:382,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:382,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:384,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:384,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:385,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:388,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:389,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:390,1
    - Dst: auto::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:392,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:392,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:392,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 3
    argNames:
    - arg
    - n
    - nosignal
    argTypes:
    - void*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 333
    functionDepth: 3
    functionLinenumber: 333
    functionLinenumberEnd: 395
    functionName: bthread::butex_wake_n
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - bthread::get_task_group
    - butil::FlatMap::begin
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::FlatMap::end
    - bthread::check_nosignal
    - auto::ready_to_run_general
    - auto::ready_to_run_remote
    - Butex*::waiters::empty
    - ButexWaiter*::RemoveFromList
    - auto::flush_nosignal_tasks_general
    - bthread::get_global_timer_thread
    - static_cast<ButexBthreadWaiter*>
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<butil::atomic<int>*>
    - ButexWaiterList::tail
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::head
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::unsleep_if_necessary
    - static_cast<ButexPthreadWaiter*>
    - bthread::run_in_local_task_group
    - ButexWaiterList::Append
    - auto::tag
    - bthread::wakeup_pthread
    - container_of
    - ButexWaiter*::container::store
    - butil::FlatMap::init
    - ButexWaiterList::empty
    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:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 397
    functionDepth: 4
    functionLinenumber: 397
    functionLinenumberEnd: 399
    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:402,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:402,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:408,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:409,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:410,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:411,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:415,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:416,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:421,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:422,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:427,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:432,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:433,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:434,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:435,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:436,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:440,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:444,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:447,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:447,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:448,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:449,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:449,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:450,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:451,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:452,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:454,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:455,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:455,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:457,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 2
    argNames:
    - arg
    - excluded_bthread
    argTypes:
    - void*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 401
    functionDepth: 3
    functionLinenumber: 401
    functionLinenumberEnd: 460
    functionName: bthread::butex_wake_except
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - bthread::get_task_group
    - butil::FlatMap::begin
    - butil::FlatMap::end
    - auto::ready_to_run_general
    - Butex*::waiters::empty
    - ButexWaiter*::RemoveFromList
    - auto::flush_nosignal_tasks_general
    - bthread::get_global_timer_thread
    - static_cast<ButexBthreadWaiter*>
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<butil::atomic<int>*>
    - ButexWaiterList::tail
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::head
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::unsleep_if_necessary
    - Butex*::waiters::Append
    - static_cast<ButexPthreadWaiter*>
    - ButexWaiterList::Append
    - auto::tag
    - bthread::wakeup_pthread
    - container_of
    - ButexWaiter*::container::store
    - butil::FlatMap::init
    - ButexWaiterList::empty
    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:463,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:463,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:464,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:464,1
    - Dst: butil::double_lock
      Src: /src/brpc/src/bthread/butex.cpp:470,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:471,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:475,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:476,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:477,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:479,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:480,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:481,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:482,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:483,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:488,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:488,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:491,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:492,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:492,1
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:493,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:494,1
    - Dst: bthread::TaskGroup::exchange
      Src: /src/brpc/src/bthread/butex.cpp:497,1
    - Dst: ButexBthreadWaiter*::control::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:499,1
    - Dst: auto::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - arg
    - arg2
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 462
    functionDepth: 2
    functionLinenumber: 462
    functionLinenumberEnd: 503
    functionName: bthread::butex_requeue
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - bthread::is_same_tag
    - ButexBthreadWaiter*::control::choose_one_group
    - bthread::unsleep_if_necessary
    - auto::ready_to_run_remote
    - Butex*::waiters::empty
    - Butex*::waiters::Append
    - ButexWaiter*::RemoveFromList
    - bthread::wakeup_pthread
    - bthread::TaskGroup::exchange
    - container_of
    - ButexWaiter*::container::store
    - static_cast<ButexBthreadWaiter*>
    - bthread::get_global_timer_thread
    - static_cast<ButexPthreadWaiter*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::double_lock
    - static_cast<butil::atomic<int>*>
    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:507,1
    - Dst: static_cast<ButexWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 506
    functionDepth: 1
    functionLinenumber: 506
    functionLinenumberEnd: 508
    functionName: bthread::erase_from_butex_and_wakeup
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - bthread::erase_from_butex
    - static_cast<ButexWaiter*>
    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:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bw
    argTypes:
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 513
    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:522,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:524,1
    - Dst: ButexWaiter*::container::load
      Src: /src/brpc/src/bthread/butex.cpp:525,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:526,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:527,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:529,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:537,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:538,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:539,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:541,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:542,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - bw
    - wakeup
    - state
    argTypes:
    - ButexWaiter*
    - bool
    - WaiterState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 515
    functionDepth: 3
    functionLinenumber: 515
    functionLinenumberEnd: 547
    functionName: bthread::erase_from_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 3
    functionsReached:
    - bthread::get_task_group
    - BAIDU_SCOPED_LOCK
    - auto::ready_to_run_general
    - ButexWaiter*::container::load
    - ButexWaiter*::RemoveFromList
    - bthread::wakeup_pthread
    - ButexWaiter*::container::store
    - static_cast<ButexBthreadWaiter*>
    - static_cast<ButexPthreadWaiter*>
    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:555,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:573,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:574,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:579,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:581,1
    - Dst: ButexBthreadWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:583,1
    - Dst: ButexBthreadWaiter*::control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/butex.cpp:585,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:588,1
    - Dst: bthread::erase_from_butex_and_wakeup
      Src: /src/brpc/src/bthread/butex.cpp:592,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:604,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 554
    functionDepth: 2
    functionLinenumber: 554
    functionLinenumberEnd: 615
    functionName: bthread::wait_for_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::Prepend
    - BAIDU_SCOPED_LOCK
    - Butex*::value::load
    - static_cast<WaitForButexArgs*>
    - Butex*::waiters::Append
    - ButexBthreadWaiter*::control::_task_tracer::set_status
    - bthread::erase_from_butex_and_wakeup
    - ButexBthreadWaiter*::container::store
    - bthread::get_global_timer_thread
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:622,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:626,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:627,1
    - Dst: Butex*::waiter_lock::lock
      Src: /src/brpc/src/bthread/butex.cpp:629,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:630,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:631,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:635,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:642,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:644,1
    - Dst: ButexPthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:646,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:647,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:650,1
    - Dst: bthread::wait_pthread
      Src: /src/brpc/src/bthread/butex.cpp:653,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:661,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:661,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: 673
      start: 617
    functionDepth: 2
    functionLinenumber: 617
    functionLinenumberEnd: 673
    functionName: bthread::butex_wait_from_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiter_lock::lock
    - Butex*::waiter_lock::unlock
    - Butex*::value::load
    - Butex*::waiters::Prepend
    - TaskGroup*::current_task
    - BT_LOOP_WHEN
    - Butex*::waiters::Append
    - ButexPthreadWaiter::container::store
    - TaskMeta*::current_waiter::exchange
    - TaskMeta*::current_waiter::store
    - ButexPthreadWaiter::sig::store
    - bthread::wait_pthread
    - bthread::butex_waiter_count
    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:676,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:676,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:677,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/butex.cpp:681,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:684,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/butex.cpp:685,1
    - Dst: bthread::butex_wait_from_pthread
      Src: /src/brpc/src/bthread/butex.cpp:686,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/butex.cpp:690,1
    - Dst: ButexBthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:691,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:692,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/butex.cpp:697,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/butex.cpp:703,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:704,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:711,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:717,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/butex.cpp:719,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:724,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:724,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:724,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:729,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:729,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 48
    argCount: 4
    argNames:
    - arg
    - expected_value
    - abstime
    - prepend
    argTypes:
    - void*
    - int
    - timespec*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 675
    functionDepth: 3
    functionLinenumber: 675
    functionLinenumberEnd: 754
    functionName: bthread::butex_wait
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - butil::gettimeofday_us
    - std::atomic_thread_fence
    - TaskGroup*::current_task
    - BT_LOOP_WHEN
    - bthread::TaskGroup::sched
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::control
    - Butex*::value::load
    - ButexBthreadWaiter::task_meta::current_waiter::store
    - butil::timespec_to_microseconds
    - bthread::get_global_timer_thread
    - bthread::butex_waiter_count
    - TaskGroup*::set_remained
    - TaskGroup*::is_current_pthread_task
    - static_cast<butil::atomic<int>*>
    - bthread::unsleep_if_necessary
    - ButexBthreadWaiter::container::store
    - TaskGroup*::current_tid
    - bthread::butex_wait_from_pthread
    - container_of
    - ButexBthreadWaiter::task_meta::current_waiter::exchange
    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:137,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/butex.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pw
    argTypes:
    - ButexPthreadWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    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:155,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:155,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/butex.cpp:156,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/butex.cpp:160,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:161,1
    - Dst: bthread::erase_from_butex
      Src: /src/brpc/src/bthread/butex.cpp:175,1
    - Dst: sig::load
      Src: /src/brpc/src/bthread/butex.cpp:178,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 27
    argCount: 2
    argNames:
    - ' pw'
    - abstime
    argTypes:
    - ButexPthreadWaiter
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 147
    functionDepth: 4
    functionLinenumber: 147
    functionLinenumberEnd: 188
    functionName: bthread::wait_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - butil::timespec_to_microseconds
    - butil::microseconds_to_timespec
    - sig::load
    - bthread::erase_from_butex
    - bthread::futex_wait_private
    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:199,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - w
    - timer_thread
    argTypes:
    - ButexBthreadWaiter*
    - TimerThread*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 194
    functionDepth: 0
    functionLinenumber: 194
    functionLinenumberEnd: 205
    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:265,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 270
    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:276,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:277,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:277,1
    - Dst: butil::return_object
      Src: /src/brpc/src/bthread/butex.cpp:278,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - butex
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 272
    functionDepth: 1
    functionLinenumber: 272
    functionLinenumberEnd: 279
    functionName: bthread::butex_destroy
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - static_cast<Butex*>
    - container_of
    - butil::return_object
    - static_cast<butil::atomic<int>*>
    linkageType: ''
    returnType: void
    signature: void butex_destroy(void* butex)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:283,1
    - Dst: auto::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: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 285
    functionName: bthread::is_same_tag
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 3
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - auto::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: 2
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:294,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - tag
    argTypes:
    - TaskControl*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 293
    functionDepth: 2
    functionLinenumber: 293
    functionLinenumberEnd: 296
    functionName: bthread::get_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 4
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:300,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/butex.cpp:302,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - g
    - next_meta
    - nosignal
    argTypes:
    - TaskGroup*
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: bthread::run_in_local_task_group
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 2
    functionsReached:
    - bthread::TaskGroup::exchange
    - TaskGroup*::ready_to_run
    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:307,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:307,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:310,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:311,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:314,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:315,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:316,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:319,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:319,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:322,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:323,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:323,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:324,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:325,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:326,1
    - Dst: TaskGroup*::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:328,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:328,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/butex.cpp:328,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 306
    functionDepth: 3
    functionLinenumber: 306
    functionLinenumberEnd: 331
    functionName: bthread::butex_wake
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 8
    functionsReached:
    - Butex*::waiters::head
    - bthread::get_task_group
    - bthread::run_in_local_task_group
    - BAIDU_SCOPED_LOCK
    - bthread::unsleep_if_necessary
    - bthread::check_nosignal
    - TaskGroup*::tag
    - Butex*::waiters::empty
    - ButexWaiter*::RemoveFromList
    - bthread::wakeup_pthread
    - TaskGroup*::ready_to_run_remote
    - container_of
    - ButexWaiter*::container::store
    - static_cast<ButexBthreadWaiter*>
    - bthread::get_global_timer_thread
    - static_cast<ButexPthreadWaiter*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<butil::atomic<int>*>
    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:334,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:334,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:339,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:340,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:341,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:342,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:343,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:345,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:347,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:353,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:354,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:355,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:356,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:357,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:360,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:364,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:366,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:367,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:368,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:369,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:369,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:371,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:373,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:374,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:375,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:376,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:376,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:377,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:378,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:379,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:382,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:382,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:384,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:384,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:385,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:388,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:389,1
    - Dst: bthread::run_in_local_task_group
      Src: /src/brpc/src/bthread/butex.cpp:390,1
    - Dst: auto::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:392,1
    - Dst: bthread::check_nosignal
      Src: /src/brpc/src/bthread/butex.cpp:392,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:392,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 42
    argCount: 3
    argNames:
    - arg
    - n
    - nosignal
    argTypes:
    - void*
    - size_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 333
    functionDepth: 3
    functionLinenumber: 333
    functionLinenumberEnd: 395
    functionName: bthread::butex_wake_n
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - Butex*::waiters::head
    - bthread::get_task_group
    - butil::FlatMap::begin
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::FlatMap::end
    - bthread::check_nosignal
    - auto::ready_to_run_general
    - auto::ready_to_run_remote
    - Butex*::waiters::empty
    - ButexWaiter*::RemoveFromList
    - auto::flush_nosignal_tasks_general
    - bthread::get_global_timer_thread
    - static_cast<ButexBthreadWaiter*>
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<butil::atomic<int>*>
    - ButexWaiterList::tail
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::head
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::unsleep_if_necessary
    - static_cast<ButexPthreadWaiter*>
    - bthread::run_in_local_task_group
    - ButexWaiterList::Append
    - auto::tag
    - bthread::wakeup_pthread
    - container_of
    - ButexWaiter*::container::store
    - butil::FlatMap::init
    - ButexWaiterList::empty
    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:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - nosignal
    argTypes:
    - void*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 397
    functionDepth: 4
    functionLinenumber: 397
    functionLinenumberEnd: 399
    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:402,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:402,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:408,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:409,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:410,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:411,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:415,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:416,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:421,1
    - Dst: ButexWaiterList::Append
      Src: /src/brpc/src/bthread/butex.cpp:422,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:427,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:432,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:433,1
    - Dst: ButexWaiterList::head
      Src: /src/brpc/src/bthread/butex.cpp:434,1
    - Dst: ButexPthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:435,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:436,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:440,1
    - Dst: butil::FlatMap::init
      Src: /src/brpc/src/bthread/butex.cpp:444,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:447,1
    - Dst: ButexWaiterList::tail
      Src: /src/brpc/src/bthread/butex.cpp:447,1
    - Dst: ButexBthreadWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:448,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:449,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:449,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:450,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:451,1
    - Dst: auto::tag
      Src: /src/brpc/src/bthread/butex.cpp:452,1
    - Dst: ButexWaiterList::empty
      Src: /src/brpc/src/bthread/butex.cpp:454,1
    - Dst: butil::FlatMap::begin
      Src: /src/brpc/src/bthread/butex.cpp:455,1
    - Dst: butil::FlatMap::end
      Src: /src/brpc/src/bthread/butex.cpp:455,1
    - Dst: auto::flush_nosignal_tasks_general
      Src: /src/brpc/src/bthread/butex.cpp:457,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 2
    argNames:
    - arg
    - excluded_bthread
    argTypes:
    - void*
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 401
    functionDepth: 3
    functionLinenumber: 401
    functionLinenumberEnd: 460
    functionName: bthread::butex_wake_except
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - bthread::get_task_group
    - butil::FlatMap::begin
    - butil::FlatMap::end
    - auto::ready_to_run_general
    - Butex*::waiters::empty
    - ButexWaiter*::RemoveFromList
    - auto::flush_nosignal_tasks_general
    - bthread::get_global_timer_thread
    - static_cast<ButexBthreadWaiter*>
    - ButexBthreadWaiter*::RemoveFromList
    - static_cast<butil::atomic<int>*>
    - ButexWaiterList::tail
    - BAIDU_SCOPED_LOCK
    - ButexWaiterList::head
    - ButexPthreadWaiter*::RemoveFromList
    - bthread::unsleep_if_necessary
    - Butex*::waiters::Append
    - static_cast<ButexPthreadWaiter*>
    - ButexWaiterList::Append
    - auto::tag
    - bthread::wakeup_pthread
    - container_of
    - ButexWaiter*::container::store
    - butil::FlatMap::init
    - ButexWaiterList::empty
    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:463,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:463,1
    - Dst: container_of
      Src: /src/brpc/src/bthread/butex.cpp:464,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:464,1
    - Dst: butil::double_lock
      Src: /src/brpc/src/bthread/butex.cpp:470,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:471,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:475,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:476,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:477,1
    - Dst: Butex*::waiters::empty
      Src: /src/brpc/src/bthread/butex.cpp:479,1
    - Dst: Butex*::waiters::head
      Src: /src/brpc/src/bthread/butex.cpp:480,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:481,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:482,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:483,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:488,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:488,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:491,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:492,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:492,1
    - Dst: bthread::is_same_tag
      Src: /src/brpc/src/bthread/butex.cpp:493,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:494,1
    - Dst: bthread::TaskGroup::exchange
      Src: /src/brpc/src/bthread/butex.cpp:497,1
    - Dst: ButexBthreadWaiter*::control::choose_one_group
      Src: /src/brpc/src/bthread/butex.cpp:499,1
    - Dst: auto::ready_to_run_remote
      Src: /src/brpc/src/bthread/butex.cpp:500,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - arg
    - arg2
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 503
      start: 462
    functionDepth: 2
    functionLinenumber: 462
    functionLinenumberEnd: 503
    functionName: bthread::butex_requeue
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::head
    - bthread::is_same_tag
    - ButexBthreadWaiter*::control::choose_one_group
    - bthread::unsleep_if_necessary
    - auto::ready_to_run_remote
    - Butex*::waiters::empty
    - Butex*::waiters::Append
    - ButexWaiter*::RemoveFromList
    - bthread::wakeup_pthread
    - bthread::TaskGroup::exchange
    - container_of
    - ButexWaiter*::container::store
    - static_cast<ButexBthreadWaiter*>
    - bthread::get_global_timer_thread
    - static_cast<ButexPthreadWaiter*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::double_lock
    - static_cast<butil::atomic<int>*>
    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:507,1
    - Dst: static_cast<ButexWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:507,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 508
      start: 506
    functionDepth: 4
    functionLinenumber: 506
    functionLinenumberEnd: 508
    functionName: bthread::erase_from_butex_and_wakeup
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - bthread::erase_from_butex
    - static_cast<ButexWaiter*>
    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:512,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bw
    argTypes:
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 511
    functionDepth: 4
    functionLinenumber: 511
    functionLinenumberEnd: 513
    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:522,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:524,1
    - Dst: ButexWaiter*::container::load
      Src: /src/brpc/src/bthread/butex.cpp:525,1
    - Dst: ButexWaiter*::RemoveFromList
      Src: /src/brpc/src/bthread/butex.cpp:526,1
    - Dst: ButexWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:527,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:529,1
    - Dst: static_cast<ButexBthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:537,1
    - Dst: bthread::get_task_group
      Src: /src/brpc/src/bthread/butex.cpp:538,1
    - Dst: auto::ready_to_run_general
      Src: /src/brpc/src/bthread/butex.cpp:539,1
    - Dst: static_cast<ButexPthreadWaiter*>
      Src: /src/brpc/src/bthread/butex.cpp:541,1
    - Dst: bthread::wakeup_pthread
      Src: /src/brpc/src/bthread/butex.cpp:542,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - bw
    - wakeup
    - state
    argTypes:
    - ButexWaiter*
    - bool
    - WaiterState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 515
    functionDepth: 3
    functionLinenumber: 515
    functionLinenumberEnd: 547
    functionName: bthread::erase_from_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 6
    functionsReached:
    - bthread::get_task_group
    - BAIDU_SCOPED_LOCK
    - auto::ready_to_run_general
    - ButexWaiter*::container::load
    - ButexWaiter*::RemoveFromList
    - bthread::wakeup_pthread
    - ButexWaiter*::container::store
    - static_cast<ButexBthreadWaiter*>
    - static_cast<ButexPthreadWaiter*>
    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:555,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/butex.cpp:573,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:574,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:579,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:581,1
    - Dst: ButexBthreadWaiter*::container::store
      Src: /src/brpc/src/bthread/butex.cpp:583,1
    - Dst: ButexBthreadWaiter*::control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/butex.cpp:585,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:588,1
    - Dst: bthread::erase_from_butex_and_wakeup
      Src: /src/brpc/src/bthread/butex.cpp:592,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:604,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 554
    functionDepth: 2
    functionLinenumber: 554
    functionLinenumberEnd: 615
    functionName: bthread::wait_for_butex
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 0
    functionsReached:
    - Butex*::waiters::Prepend
    - BAIDU_SCOPED_LOCK
    - Butex*::value::load
    - static_cast<WaitForButexArgs*>
    - Butex*::waiters::Append
    - ButexBthreadWaiter*::control::_task_tracer::set_status
    - bthread::erase_from_butex_and_wakeup
    - ButexBthreadWaiter*::container::store
    - bthread::get_global_timer_thread
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:622,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:626,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:627,1
    - Dst: Butex*::waiter_lock::lock
      Src: /src/brpc/src/bthread/butex.cpp:629,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:630,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:631,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:635,1
    - Dst: Butex*::waiters::Prepend
      Src: /src/brpc/src/bthread/butex.cpp:642,1
    - Dst: Butex*::waiters::Append
      Src: /src/brpc/src/bthread/butex.cpp:644,1
    - Dst: ButexPthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:646,1
    - Dst: Butex*::waiter_lock::unlock
      Src: /src/brpc/src/bthread/butex.cpp:647,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:650,1
    - Dst: bthread::wait_pthread
      Src: /src/brpc/src/bthread/butex.cpp:653,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:661,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:661,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: 673
      start: 617
    functionDepth: 2
    functionLinenumber: 617
    functionLinenumberEnd: 673
    functionName: bthread::butex_wait_from_pthread
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 1
    functionsReached:
    - Butex*::waiter_lock::lock
    - Butex*::waiter_lock::unlock
    - Butex*::value::load
    - Butex*::waiters::Prepend
    - TaskGroup*::current_task
    - BT_LOOP_WHEN
    - Butex*::waiters::Append
    - ButexPthreadWaiter::container::store
    - TaskMeta*::current_waiter::exchange
    - TaskMeta*::current_waiter::store
    - ButexPthreadWaiter::sig::store
    - bthread::wait_pthread
    - bthread::butex_waiter_count
    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:676,1
    - Dst: static_cast<butil::atomic<int>*>
      Src: /src/brpc/src/bthread/butex.cpp:676,1
    - Dst: Butex*::value::load
      Src: /src/brpc/src/bthread/butex.cpp:677,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/butex.cpp:681,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/butex.cpp:684,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/butex.cpp:685,1
    - Dst: bthread::butex_wait_from_pthread
      Src: /src/brpc/src/bthread/butex.cpp:686,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/butex.cpp:690,1
    - Dst: ButexBthreadWaiter::container::store
      Src: /src/brpc/src/bthread/butex.cpp:691,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/butex.cpp:692,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/butex.cpp:697,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/butex.cpp:703,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/butex.cpp:704,1
    - Dst: bthread::butex_waiter_count
      Src: /src/brpc/src/bthread/butex.cpp:711,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::store
      Src: /src/brpc/src/bthread/butex.cpp:717,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/butex.cpp:719,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/butex.cpp:720,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:724,1
    - Dst: bthread::unsleep_if_necessary
      Src: /src/brpc/src/bthread/butex.cpp:724,1
    - Dst: bthread::get_global_timer_thread
      Src: /src/brpc/src/bthread/butex.cpp:724,1
    - Dst: BT_LOOP_WHEN
      Src: /src/brpc/src/bthread/butex.cpp:729,1
    - Dst: ButexBthreadWaiter::task_meta::current_waiter::exchange
      Src: /src/brpc/src/bthread/butex.cpp:729,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 48
    argCount: 4
    argNames:
    - arg
    - expected_value
    - abstime
    - prepend
    argTypes:
    - void*
    - int
    - timespec*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 675
    functionDepth: 3
    functionLinenumber: 675
    functionLinenumberEnd: 754
    functionName: bthread::butex_wait
    functionSourceFile: /src/brpc/src/bthread/butex.cpp
    functionUses: 12
    functionsReached:
    - butil::gettimeofday_us
    - std::atomic_thread_fence
    - TaskGroup*::current_task
    - BT_LOOP_WHEN
    - bthread::TaskGroup::sched
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::control
    - Butex*::value::load
    - ButexBthreadWaiter::task_meta::current_waiter::store
    - butil::timespec_to_microseconds
    - bthread::get_global_timer_thread
    - bthread::butex_waiter_count
    - TaskGroup*::set_remained
    - TaskGroup*::is_current_pthread_task
    - static_cast<butil::atomic<int>*>
    - bthread::unsleep_if_necessary
    - ButexBthreadWaiter::container::store
    - TaskGroup*::current_tid
    - bthread::butex_wait_from_pthread
    - container_of
    - ButexBthreadWaiter::task_meta::current_waiter::exchange
    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: 1
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: bthread::SmallQueue::push
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::SmallQueue::empty
    - std::deque<T>::deque<T>
    - push_back
    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: 1
    functionLinenumber: 55
    functionLinenumberEnd: 70
    functionName: bthread::SmallQueue::pop
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::SmallQueue::empty
    - pop_front
    - front
    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: 1
    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::unlockable_ver
    - bthread::last_ver
    - bthread::butex_destroy
    - bthread::butex_create_checked<uint32_t>
    - 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:
    - address_resource
    - bthread::get_slot
    - Id*::last_ver
    - bthread::get_version
    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: 0
    functionLinenumber: 195
    functionLinenumberEnd: 285
    functionName: bthread::id_status
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 10
    functionsReached:
    - bthread::get_slot
    - bthread::Id*::pending_q::pop
    - SmallQueue::push
    - SmallQueue::empty
    - address_resource
    - bthread::Id*::mutex::lock
    - SmallQueue::pop
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - bthread::make_id
    - SmallQueue::size
    - bthread::Id*::pending_q::size
    - bthread::Id*::has_version
    - bthread::Id*::pending_q::push
    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
    - get_resource
    - bthread::make_id
    - CHECK
    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:
    - Id*::pending_q::empty
    - CHECK
    - get_resource
    - bthread::make_id
    - 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: 2
    functionLinenumber: 38
    functionLinenumberEnd: 54
    functionName: bthread::SmallQueue::push
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::SmallQueue::empty
    - std::deque<T>::deque<T>
    - push_back
    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: 2
    functionLinenumber: 55
    functionLinenumberEnd: 70
    functionName: bthread::SmallQueue::pop
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 0
    functionsReached:
    - bthread::SmallQueue::empty
    - pop_front
    - front
    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: 1
    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::unlockable_ver
    - bthread::last_ver
    - bthread::butex_destroy
    - bthread::butex_create_checked<uint32_t>
    - 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:
    - address_resource
    - bthread::get_slot
    - Id*::last_ver
    - bthread::get_version
    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: 0
    functionLinenumber: 195
    functionLinenumberEnd: 285
    functionName: bthread::id_status
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 10
    functionsReached:
    - bthread::get_slot
    - bthread::Id*::pending_q::pop
    - SmallQueue::push
    - SmallQueue::empty
    - address_resource
    - bthread::Id*::mutex::lock
    - SmallQueue::pop
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - bthread::make_id
    - SmallQueue::size
    - bthread::Id*::pending_q::size
    - bthread::Id*::has_version
    - bthread::Id*::pending_q::push
    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
    - get_resource
    - bthread::make_id
    - CHECK
    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:
    - Id*::pending_q::empty
    - CHECK
    - get_resource
    - bthread::make_id
    - 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:
    - bthread::get_slot
    - bthread::butex_wait
    - address_resource
    - bthread::Id*::mutex::lock
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - bthread::Id*::has_version
    - LOG_IF
    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: 4
    functionLinenumber: 462
    functionLinenumberEnd: 487
    functionName: bthread_id_about_to_destroy
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 6
    functionsReached:
    - bthread::get_slot
    - address_resource
    - bthread::Id*::mutex::lock
    - LOG
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::contended_ver
    - bthread::Id*::unlockable_ver
    - bthread::butex_wake_except
    - bthread::Id*::has_version
    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:
    - bthread::get_slot
    - bthread::Id*::end_ver
    - address_resource
    - bthread::Id*::mutex::lock
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - return_resource
    - bthread::Id*::has_version
    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: 49
    functionsReached:
    - bthread::get_slot
    - bthread::butex_wait
    - address_resource
    - bthread::Id*::mutex::lock
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    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:
    - bthread::get_slot
    - address_resource
    - bthread::Id*::mutex::lock
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    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: 4
    functionLinenumber: 567
    functionLinenumberEnd: 607
    functionName: bthread_id_unlock
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 20
    functionsReached:
    - bthread::get_slot
    - bthread::Id*::pending_q::pop
    - bthread::Id*::on_error
    - address_resource
    - bthread::Id*::on_error2
    - bthread::Id*::mutex::lock
    - LOG
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::contended_ver
    - bthread::butex_wake
    - bthread::Id*::has_version
    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: 5
    functionLinenumber: 609
    functionLinenumberEnd: 640
    functionName: bthread_id_unlock_and_destroy
    functionSourceFile: /src/brpc/src/bthread/id.cpp
    functionUses: 34
    functionsReached:
    - bthread::get_slot
    - bthread::Id*::end_ver
    - address_resource
    - bthread::Id*::pending_q::clear
    - bthread::Id*::mutex::lock
    - LOG
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::butex_wake_except
    - return_resource
    - bthread::Id*::has_version
    - bthread::butex_wake_all
    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:
    - bthread_id_list_reset2
    - std::string
    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:
    - bthread_id_list_reset2_pthreadsafe
    - std::string
    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:
    - std::string
    - bthread_id_list_reset2_bthreadsafe
    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::get_slot
    - bthread::Id*::on_error
    - address_resource
    - bthread::Id*::on_error2
    - bthread::Id*::mutex::lock
    - bthread::get_version
    - bthread::Id*::mutex::unlock
    - bthread::Id*::has_version
    - bthread::Id*::pending_q::push
    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:
    - bthread_id_list_reset2
    - bthread_id_list_destroy
    - pthread_mutex_lock
    - bthread_id_list_init
    - pthread_mutex_unlock
    - std::swap
    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:
    - bthread_id_list_reset2
    - bthread_id_list_destroy
    - bthread_id_list_init
    - bthread_mutex_lock
    - bthread_mutex_unlock
    - std::swap
    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:
    - load
    - std::fill
    - compare_exchange_strong
    - T
    - Block::Block
    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_attr_set_name
      Src: /src/brpc/src/bthread/fd.cpp:145,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/bthread/fd.cpp:146,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:150,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - epoll_size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 124
    functionDepth: 4
    functionLinenumber: 124
    functionLinenumberEnd: 154
    functionName: start
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 250
    functionsReached:
    - PLOG
    - epoll_create
    - unlock
    - bthread_attr_set_name
    - LOG
    - kqueue
    - lock
    - close
    - started
    - bthread_start_background
    linkageType: ''
    returnType: int
    signature: int start(int epoll_size)
  - BBCount: 26
    BranchProfiles: []
    Callsites:
    - Dst: started
      Src: /src/brpc/src/bthread/fd.cpp:161,1
    - Dst: pipe
      Src: /src/brpc/src/bthread/fd.cpp:176,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:177,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:182,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:186,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:188,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:190,1
    - Dst: bthread_join
      Src: /src/brpc/src/bthread/fd.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:197,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:197,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:200,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:201,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:202,1
    - Dst: get_or_new
      Src: /src/brpc/src/bthread/fd.cpp:207,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:213,1
    - Dst: butex_create_checked<EpollButex>
      Src: /src/brpc/src/bthread/fd.cpp:218,1
    - Dst: EpollButex*::store
      Src: /src/brpc/src/bthread/fd.cpp:219,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/bthread/fd.cpp:221,1
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/fd.cpp:224,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/fd.cpp:230,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:233,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:238,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:243,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:244,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:246,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:254,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:256,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:262,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:264,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:265,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:269,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/fd.cpp:270,1
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:284,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:287,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:289,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:297,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:298,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:301,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: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:306,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:307,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:309,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:310,1
    - Dst: static_cast<EpollThread*>
      Src: /src/brpc/src/bthread/fd.cpp:320,1
    - Dst: epoll_event::epoll_event
      Src: /src/brpc/src/bthread/fd.cpp:327,1
    - Dst: KEVENT::KEVENT
      Src: /src/brpc/src/bthread/fd.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:333,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:339,1
    - Dst: epoll_wait
      Src: /src/brpc/src/bthread/fd.cpp:345,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:347,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:356,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:358,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:359,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:360,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:366,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:373,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:380,1
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:382,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:384,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:387,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:390,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:391,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:397,1
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:413,1
    - Dst: fmix32
      Src: /src/brpc/src/bthread/fd.cpp:417,1
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:418,1
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/fd.cpp:427,1
    - Dst: butil::pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:437,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 143
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 160
    functionDepth: 5
    functionLinenumber: 160
    functionLinenumberEnd: 440
    functionName: stop_and_join
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 12
    functionsReached:
    - bthread_join
    - LOG
    - epoll_ctl
    - static_cast<EpollButex*>
    - get_or_new
    - PLOG
    - sched_yield
    - kevent
    - epoll_event::epoll_event
    - DLOG
    - started
    - butil::atomic*::load
    - get
    - butex_wait
    - butex_wake_all
    - butil::pthread_fd_wait
    - fetch_add
    - KEVENT::KEVENT
    - start
    - EpollButex*::store
    - butex_destroy
    - stop_and_join
    - EpollButex*::fetch_add
    - EpollButex*::load
    - pipe
    - butex_create_checked<EpollButex>
    - berror
    - static_cast<EpollThread*>
    - butil::atomic*::exchange
    - butil::atomic*::compare_exchange_strong
    - close
    - fmix32
    - epoll_wait
    - EV_SET
    linkageType: ''
    returnType: int
    signature: int stop_and_join()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: get_or_new
      Src: /src/brpc/src/bthread/fd.cpp:207,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:213,1
    - Dst: butex_create_checked<EpollButex>
      Src: /src/brpc/src/bthread/fd.cpp:218,1
    - Dst: EpollButex*::store
      Src: /src/brpc/src/bthread/fd.cpp:219,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/bthread/fd.cpp:221,1
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/fd.cpp:224,1
    - Dst: sched_yield
      Src: /src/brpc/src/bthread/fd.cpp:230,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:233,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:238,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:243,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:244,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:246,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:254,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:256,1
    - Dst: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:262,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:264,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:265,1
    - Dst: EpollButex*::load
      Src: /src/brpc/src/bthread/fd.cpp:269,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/fd.cpp:270,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 42
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 276
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 276
    functionName: fd_wait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 10
    functionsReached:
    - butex_wait
    - get_or_new
    - PLOG
    - butex_create_checked<EpollButex>
    - sched_yield
    - EpollButex*::load
    - kevent
    - EpollButex*::store
    - butil::atomic*::compare_exchange_strong
    - butex_destroy
    - epoll_ctl
    - butil::atomic*::load
    - EV_SET
    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:284,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:287,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:289,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:297,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:298,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:301,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: EV_SET
      Src: /src/brpc/src/bthread/fd.cpp:306,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:307,1
    - Dst: close
      Src: /src/brpc/src/bthread/fd.cpp:309,1
    - Dst: butil::atomic*::exchange
      Src: /src/brpc/src/bthread/fd.cpp:310,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 278
    functionDepth: 1
    functionLinenumber: 278
    functionLinenumberEnd: 312
    functionName: fd_close
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 0
    functionsReached:
    - butex_wake_all
    - butil::atomic*::exchange
    - kevent
    - EpollButex*::fetch_add
    - close
    - get
    - epoll_ctl
    - EV_SET
    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: 316
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 316
    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:327,1
    - Dst: KEVENT::KEVENT
      Src: /src/brpc/src/bthread/fd.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/fd.cpp:333,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:339,1
    - Dst: epoll_wait
      Src: /src/brpc/src/bthread/fd.cpp:345,1
    - Dst: kevent
      Src: /src/brpc/src/bthread/fd.cpp:347,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:356,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:358,1
    - Dst: berror
      Src: /src/brpc/src/bthread/fd.cpp:359,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:360,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/fd.cpp:366,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/bthread/fd.cpp:373,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:380,1
    - Dst: get
      Src: /src/brpc/src/bthread/fd.cpp:382,1
    - Dst: butil::atomic*::load
      Src: /src/brpc/src/bthread/fd.cpp:384,1
    - Dst: static_cast<EpollButex*>
      Src: /src/brpc/src/bthread/fd.cpp:387,1
    - Dst: EpollButex*::fetch_add
      Src: /src/brpc/src/bthread/fd.cpp:390,1
    - Dst: butex_wake_all
      Src: /src/brpc/src/bthread/fd.cpp:391,1
    - Dst: DLOG
      Src: /src/brpc/src/bthread/fd.cpp:397,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 400
      start: 323
    functionDepth: 1
    functionLinenumber: 323
    functionLinenumberEnd: 400
    functionName: run
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 27
    functionsReached:
    - static_cast<EpollButex*>
    - butex_wake_all
    - PLOG
    - berror
    - fetch_add
    - KEVENT::KEVENT
    - kevent
    - DLOG
    - LOG
    - butil::atomic*::load
    - EpollButex*::fetch_add
    - epoll_event::epoll_event
    - get
    - epoll_ctl
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void * run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:413,1
    - Dst: fmix32
      Src: /src/brpc/src/bthread/fd.cpp:417,1
    - Dst: start
      Src: /src/brpc/src/bthread/fd.cpp:418,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 410
    functionDepth: 5
    functionLinenumber: 410
    functionLinenumberEnd: 420
    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:427,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 432
      start: 423
    functionDepth: 6
    functionLinenumber: 423
    functionLinenumberEnd: 432
    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:437,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 438
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 438
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/fd.cpp:449,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/fd.cpp:450,1
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:451,1
    - Dst: pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:454,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 2
    argNames:
    - fd
    - events
    argTypes:
    - int
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 442
    functionDepth: 6
    functionLinenumber: 442
    functionLinenumberEnd: 455
    functionName: bthread_fd_wait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 9
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:460,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/fd.cpp:466,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/fd.cpp:467,1
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:468,1
    - Dst: pthread_fd_wait
      Src: /src/brpc/src/bthread/fd.cpp:471,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 3
    argNames:
    - fd
    - events
    - abstime
    argTypes:
    - int
    - unsigned
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 472
      start: 457
    functionDepth: 7
    functionLinenumber: 457
    functionLinenumberEnd: 472
    functionName: bthread_fd_timedwait
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 6
    functionsReached:
    - bthread_fd_wait
    - bthread::TaskGroup*::is_current_pthread_task
    - get_epoll_thread
    - pthread_fd_wait
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:514,1
    - Dst: butil::is_blocking
      Src: /src/brpc/src/bthread/fd.cpp:517,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/fd.cpp:519,1
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/bthread/fd.cpp:522,1
    - Dst: butil::make_blocking
      Src: /src/brpc/src/bthread/fd.cpp:524,1
    - Dst: test_listen_connect
      Src: /src/brpc/src/bthread/fd.cpp:528,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/src/bthread/fd.cpp:533,1
    - Dst: bthread_fd_timedwait
      Src: /src/brpc/src/bthread/fd.cpp:535,1
    - Dst: butil::is_connected
      Src: /src/brpc/src/bthread/fd.cpp:540,1
    - Dst: get_epoll_thread
      Src: /src/brpc/src/bthread/fd.cpp:549,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: 552
      start: 511
    functionDepth: 8
    functionLinenumber: 511
    functionLinenumberEnd: 552
    functionName: bthread_timed_connect
    functionSourceFile: /src/brpc/src/bthread/fd.cpp
    functionUses: 4
    functionsReached:
    - butil::is_blocking
    - get_epoll_thread
    - test_listen_connect
    - bthread_fd_timedwait
    - butil::make_non_blocking
    - butil::make_blocking
    - bthread_connect
    - butil::is_connected
    - butil::MakeScopeGuard
    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:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 548
    functionDepth: 6
    functionLinenumber: 548
    functionLinenumberEnd: 550
    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: 4
    functionLinenumber: 61
    functionLinenumberEnd: 70
    functionName: bthread_cond_signal
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 8
    functionsReached:
    - reinterpret_cast<bthread::CondInternal*>
    - bthread::butex_wake
    - butil::atomic*::fetch_add
    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: 3
    functionLinenumber: 72
    functionLinenumberEnd: 84
    functionName: bthread_cond_broadcast
    functionSourceFile: /src/brpc/src/bthread/condition_variable.cpp
    functionUses: 2
    functionsReached:
    - bthread::CondInternal*::seq::fetch_add
    - reinterpret_cast<bthread::CondInternal*>
    - bthread::butex_requeue
    - bthread::CondInternal*::m::load
    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: 9
    functionsReached:
    - reinterpret_cast<bthread::CondInternal*>
    - bthread::CondInternal*::m::compare_exchange_strong
    - bthread::CondInternal*::m::load
    - bthread::butex_wait
    - bthread_mutex_lock_contended
    - bthread::CondInternal*::seq::load
    - bthread_mutex_unlock
    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:
    - reinterpret_cast<bthread::CondInternal*>
    - bthread::CondInternal*::m::compare_exchange_strong
    - bthread::CondInternal*::m::load
    - bthread::butex_wait
    - bthread_mutex_lock_contended
    - bthread::CondInternal*::seq::load
    - bthread_mutex_unlock
    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:49,1
    - Dst: close
      Src: /src/brpc/src/bthread/task_tracer.cpp:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 54
    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:57,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:58,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:61,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:62,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:65,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 71
    functionName: TaskTracer::SignalSync::Init()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - butil::make_non_blocking
    - pipe
    - PLOG
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::SignalSync::Init()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/bthread/task_tracer.cpp:76,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/bthread/task_tracer.cpp:82,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/bthread/task_tracer.cpp:83,1
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:84,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:84,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:85,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:87,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/bthread/task_tracer.cpp:90,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:94,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:97,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:98,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 102
    functionName: TaskTracer::Result::OutputToString() const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - Symbolize
    - std::string::append
    - std::string::push_back
    - reinterpret_cast<uintptr_t>
    - std::string::reserve
    - arraysize
    linkageType: ''
    returnType: std::string
    signature: std::string TaskTracer::Result::OutputToString() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::setw
      Src: /src/brpc/src/bthread/task_tracer.cpp:110,1
    - Dst: std::setfill
      Src: /src/brpc/src/bthread/task_tracer.cpp:110,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/bthread/task_tracer.cpp:111,1
    - Dst: std::setfill
      Src: /src/brpc/src/bthread/task_tracer.cpp:112,1
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:113,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:113,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 128
    functionName: TaskTracer::Result::OutputToStream(std::ostream& os) const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - std::setw
    - Symbolize
    - std::setfill
    - reinterpret_cast<uintptr_t>
    - 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:131,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:132,1
    - Dst: RegisterSignalHandler
      Src: /src/brpc/src/bthread/task_tracer.cpp:135,1
    - Dst: unw_getcontext
      Src: /src/brpc/src/bthread/task_tracer.cpp:140,1
    - Dst: unw_init_local
      Src: /src/brpc/src/bthread/task_tracer.cpp:140,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.cpp:141,1
    - Dst: TraceByLibunwind
      Src: /src/brpc/src/bthread/task_tracer.cpp:141,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 144
    functionName: bthread::TaskTracer::Init
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - RegisterSignalHandler
    - butil::ignore_result
    - unw_init_local
    - LOG
    - unw_getcontext
    - TraceByLibunwind
    - expose
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::Init()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:147,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:148,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:152,1
    - Dst: bthread::TaskTracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_tracer.cpp:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 2
    argNames:
    - s
    - m
    argTypes:
    - TaskStatus
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 174
    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:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - worker_tid
    - m
    argTypes:
    - pthread_t
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 180
    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(pthread_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: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    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:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    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:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 193
    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:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: bthread::TaskTracer::WaitForTracing
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::WaitForTracing(TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/bthread/task_tracer.cpp:203,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 205
    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:49,1
    - Dst: close
      Src: /src/brpc/src/bthread/task_tracer.cpp:52,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 54
    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:57,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:58,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:61,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:62,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/bthread/task_tracer.cpp:65,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:66,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 56
    functionDepth: 1
    functionLinenumber: 56
    functionLinenumberEnd: 71
    functionName: TaskTracer::SignalSync::Init()
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - butil::make_non_blocking
    - pipe
    - PLOG
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::SignalSync::Init()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/bthread/task_tracer.cpp:76,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/bthread/task_tracer.cpp:82,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/bthread/task_tracer.cpp:83,1
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:84,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:84,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:85,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:87,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/bthread/task_tracer.cpp:90,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:94,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:97,1
    - Dst: std::string::append
      Src: /src/brpc/src/bthread/task_tracer.cpp:98,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 102
    functionName: TaskTracer::Result::OutputToString() const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - Symbolize
    - std::string::append
    - std::string::push_back
    - reinterpret_cast<uintptr_t>
    - std::string::reserve
    - arraysize
    linkageType: ''
    returnType: std::string
    signature: std::string TaskTracer::Result::OutputToString() const
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::setw
      Src: /src/brpc/src/bthread/task_tracer.cpp:110,1
    - Dst: std::setfill
      Src: /src/brpc/src/bthread/task_tracer.cpp:110,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/bthread/task_tracer.cpp:111,1
    - Dst: std::setfill
      Src: /src/brpc/src/bthread/task_tracer.cpp:112,1
    - Dst: Symbolize
      Src: /src/brpc/src/bthread/task_tracer.cpp:113,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:113,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 128
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 128
    functionName: TaskTracer::Result::OutputToStream(std::ostream& os) const
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - std::setw
    - Symbolize
    - std::setfill
    - reinterpret_cast<uintptr_t>
    - 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:131,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:132,1
    - Dst: RegisterSignalHandler
      Src: /src/brpc/src/bthread/task_tracer.cpp:135,1
    - Dst: unw_getcontext
      Src: /src/brpc/src/bthread/task_tracer.cpp:140,1
    - Dst: unw_init_local
      Src: /src/brpc/src/bthread/task_tracer.cpp:140,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.cpp:141,1
    - Dst: TraceByLibunwind
      Src: /src/brpc/src/bthread/task_tracer.cpp:141,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 130
    functionDepth: 1
    functionLinenumber: 130
    functionLinenumberEnd: 144
    functionName: bthread::TaskTracer::Init
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - RegisterSignalHandler
    - butil::ignore_result
    - unw_init_local
    - LOG
    - unw_getcontext
    - TraceByLibunwind
    - expose
    linkageType: ''
    returnType: bool
    signature: bool TaskTracer::Init()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:147,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/bthread/task_tracer.cpp:148,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_tracer.cpp:152,1
    - Dst: bthread::TaskTracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_tracer.cpp:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 2
    argNames:
    - s
    - m
    argTypes:
    - TaskStatus
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 146
    functionDepth: 2
    functionLinenumber: 146
    functionLinenumberEnd: 174
    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:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - worker_tid
    - m
    argTypes:
    - pthread_t
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 180
    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(pthread_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: 185
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 185
    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:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 189
    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:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 193
    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:196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 198
    functionName: bthread::TaskTracer::WaitForTracing
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: void
    signature: void TaskTracer::WaitForTracing(TaskMeta* m)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/bthread/task_tracer.cpp:203,1
    - Dst: butil::Timer::n_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 205
    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:278,1
    - Dst: reinterpret_cast<uintptr_t*>
      Src: /src/brpc/src/bthread/task_tracer.cpp:279,1
    - Dst: unw_set_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:284,1
    - Dst: unw_set_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:288,1
    - Dst: unw_set_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:292,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:293,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - fcontext
    argTypes:
    - bthread_fcontext_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 275
    functionDepth: 1
    functionLinenumber: 275
    functionLinenumberEnd: 298
    functionName: unw_cursor_t::MakeCursor
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - reinterpret_cast<uintptr_t*>
    - unw_set_reg
    - unw_init_local
    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:301,1
    - Dst: TaskTracer::TraceByLibunwind
      Src: /src/brpc/src/bthread/task_tracer.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - fcontext
    argTypes:
    - bthread_fcontext_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 300
    functionDepth: 1
    functionLinenumber: 300
    functionLinenumberEnd: 303
    functionName: TaskTracer::ContextTrace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - MakeCursor
    - TaskTracer::TraceByLibunwind
    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:307,1
    - Dst: unw_step
      Src: /src/brpc/src/bthread/task_tracer.cpp:308,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:312,1
    - Dst: unw_get_reg
      Src: /src/brpc/src/bthread/task_tracer.cpp:316,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/bthread/task_tracer.cpp:319,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 1
    argNames:
    - ' cursor'
    argTypes:
    - unw_cursor_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 324
    functionName: TaskTracer::TraceByLibunwind
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 1
    functionsReached:
    - unw_get_reg
    - unw_step
    - bthread::TaskTracer::MakeErrorResult
    - reinterpret_cast<void*>
    - arraysize
    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:333,1
    - Dst: sigaction
      Src: /src/brpc/src/bthread/task_tracer.cpp:334,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:335,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_tracer.cpp:339,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 345
    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:352,1
    - Dst: absl::DefaultStackUnwinder
      Src: /src/brpc/src/bthread/task_tracer.cpp:358,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/task_tracer.cpp:359,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/bthread/task_tracer.cpp:363,1
    - Dst: write
      Src: /src/brpc/src/bthread/task_tracer.cpp:363,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - info
    - context
    argTypes:
    - siginfo_t*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 364
    functionName: TaskTracer::SignalHandler
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - butil::ignore_result
    - static_cast<SignalSync*>
    - write
    - absl::DefaultStackUnwinder
    - arraysize
    linkageType: ''
    returnType: void
    signature: void TaskTracer::SignalHandler(int, siginfo_t* info, void* context)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: pthread_equal
      Src: /src/brpc/src/bthread/task_tracer.cpp:401,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_tracer.cpp:401,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:402,1
    - Dst: SignalSync::SignalSync
      Src: /src/brpc/src/bthread/task_tracer.cpp:407,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/bthread/task_tracer.cpp:408,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:409,1
    - Dst: butil::intrusive_ptr::AddRefManually
      Src: /src/brpc/src/bthread/task_tracer.cpp:413,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/bthread/task_tracer.cpp:416,1
    - Dst: pthread_sigqueue
      Src: /src/brpc/src/bthread/task_tracer.cpp:418,1
    - Dst: butil::intrusive_ptr::RemoveRefManually
      Src: /src/brpc/src/bthread/task_tracer.cpp:421,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:422,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_tracer.cpp:422,1
    - Dst: butil::Timer::Timer
      Src: /src/brpc/src/bthread/task_tracer.cpp:427,1
    - Dst: butil::Timer::start
      Src: /src/brpc/src/bthread/task_tracer.cpp:429,1
    - Dst: butil::Timer::stop
      Src: /src/brpc/src/bthread/task_tracer.cpp:436,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:437,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:438,1
    - Dst: butil::Timer::m_elapsed
      Src: /src/brpc/src/bthread/task_tracer.cpp:440,1
    - Dst: poll
      Src: /src/brpc/src/bthread/task_tracer.cpp:444,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_tracer.cpp:451,1
    - Dst: bthread::TaskTracer::MakeErrorResult
      Src: /src/brpc/src/bthread/task_tracer.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_tracer.cpp:452,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 36
    argCount: 1
    argNames:
    - worker_tid
    argTypes:
    - pthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 458
    functionName: TaskTracer::SignalTrace
    functionSourceFile: /src/brpc/src/bthread/task_tracer.cpp
    functionUses: 0
    functionsReached:
    - pthread_equal
    - SignalSync::SignalSync
    - butil::Timer::stop
    - berror
    - butil::intrusive_ptr::Init
    - butil::intrusive_ptr::RemoveRefManually
    - butil::intrusive_ptr::get
    - push_back
    - butil::Timer::start
    - butil::intrusive_ptr::AddRefManually
    - bthread::TaskTracer::MakeErrorResult
    - poll
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    - pthread_self
    - pthread_sigqueue
    linkageType: ''
    returnType: TaskTracer::Result
    signature: TaskTracer::Result TaskTracer::SignalTrace(pthread_t worker_tid)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:53,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:54,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:62,1
    - Dst: bthread::get_state
      Src: /src/brpc/src/bthread/parking_lot.h:68,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:73,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:75,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:77,1
    - Dst: fetch_or
      Src: /src/brpc/src/bthread/parking_lot.h:83,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:84,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:89,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:90,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 95
    functionName: bthread::ParkingLot
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - load
    - fetch_sub
    - fetch_add
    - bthread::futex_wake_private
    - fetch_or
    - bthread::get_state
    - butil::atomic::atomic
    - bthread::futex_wait_private
    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: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    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: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    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: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    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: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    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:53,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:54,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - num_task
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 58
    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:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: bthread::get_state
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 1
    functionsReached:
    - load
    linkageType: ''
    returnType: State
    signature: State get_state()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_state
      Src: /src/brpc/src/bthread/parking_lot.h:68,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:73,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:75,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:77,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' expected_state'
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 79
    functionName: bthread::wait
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - fetch_sub
    - fetch_add
    - bthread::get_state
    - bthread::futex_wait_private
    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:83,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:53,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:54,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:62,1
    - Dst: bthread::get_state
      Src: /src/brpc/src/bthread/parking_lot.h:68,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:73,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:75,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:77,1
    - Dst: fetch_or
      Src: /src/brpc/src/bthread/parking_lot.h:83,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:84,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:89,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/bthread/parking_lot.h:90,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 95
    functionName: bthread::ParkingLot
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - load
    - fetch_sub
    - fetch_add
    - bthread::futex_wake_private
    - fetch_or
    - bthread::get_state
    - butil::atomic::atomic
    - bthread::futex_wait_private
    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: 38
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 38
    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: 39
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 39
    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: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    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: 48
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 48
    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:53,1
    - Dst: load
      Src: /src/brpc/src/bthread/parking_lot.h:54,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - num_task
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 58
    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:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    functionName: bthread::get_state
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 3
    functionsReached:
    - load
    linkageType: ''
    returnType: State
    signature: State get_state()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread::get_state
      Src: /src/brpc/src/bthread/parking_lot.h:68,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/parking_lot.h:73,1
    - Dst: bthread::futex_wait_private
      Src: /src/brpc/src/bthread/parking_lot.h:75,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/parking_lot.h:77,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' expected_state'
    argTypes:
    - State
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 79
    functionName: bthread::wait
    functionSourceFile: /src/brpc/src/bthread/parking_lot.h
    functionUses: 0
    functionsReached:
    - fetch_sub
    - fetch_add
    - bthread::get_state
    - bthread::futex_wait_private
    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:83,1
    - Dst: bthread::futex_wake_private
      Src: /src/brpc/src/bthread/parking_lot.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 85
    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:
    - unlock
    - bthread::RemoteTaskQueue::pop
    - empty
    - lock
    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:
    - unlock
    - lock
    - 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:
    - unlock
    - bthread::RemoteTaskQueue::pop
    - empty
    - lock
    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:
    - unlock
    - lock
    - 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: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: bthread::AtomicInteger128::Value
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Value
  - 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: 127
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 127
    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: 160
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 160
    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: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    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: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    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:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 174
    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:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 177
    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: 180
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 180
    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: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    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: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: 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: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    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: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: bthread::TaskGroup::tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pthread_t
    signature: pthread_t tid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    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: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    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: 245
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 245
    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: 250
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 250
    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:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - last_run_ns
    - main_task
    argTypes:
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 255
    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: 258
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 258
    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: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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: 265
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 265
    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: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    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: 275
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 275
    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:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 289
    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:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 292
    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:295,1
    - Dst: bthread::AtomicInteger128::Value
      Src: /src/brpc/src/bthread/task_group.h:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cpu_time_stat
    argTypes:
    - CPUTimeStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 296
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::store
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::AtomicCPUTimeStat::store
    - bthread::AtomicInteger128::Value
    linkageType: ''
    returnType: void
    signature: void store(CPUTimeStat cpu_time_stat)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pop
      Src: /src/brpc/src/bthread/task_group.h:334,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.h:338,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.h:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 341
    functionName: bthread::TaskGroup::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached:
    - pop
    - get_state
    - bthread::TaskGroup::steal_task
    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: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    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: 345
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 345
    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: 349
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 349
    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: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 62
    functionName: bthread::AtomicInteger128::Value
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: struct BAIDU_CACHELINE_ALIGNMENT
    signature: struct BAIDU_CACHELINE_ALIGNMENT Value
  - 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: 127
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 127
    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: 160
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 160
    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: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    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: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    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:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 174
    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:177,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 177
    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: 180
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 180
    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: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    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: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: 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: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    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: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    functionName: bthread::TaskGroup::tid
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: pthread_t
    signature: pthread_t tid() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.h:231,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 233
    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: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    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: 245
      start: 244
    functionDepth: 0
    functionLinenumber: 244
    functionLinenumberEnd: 245
    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: 250
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 250
    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:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - last_run_ns
    - main_task
    argTypes:
    - int64_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 252
    functionDepth: 0
    functionLinenumber: 252
    functionLinenumberEnd: 255
    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: 258
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 258
    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: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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: 265
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 265
    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: 272
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 272
    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: 275
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 275
    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:288,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 289
    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:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 292
    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:295,1
    - Dst: bthread::AtomicInteger128::Value
      Src: /src/brpc/src/bthread/task_group.h:295,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cpu_time_stat
    argTypes:
    - CPUTimeStat
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 294
    functionDepth: 1
    functionLinenumber: 294
    functionLinenumberEnd: 296
    functionName: bthread::TaskGroup::AtomicCPUTimeStat::store
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 2
    functionsReached:
    - bthread::TaskGroup::AtomicCPUTimeStat::store
    - bthread::AtomicInteger128::Value
    linkageType: ''
    returnType: void
    signature: void store(CPUTimeStat cpu_time_stat)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pop
      Src: /src/brpc/src/bthread/task_group.h:334,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.h:338,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.h:340,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 333
    functionDepth: 1
    functionLinenumber: 333
    functionLinenumberEnd: 341
    functionName: bthread::TaskGroup::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_group.h
    functionUses: 2
    functionsReached:
    - pop
    - get_state
    - bthread::TaskGroup::steal_task
    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: 343
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 343
    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: 345
      start: 345
    functionDepth: 0
    functionLinenumber: 345
    functionLinenumberEnd: 345
    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: 349
      start: 347
    functionDepth: 0
    functionLinenumber: 347
    functionLinenumberEnd: 349
    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: 5
    functionLinenumber: 32
    functionLinenumberEnd: 71
    functionName: bthread::bthread_once_impl
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - init_routine
    - butil::atomic*::store
    - BAIDU_LIKELY
    - butil::atomic*::compare_exchange_strong
    - butil::atomic*::load
    - bthread::butex_wake_all
    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: 5
    functionLinenumber: 32
    functionLinenumberEnd: 71
    functionName: bthread::bthread_once_impl
    functionSourceFile: /src/brpc/src/bthread/bthread_once.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - init_routine
    - butil::atomic*::store
    - BAIDU_LIKELY
    - butil::atomic*::compare_exchange_strong
    - butil::atomic*::load
    - bthread::butex_wake_all
    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: 6
    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:
    - fetch_sub
    - butex_wake_all
    - LOG_IF
    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: 14
    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:
    - fetch_add
    - LOG_IF
    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:
    - fetch_sub
    - butex_wake_all
    - LOG_IF
    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: 14
    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:
    - fetch_add
    - LOG_IF
    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:
    - pthread_create
    - BAIDU_SCOPED_LOCK
    - PLOG
    - bthread::ExecutionQueueBase::_execute_tasks
    - fetch_sub
    - fetch_add
    - _more_tasks
    - bthread::ExecutionQueueBase::_execute
    - get_execq_vars
    - exchange
    - bthread::ExecutionQueueBase::return_task_node
    - Signal
    - bthread_start_background
    - executor::submit
    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:
    - butex_wake_all
    - butil::return_resource
    - ExecutionQueueBase*::_high_priority_tasks::fetch_sub
    - sched_yield
    - slot_of_id
    - CHECK
    - ExecutionQueueBase*::_head::load
    - ExecutionQueueBase*::_execute
    - ExecutionQueueBase*::_more_tasks
    - get_execq_vars
    - CHECK_EQ
    - ExecutionQueueBase*::return_task_node
    - ExecutionQueueBase*::_join_butex::fetch_add
    - ExecutionQueueBase*::_high_priority_tasks::load
    linkageType: ''
    returnType: void
    signature: void * ExecutionQueueBase::_execute_tasks(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetNameSimple
      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:
    - BAIDU_SCOPED_LOCK
    - bthread::ExecutionQueueBase::_execute_tasks
    - auto::_cond::Wait
    - butil::PlatformThread::SetNameSimple
    - auto::_join_butex::load
    - _version_of_id
    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
    - get_execq_vars
    - butil::return_object<TaskNode>
    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:
    - bthread::ExecutionQueueBase::start_execute
    - bthread_usleep
    - berror
    - CHECK
    - BAIDU_LIKELY
    - butil::get_object<TaskNode>
    - 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:
    - butex_wait
    - ExecutionQueueBase*::_join_butex::load
    - slot_of_id
    - pthread_join
    - butil::address_resource
    - _version_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:
    - _release_additional_reference
    - load
    - _version_of_vref
    - compare_exchange_strong
    - store
    - _make_vref
    - _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:
    - CHECK
    - _execute_func
    - TaskIteratorBase::num_iterated
    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:
    - _version_of_vref
    - ExecutionQueueBase*::_versioned_ref::compare_exchange_strong
    - ExecutionQueueBase*::_versioned_ref::fetch_sub
    - slot_of_id
    - _make_vref
    - CHECK
    - butil::address_resource
    - _ref_of_vref
    - BAIDU_LIKELY
    - __builtin_expect
    - scoped_ptr_t::Pass
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - scoped_ptr_t::reset
    - CHECK_EQ
    - ExecutionQueueBase*::_on_recycle
    - _version_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:
    - CHECK_EQ
    - ExecutionQueueBase*::_stopped::store
    - _version_of_vref
    - ExecutionQueueOptions::ExecutionQueueOptions
    - CHECK
    - ExecutionQueueBase*::_head::load
    - BAIDU_LIKELY
    - make_id
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - get_execq_vars
    - Forbidden
    - butil::get_resource
    - ExecutionQueueBase*::_high_priority_tasks::load
    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:
    - pthread_create
    - BAIDU_SCOPED_LOCK
    - PLOG
    - bthread::ExecutionQueueBase::_execute_tasks
    - fetch_sub
    - fetch_add
    - _more_tasks
    - bthread::ExecutionQueueBase::_execute
    - get_execq_vars
    - exchange
    - bthread::ExecutionQueueBase::return_task_node
    - Signal
    - bthread_start_background
    - executor::submit
    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:
    - butex_wake_all
    - butil::return_resource
    - ExecutionQueueBase*::_high_priority_tasks::fetch_sub
    - sched_yield
    - slot_of_id
    - CHECK
    - ExecutionQueueBase*::_head::load
    - ExecutionQueueBase*::_execute
    - ExecutionQueueBase*::_more_tasks
    - get_execq_vars
    - CHECK_EQ
    - ExecutionQueueBase*::return_task_node
    - ExecutionQueueBase*::_join_butex::fetch_add
    - ExecutionQueueBase*::_high_priority_tasks::load
    linkageType: ''
    returnType: void
    signature: void * ExecutionQueueBase::_execute_tasks(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::PlatformThread::SetNameSimple
      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:
    - BAIDU_SCOPED_LOCK
    - bthread::ExecutionQueueBase::_execute_tasks
    - auto::_cond::Wait
    - butil::PlatformThread::SetNameSimple
    - auto::_join_butex::load
    - _version_of_id
    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
    - get_execq_vars
    - butil::return_object<TaskNode>
    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:
    - bthread::ExecutionQueueBase::start_execute
    - bthread_usleep
    - berror
    - CHECK
    - BAIDU_LIKELY
    - butil::get_object<TaskNode>
    - 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:
    - butex_wait
    - ExecutionQueueBase*::_join_butex::load
    - slot_of_id
    - pthread_join
    - butil::address_resource
    - _version_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:
    - _release_additional_reference
    - load
    - _version_of_vref
    - compare_exchange_strong
    - store
    - _make_vref
    - _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:
    - CHECK
    - _execute_func
    - TaskIteratorBase::num_iterated
    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:
    - _version_of_vref
    - ExecutionQueueBase*::_versioned_ref::compare_exchange_strong
    - ExecutionQueueBase*::_versioned_ref::fetch_sub
    - slot_of_id
    - _make_vref
    - CHECK
    - butil::address_resource
    - _ref_of_vref
    - BAIDU_LIKELY
    - __builtin_expect
    - scoped_ptr_t::Pass
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - scoped_ptr_t::reset
    - CHECK_EQ
    - ExecutionQueueBase*::_on_recycle
    - _version_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:
    - CHECK_EQ
    - ExecutionQueueBase*::_stopped::store
    - _version_of_vref
    - ExecutionQueueOptions::ExecutionQueueOptions
    - CHECK
    - ExecutionQueueBase*::_head::load
    - BAIDU_LIKELY
    - make_id
    - ExecutionQueueBase*::_versioned_ref::fetch_add
    - get_execq_vars
    - Forbidden
    - butil::get_resource
    - ExecutionQueueBase*::_high_priority_tasks::load
    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: 4
    functionsReached:
    - address_resource
    - get_slot
    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:
    - bthread::TaskGroup::sched_to
    - TaskGroup*::tag
    - TaskGroup*::current_task
    - TaskGroup*::set_remained
    - TaskGroup*::is_current_pthread_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:
    - bthread::TaskGroup::sched_to
    - TaskMeta*::set_stack
    - get_stack
    - TaskMeta*::stack_type
    - 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:
    - capacity
    - bthread::TaskGroup::flush_nosignal_tasks
    - LOG_EVERY_SECOND
    - push
    - bthread::TaskGroup::usleep
    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:
    - _mutex::lock
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    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: 5
    functionsReached:
    - address_resource
    - get_slot
    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:
    - bthread::TaskGroup::sched_to
    - TaskGroup*::tag
    - TaskGroup*::current_task
    - TaskGroup*::set_remained
    - TaskGroup*::is_current_pthread_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:
    - bthread::TaskGroup::sched_to
    - TaskMeta*::set_stack
    - get_stack
    - TaskMeta*::stack_type
    - 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:
    - capacity
    - bthread::TaskGroup::flush_nosignal_tasks
    - LOG_EVERY_SECOND
    - push
    - bthread::TaskGroup::usleep
    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:
    - _mutex::lock
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    linkageType: ''
    returnType: void
    signature: void TaskGroup::flush_nosignal_tasks_remote()
  - 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: bthread::TaskTracer::get_trace_signal
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int get_trace_signal() const
  - 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::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: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    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:69,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:69,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: bthread::TaskTracer::MakeErrorResult
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 2
    functionsReached:
    - Result::SetError
    - std::forward<Args>
    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:76,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/src/bthread/task_tracer.h:76,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: bthread::TaskTracer::SetError
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - butil::strings::SafeSPrintf
    - butil::ignore_result
    linkageType: ''
    returnType: void
    signature: void SetError(const char* fmt, Args&&... args)
  - 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: bthread::TaskTracer::get_trace_signal
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int get_trace_signal() const
  - 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::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: 60
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 60
    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:69,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:69,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 71
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 71
    functionName: bthread::TaskTracer::MakeErrorResult
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 2
    functionsReached:
    - Result::SetError
    - std::forward<Args>
    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:76,1
    - Dst: butil::strings::SafeSPrintf
      Src: /src/brpc/src/bthread/task_tracer.h:76,1
    - Dst: std::forward<Args>
      Src: /src/brpc/src/bthread/task_tracer.h:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 78
    functionName: bthread::TaskTracer::SetError
    functionSourceFile: /src/brpc/src/bthread/task_tracer.h
    functionUses: 0
    functionsReached:
    - std::forward<Args>
    - butil::strings::SafeSPrintf
    - butil::ignore_result
    linkageType: ''
    returnType: void
    signature: void SetError(const char* fmt, Args&&... args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_meta.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: bthread::tls_bls_ptr
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 13
    functionsReached:
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: LocalStorage
    signature: LocalStorage * tls_bls_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/src/bthread/task_meta.h:133,1
    - Dst: bthread::butex_create_checked
      Src: /src/brpc/src/bthread/task_meta.h:134,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bthread/task_meta.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 137
    functionName: bthread::TaskMeta
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - pthread_mutex_init
    - bthread::butex_create_checked
    linkageType: ''
    returnType: void
    signature: void TaskMeta()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bthread/task_meta.h:140,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/task_meta.h:141,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/bthread/task_meta.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 144
    functionName: ~TaskMeta()
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - pthread_spin_destroy
    - pthread_mutex_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: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    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: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    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:157,1
    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: 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: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_meta.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: bthread::tls_bls_ptr
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 13
    functionsReached:
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: LocalStorage
    signature: LocalStorage * tls_bls_ptr()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_init
      Src: /src/brpc/src/bthread/task_meta.h:133,1
    - Dst: bthread::butex_create_checked
      Src: /src/brpc/src/bthread/task_meta.h:134,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/bthread/task_meta.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 137
    functionName: bthread::TaskMeta
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - pthread_mutex_init
    - bthread::butex_create_checked
    linkageType: ''
    returnType: void
    signature: void TaskMeta()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/bthread/task_meta.h:140,1
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/task_meta.h:141,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/bthread/task_meta.h:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 144
    functionName: ~TaskMeta()
    functionSourceFile: /src/brpc/src/bthread/task_meta.h
    functionUses: 0
    functionsReached:
    - butex_destroy
    - pthread_mutex_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: 148
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 148
    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: 154
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 154
    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:157,1
    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: 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: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    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: 42
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 42
    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: 44
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 44
    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: 50
      start: 49
    functionDepth: 0
    functionLinenumber: 49
    functionLinenumberEnd: 50
    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: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    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_category
    - std::error_code
    - std::system_error
    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:
    - bthread_rwlock_destroy
    - CHECK_EQ
    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:
    - bthread_rwlock_rdlock
    - std::system_category
    - std::error_code
    - std::system_error
    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::system_category
    - std::error_code
    - bthread_rwlock_wrlock
    - std::system_error
    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:
    - bthread_rwlock_rdlock
    - LOG
    - berror
    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:
    - LOG
    - bthread_rwlock_wrlock
    - berror
    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_category
    - std::error_code
    - std::system_error
    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:
    - bthread_rwlock_destroy
    - CHECK_EQ
    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:
    - bthread_rwlock_rdlock
    - std::system_category
    - std::error_code
    - std::system_error
    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::system_category
    - std::error_code
    - bthread_rwlock_wrlock
    - std::system_error
    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:
    - bthread_rwlock_rdlock
    - LOG
    - berror
    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:
    - LOG
    - bthread_rwlock_wrlock
    - berror
    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:
    - bthread_rwlock_rdlock
    - LOG
    - bthread_rwlock_wrlock
    - berror
    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:
    - bthread_rwlock_rdlock
    - LOG
    - bthread_rwlock_wrlock
    - berror
    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:
    - T::T
    - LOG
    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:
    - load
    - store
    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:
    - std::atomic_thread_fence
    - load
    - store
    - 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_weak
      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:
    - std::atomic_thread_fence
    - load
    - compare_exchange_weak
    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:
    - T::T
    - LOG
    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:
    - load
    - store
    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:
    - std::atomic_thread_fence
    - load
    - store
    - 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_weak
      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:
    - std::atomic_thread_fence
    - load
    - compare_exchange_weak
    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: 69
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 69
    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:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 96
    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: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    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:101,1
    - Dst: _nearest_run_time
      Src: /src/brpc/src/bthread/timer_thread.cpp:102,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:102,1
    - Dst: _task_head
      Src: /src/brpc/src/bthread/timer_thread.cpp:103,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/timer_thread.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 126
    functionName: bthread::TimerThread::Bucket
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 1
    functionsReached:
    - _task_head
    - butil::BaseIteratorRangeToNumberTraits::max
    - _nearest_run_time
    - bthread::TimerThread::Bucket
    - 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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - version
    argTypes:
    - butil::ResourceId<TimerThread::Task>
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    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: 138
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 138
    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: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    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: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    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::SetNameSimple
      Src: /src/brpc/src/bthread/timer_thread.cpp:149,1
    - Dst: static_cast<TimerThread*>
      Src: /src/brpc/src/bthread/timer_thread.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: bthread::TimerThread::run_this
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TimerThread*>
    - butil::PlatformThread::SetNameSimple
    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:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 162
    functionName: bthread::TimerThread::TimerThread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 10
    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:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 6
    functionLinenumber: 164
    functionLinenumberEnd: 168
    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:178,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:182,1
    - Dst: Bucket::Bucket
      Src: /src/brpc/src/bthread/timer_thread.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:187,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/timer_thread.cpp:190,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - options_in
    argTypes:
    - TimerThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 196
    functionName: bthread::TimerThread::start
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 10
    functionsReached:
    - pthread_create
    - Bucket::Bucket
    - 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:204,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:208,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 212
    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:218,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:226,1
    - Dst: Task*::version::load
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: Task*::version::fetch_add
      Src: /src/brpc/src/bthread/timer_thread.cpp:229,1
    - Dst: make_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:232,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 246
    functionName: "TimerThread::Bucket::schedule(void (*fn)(void*), void* arg,\n                              const
      timespec& abstime)"
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::get_resource<Task>
    - butil::timespec_to_microseconds
    - Task*::version::load
    - Task*::version::fetch_add
    - make_task_id
    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:250,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/timer_thread.cpp:256,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:256,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/src/bthread/timer_thread.cpp:256,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:260,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:262,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:270,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 274
    functionName: bthread::TimerThread::schedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 7
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_microseconds
    - fmix64
    - pthread_numeric_id
    - bthread::TimerThread::schedule
    - futex_wake_private
    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:286,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:289,1
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:292,1
    - Dst: Task*::version::compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - task_id
    argTypes:
    - TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 303
    functionName: bthread::TimerThread::unschedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - LOG
    - Task*::version::compare_exchange_strong
    - butil::address_resource
    - version_of_task_id
    - slot_of_task_id
    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:306,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:309,1
    - Dst: fn
      Src: /src/brpc/src/bthread/timer_thread.cpp:311,1
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:314,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:315,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:315,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:319,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 327
    functionName: TimerThread::Task::run_and_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::return_resource
    - compare_exchange_strong
    - store
    - LOG
    - fn
    - version_of_task_id
    - slot_of_task_id
    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:330,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:331,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/timer_thread.cpp:332,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:332,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:333,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:333,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 337
    functionName: TimerThread::Task::try_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::return_resource
    - CHECK_EQ
    - version_of_task_id
    - slot_of_task_id
    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: 342
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 342
    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: 16
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/timer_thread.cpp:345,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/timer_thread.cpp:347,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:350,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:351,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/bthread/timer_thread.cpp:355,1
    - Dst: bvar_prefix::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:372,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:373,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:374,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:375,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:378,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:383,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/timer_thread.cpp:386,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:386,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:389,1
    - Dst: consume_tasks
      Src: /src/brpc/src/bthread/timer_thread.cpp:395,1
    - Dst: Task*::try_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:400,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:401,1
    - Dst: std::push_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:402,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:402,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:402,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:415,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:416,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:418,1
    - Dst: Task*::try_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:420,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:424,1
    - Dst: std::vector::resize
      Src: /src/brpc/src/bthread/timer_thread.cpp:425,1
    - Dst: std::make_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:426,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:426,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:426,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:428,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:432,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:448,1
    - Dst: std::pop_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:455,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:455,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:455,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:456,1
    - Dst: Task*::run_and_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:457,1
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:463,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:463,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:465,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:470,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:471,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:475,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:476,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:485,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:497,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:498,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/timer_thread.cpp:510,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:514,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:515,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:517,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 84
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 518
    functionName: bthread::TimerThread::run
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - std::pop_heap
    - butil::gettimeofday_us
    - std::push_heap
    - store
    - butil::microseconds_to_timespec
    - std::vector::size
    - std::vector::pop_back
    - std::vector::reserve
    - bvar_prefix::empty
    - bvar::PerSecond::expose_as
    - std::vector::end
    - logging::ComlogInitializer::ComlogInitializer
    - std::vector::resize
    - run_worker_startfn
    - Task*::run_and_delete
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - consume_tasks
    - butil::BaseIteratorRangeToNumberTraits::max
    - std::vector::begin
    - futex_wait_private
    - BAIDU_UNLIKELY
    - pthread_self
    - std::make_heap
    - load
    - std::vector::empty
    - Task*::try_delete
    linkageType: ''
    returnType: void
    signature: void TimerThread::run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/bthread/timer_thread.cpp:521,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:526,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:531,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:534,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/timer_thread.cpp:535,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 538
      start: 520
    functionDepth: 1
    functionLinenumber: 520
    functionLinenumberEnd: 538
    functionName: bthread::TimerThread::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 10
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - pthread_join
    - exchange
    - pthread_self
    - futex_wake_private
    linkageType: ''
    returnType: void
    signature: void TimerThread::stop_and_join()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread::TimerThread
      Src: /src/brpc/src/bthread/timer_thread.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:545,1
    - Dst: start
      Src: /src/brpc/src/bthread/timer_thread.cpp:551,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:553,1
    - Dst: berror
      Src: /src/brpc/src/bthread/timer_thread.cpp:553,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 542
    functionDepth: 5
    functionLinenumber: 542
    functionLinenumberEnd: 558
    functionName: bthread::init_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - TimerThread::TimerThread
    - start
    - LOG
    - berror
    linkageType: ''
    returnType: void
    signature: void init_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/timer_thread.cpp:560,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 562
    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: 565
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 565
    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: 69
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 69
    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:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 96
    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: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    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:101,1
    - Dst: _nearest_run_time
      Src: /src/brpc/src/bthread/timer_thread.cpp:102,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:102,1
    - Dst: _task_head
      Src: /src/brpc/src/bthread/timer_thread.cpp:103,1
    - Dst: FastPthreadMutex::FastPthreadMutex
      Src: /src/brpc/src/bthread/timer_thread.cpp:123,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 99
    functionDepth: 1
    functionLinenumber: 99
    functionLinenumberEnd: 126
    functionName: bthread::TimerThread::Bucket
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 2
    functionsReached:
    - _task_head
    - butil::BaseIteratorRangeToNumberTraits::max
    - _nearest_run_time
    - bthread::TimerThread::Bucket
    - 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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - slot
    - version
    argTypes:
    - butil::ResourceId<TimerThread::Task>
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 132
    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: 138
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 138
    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: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    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: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    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::SetNameSimple
      Src: /src/brpc/src/bthread/timer_thread.cpp:149,1
    - Dst: static_cast<TimerThread*>
      Src: /src/brpc/src/bthread/timer_thread.cpp:150,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    functionName: bthread::TimerThread::run_this
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - static_cast<TimerThread*>
    - butil::PlatformThread::SetNameSimple
    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:158,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 162
    functionName: bthread::TimerThread::TimerThread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 10
    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:165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 6
    functionLinenumber: 164
    functionLinenumberEnd: 168
    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:178,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:182,1
    - Dst: Bucket::Bucket
      Src: /src/brpc/src/bthread/timer_thread.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:187,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/timer_thread.cpp:190,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - options_in
    argTypes:
    - TimerThreadOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 196
    functionName: bthread::TimerThread::start
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 10
    functionsReached:
    - pthread_create
    - Bucket::Bucket
    - 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:204,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:208,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 212
    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:218,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:226,1
    - Dst: Task*::version::load
      Src: /src/brpc/src/bthread/timer_thread.cpp:227,1
    - Dst: Task*::version::fetch_add
      Src: /src/brpc/src/bthread/timer_thread.cpp:229,1
    - Dst: make_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:232,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:236,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 246
    functionName: "TimerThread::Bucket::schedule(void (*fn)(void*), void* arg,\n                              const
      timespec& abstime)"
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::get_resource<Task>
    - butil::timespec_to_microseconds
    - Task*::version::load
    - Task*::version::fetch_add
    - make_task_id
    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:250,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/timer_thread.cpp:256,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:256,1
    - Dst: bthread::TimerThread::schedule
      Src: /src/brpc/src/bthread/timer_thread.cpp:256,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/timer_thread.cpp:260,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:262,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:270,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 2
    argNames:
    - arg
    - ' abstime'
    argTypes:
    - void*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 274
      start: 248
    functionDepth: 1
    functionLinenumber: 248
    functionLinenumberEnd: 274
    functionName: bthread::TimerThread::schedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 8
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - butil::timespec_to_microseconds
    - fmix64
    - pthread_numeric_id
    - bthread::TimerThread::schedule
    - futex_wake_private
    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:286,1
    - Dst: butil::address_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:289,1
    - Dst: version_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:292,1
    - Dst: Task*::version::compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:297,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - task_id
    argTypes:
    - TaskId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 303
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 303
    functionName: bthread::TimerThread::unschedule
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 6
    functionsReached:
    - LOG
    - Task*::version::compare_exchange_strong
    - butil::address_resource
    - version_of_task_id
    - slot_of_task_id
    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:306,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/timer_thread.cpp:309,1
    - Dst: fn
      Src: /src/brpc/src/bthread/timer_thread.cpp:311,1
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:314,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:315,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:315,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:319,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 305
    functionDepth: 1
    functionLinenumber: 305
    functionLinenumberEnd: 327
    functionName: TimerThread::Task::run_and_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - butil::return_resource
    - compare_exchange_strong
    - store
    - LOG
    - fn
    - version_of_task_id
    - slot_of_task_id
    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:330,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:331,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/bthread/timer_thread.cpp:332,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:332,1
    - Dst: butil::return_resource
      Src: /src/brpc/src/bthread/timer_thread.cpp:333,1
    - Dst: slot_of_task_id
      Src: /src/brpc/src/bthread/timer_thread.cpp:333,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 337
    functionName: TimerThread::Task::try_delete()
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::return_resource
    - CHECK_EQ
    - version_of_task_id
    - slot_of_task_id
    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: 342
      start: 340
    functionDepth: 0
    functionLinenumber: 340
    functionLinenumberEnd: 342
    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: 16
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/timer_thread.cpp:345,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/timer_thread.cpp:347,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:350,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:351,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/bthread/timer_thread.cpp:355,1
    - Dst: bvar_prefix::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:372,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:373,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:374,1
    - Dst: bvar::PerSecond::expose_as
      Src: /src/brpc/src/bthread/timer_thread.cpp:375,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:378,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:383,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/timer_thread.cpp:386,1
    - Dst: load
      Src: /src/brpc/src/bthread/timer_thread.cpp:386,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:389,1
    - Dst: consume_tasks
      Src: /src/brpc/src/bthread/timer_thread.cpp:395,1
    - Dst: Task*::try_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:400,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:401,1
    - Dst: std::push_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:402,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:402,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:402,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:415,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:416,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:418,1
    - Dst: Task*::try_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:420,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:424,1
    - Dst: std::vector::resize
      Src: /src/brpc/src/bthread/timer_thread.cpp:425,1
    - Dst: std::make_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:426,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:426,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:426,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:428,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:432,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:434,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:448,1
    - Dst: std::pop_heap
      Src: /src/brpc/src/bthread/timer_thread.cpp:455,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/bthread/timer_thread.cpp:455,1
    - Dst: std::vector::end
      Src: /src/brpc/src/bthread/timer_thread.cpp:455,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/bthread/timer_thread.cpp:456,1
    - Dst: Task*::run_and_delete
      Src: /src/brpc/src/bthread/timer_thread.cpp:457,1
    - Dst: store
      Src: /src/brpc/src/bthread/timer_thread.cpp:463,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:463,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:465,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:470,1
    - Dst: std::vector::size
      Src: /src/brpc/src/bthread/timer_thread.cpp:471,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:475,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/bthread/timer_thread.cpp:476,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:485,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:497,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/bthread/timer_thread.cpp:498,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/timer_thread.cpp:510,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:514,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/timer_thread.cpp:515,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:517,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 84
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 518
    functionName: bthread::TimerThread::run
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - std::pop_heap
    - butil::gettimeofday_us
    - std::push_heap
    - store
    - butil::microseconds_to_timespec
    - std::vector::size
    - std::vector::pop_back
    - std::vector::reserve
    - bvar_prefix::empty
    - bvar::PerSecond::expose_as
    - std::vector::end
    - logging::ComlogInitializer::ComlogInitializer
    - std::vector::resize
    - run_worker_startfn
    - Task*::run_and_delete
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - consume_tasks
    - butil::BaseIteratorRangeToNumberTraits::max
    - std::vector::begin
    - futex_wait_private
    - BAIDU_UNLIKELY
    - pthread_self
    - std::make_heap
    - load
    - std::vector::empty
    - Task*::try_delete
    linkageType: ''
    returnType: void
    signature: void TimerThread::run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/bthread/timer_thread.cpp:521,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/timer_thread.cpp:526,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/timer_thread.cpp:531,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/timer_thread.cpp:534,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/timer_thread.cpp:535,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 538
      start: 520
    functionDepth: 1
    functionLinenumber: 520
    functionLinenumberEnd: 538
    functionName: bthread::TimerThread::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 10
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - pthread_join
    - exchange
    - pthread_self
    - futex_wake_private
    linkageType: ''
    returnType: void
    signature: void TimerThread::stop_and_join()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: TimerThread::TimerThread
      Src: /src/brpc/src/bthread/timer_thread.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:545,1
    - Dst: start
      Src: /src/brpc/src/bthread/timer_thread.cpp:551,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/timer_thread.cpp:553,1
    - Dst: berror
      Src: /src/brpc/src/bthread/timer_thread.cpp:553,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 542
    functionDepth: 5
    functionLinenumber: 542
    functionLinenumberEnd: 558
    functionName: bthread::init_global_timer_thread
    functionSourceFile: /src/brpc/src/bthread/timer_thread.cpp
    functionUses: 0
    functionsReached:
    - TimerThread::TimerThread
    - start
    - LOG
    - berror
    linkageType: ''
    returnType: void
    signature: void init_global_timer_thread()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/bthread/timer_thread.cpp:560,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 562
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 562
    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: 565
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 565
    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:
    - bthread::butex_wait
    - bvar::is_sampling_range_valid
    - butil::cpuwide_time_ns
    - submit_contention
    - auto::compare_exchange_weak
    - bvar::is_collectable
    - auto::load
    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: 4
    functionLinenumber: 111
    functionLinenumberEnd: 127
    functionName: bthread::bthread_sem_post
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - butil::cpuwide_time_ns
    - bvar::is_sampling_range_valid
    - bthread::butex_wake_n
    - submit_contention
    - bvar::is_collectable
    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:
    - bthread::butex_wait
    - bvar::is_sampling_range_valid
    - butil::cpuwide_time_ns
    - submit_contention
    - auto::compare_exchange_weak
    - bvar::is_collectable
    - auto::load
    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: 4
    functionLinenumber: 111
    functionLinenumberEnd: 127
    functionName: bthread::bthread_sem_post
    functionSourceFile: /src/brpc/src/bthread/semaphore.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - butil::cpuwide_time_ns
    - bvar::is_sampling_range_valid
    - bthread::butex_wake_n
    - submit_contention
    - bvar::is_collectable
    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: 5
    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: 5
    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: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:59,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:60,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - start_ns
    - sampling_range
    argTypes:
    - int64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 64
    functionName: bthread::submit_contention_if_sampled
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - submit_contention
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE submit_contention_if_sampled(\n        int64_t
      start_ns, size_t sampling_range)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:118,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/rwlock.cpp:128,1
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:138,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:145,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:152,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:176,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 32
    argCount: 3
    argNames:
    - rwlock
    - try_lock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - bool
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 93
    functionDepth: 4
    functionLinenumber: 93
    functionLinenumberEnd: 178
    functionName: bthread::rwlock_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - bthread::submit_contention_if_sampled
    - auto::compare_exchange_weak
    - LOG
    - BAIDU_UNLIKELY
    - auto::load
    linkageType: ''
    returnType: int
    signature: "int rwlock_rdlock(bthread_rwlock_t* rwlock, bool try_lock,\n                         const
      struct timespec* abstime)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:188,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:195,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/rwlock.cpp:206,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 180
    functionDepth: 4
    functionLinenumber: 180
    functionLinenumberEnd: 210
    functionName: bthread::rwlock_unrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wake
    - auto::load
    - auto::compare_exchange_weak
    - LOG
    linkageType: ''
    returnType: int
    signature: int rwlock_unrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:220,1
    - Dst: auto::fetch_sub
      Src: /src/brpc/src/bthread/rwlock.cpp:224,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/rwlock.cpp:228,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - rwlock
    - write_queue_locked
    argTypes:
    - bthread_rwlock_t*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 218
    functionDepth: 5
    functionLinenumber: 218
    functionLinenumberEnd: 230
    functionName: bthread::rwlock_wrlock_cleanup
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wake_all
    - bthread_mutex_unlock
    - auto::fetch_sub
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE rwlock_wrlock_cleanup(bthread_rwlock_t* rwlock,
      bool write_queue_locked)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: auto::fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:240,1
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/rwlock.cpp:253,1
    - Dst: bthread::rwlock_wrlock_cleanup
      Src: /src/brpc/src/bthread/rwlock.cpp:258,1
    - Dst: bthread_mutex_timedlock
      Src: /src/brpc/src/bthread/rwlock.cpp:265,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:269,1
    - Dst: bthread::rwlock_wrlock_cleanup
      Src: /src/brpc/src/bthread/rwlock.cpp:270,1
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:279,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/rwlock.cpp:292,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:301,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:306,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:317,1
    - Dst: bthread::rwlock_wrlock_cleanup
      Src: /src/brpc/src/bthread/rwlock.cpp:318,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 35
    argCount: 3
    argNames:
    - rwlock
    - try_lock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - bool
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 232
    functionDepth: 6
    functionLinenumber: 232
    functionLinenumberEnd: 320
    functionName: bthread::rwlock_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_timedlock
    - auto::fetch_add
    - bthread::butex_wait
    - bthread::submit_contention_if_sampled
    - auto::compare_exchange_weak
    - bthread::rwlock_wrlock_cleanup
    - auto::load
    - bthread_mutex_trylock
    linkageType: ''
    returnType: int
    signature: "int rwlock_wrlock(bthread_rwlock_t* rwlock, bool try_lock,\n                         const
      struct timespec* abstime)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:337,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:339,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:340,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:348,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:388,1
    - Dst: auto::fetch_sub
      Src: /src/brpc/src/bthread/rwlock.cpp:389,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/rwlock.cpp:391,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:396,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 322
    functionDepth: 5
    functionLinenumber: 322
    functionLinenumberEnd: 399
    functionName: bthread::rwlock_unwrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::submit_contention_if_sampled
    - auto::compare_exchange_weak
    - LOG
    - auto::fetch_sub
    - BAIDU_UNLIKELY
    - auto::load
    - bthread_mutex_unlock
    - bthread::butex_wake_all
    linkageType: ''
    returnType: int
    signature: int rwlock_unwrlock(bthread_rwlock_t* rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:408,1
    - Dst: bthread::rwlock_unwrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:410,1
    - Dst: bthread::rwlock_unrdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 406
    functionDepth: 6
    functionLinenumber: 406
    functionLinenumberEnd: 414
    functionName: bthread::rwlock_unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::rwlock_unwrlock
    - auto::load
    - bthread::rwlock_unrdlock
    linkageType: ''
    returnType: int
    signature: int rwlock_unlock(bthread_rwlock_t* rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:423,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - butex
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 421
    functionDepth: 2
    functionLinenumber: 421
    functionLinenumberEnd: 425
    functionName: operator()(void* butex) const
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void operator()(void* butex) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:432,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:437,1
    - Dst: bthread_mutexattr_init
      Src: /src/brpc/src/bthread/rwlock.cpp:444,1
    - Dst: bthread_mutexattr_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:445,1
    - Dst: bthread_mutexattr_disable_csite
      Src: /src/brpc/src/bthread/rwlock.cpp:449,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/rwlock.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:452,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/bthread/rwlock.cpp:459,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/bthread/rwlock.cpp:460,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 462
    functionName: bthread::rwlock_init
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutexattr_init
    - std::unique_ptr::release
    - LOG
    - bthread_mutexattr_disable_csite
    - bthread_mutex_init
    - bthread_mutexattr_destroy
    linkageType: ''
    returnType: int
    signature: int rwlock_init(bthread_rwlock_t* rwlock)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:468,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:470,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:473,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:477,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 481
    functionName: bthread::rwlock_destroy
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    - LOG
    - bthread::butex_destroy
    linkageType: ''
    returnType: int
    signature: int rwlock_destroy(bthread_rwlock_t* rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:59,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/rwlock.cpp:60,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/rwlock.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - start_ns
    - sampling_range
    argTypes:
    - int64_t
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 64
    functionName: bthread::submit_contention_if_sampled
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 3
    functionsReached:
    - BAIDU_UNLIKELY
    - submit_contention
    - butil::cpuwide_time_ns
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: "BUTIL_FORCE_INLINE submit_contention_if_sampled(\n        int64_t
      start_ns, size_t sampling_range)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:118,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/rwlock.cpp:128,1
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:138,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:145,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:152,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:176,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 32
    argCount: 3
    argNames:
    - rwlock
    - try_lock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - bool
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 93
    functionDepth: 4
    functionLinenumber: 93
    functionLinenumberEnd: 178
    functionName: bthread::rwlock_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::butex_wait
    - bthread::submit_contention_if_sampled
    - auto::compare_exchange_weak
    - LOG
    - BAIDU_UNLIKELY
    - auto::load
    linkageType: ''
    returnType: int
    signature: "int rwlock_rdlock(bthread_rwlock_t* rwlock, bool try_lock,\n                         const
      struct timespec* abstime)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:188,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:195,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/rwlock.cpp:206,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 180
    functionDepth: 4
    functionLinenumber: 180
    functionLinenumberEnd: 210
    functionName: bthread::rwlock_unrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 1
    functionsReached:
    - bthread::butex_wake
    - auto::load
    - auto::compare_exchange_weak
    - LOG
    linkageType: ''
    returnType: int
    signature: int rwlock_unrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:220,1
    - Dst: auto::fetch_sub
      Src: /src/brpc/src/bthread/rwlock.cpp:224,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/rwlock.cpp:228,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - rwlock
    - write_queue_locked
    argTypes:
    - bthread_rwlock_t*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 218
    functionDepth: 5
    functionLinenumber: 218
    functionLinenumberEnd: 230
    functionName: bthread::rwlock_wrlock_cleanup
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 1
    functionsReached:
    - bthread::butex_wake_all
    - bthread_mutex_unlock
    - auto::fetch_sub
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE rwlock_wrlock_cleanup(bthread_rwlock_t* rwlock,
      bool write_queue_locked)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: auto::fetch_add
      Src: /src/brpc/src/bthread/rwlock.cpp:240,1
    - Dst: bthread_mutex_trylock
      Src: /src/brpc/src/bthread/rwlock.cpp:253,1
    - Dst: bthread::rwlock_wrlock_cleanup
      Src: /src/brpc/src/bthread/rwlock.cpp:258,1
    - Dst: bthread_mutex_timedlock
      Src: /src/brpc/src/bthread/rwlock.cpp:265,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:269,1
    - Dst: bthread::rwlock_wrlock_cleanup
      Src: /src/brpc/src/bthread/rwlock.cpp:270,1
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:279,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/rwlock.cpp:292,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:301,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:306,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:317,1
    - Dst: bthread::rwlock_wrlock_cleanup
      Src: /src/brpc/src/bthread/rwlock.cpp:318,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 35
    argCount: 3
    argNames:
    - rwlock
    - try_lock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - bool
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 320
      start: 232
    functionDepth: 6
    functionLinenumber: 232
    functionLinenumberEnd: 320
    functionName: bthread::rwlock_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_timedlock
    - auto::fetch_add
    - bthread::butex_wait
    - bthread::submit_contention_if_sampled
    - auto::compare_exchange_weak
    - bthread::rwlock_wrlock_cleanup
    - auto::load
    - bthread_mutex_trylock
    linkageType: ''
    returnType: int
    signature: "int rwlock_wrlock(bthread_rwlock_t* rwlock, bool try_lock,\n                         const
      struct timespec* abstime)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:337,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/rwlock.cpp:339,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:340,1
    - Dst: auto::compare_exchange_weak
      Src: /src/brpc/src/bthread/rwlock.cpp:348,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:388,1
    - Dst: auto::fetch_sub
      Src: /src/brpc/src/bthread/rwlock.cpp:389,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/bthread/rwlock.cpp:391,1
    - Dst: bthread::submit_contention_if_sampled
      Src: /src/brpc/src/bthread/rwlock.cpp:396,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 322
    functionDepth: 5
    functionLinenumber: 322
    functionLinenumberEnd: 399
    functionName: bthread::rwlock_unwrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 1
    functionsReached:
    - bthread::submit_contention_if_sampled
    - auto::compare_exchange_weak
    - LOG
    - auto::fetch_sub
    - BAIDU_UNLIKELY
    - auto::load
    - bthread_mutex_unlock
    - bthread::butex_wake_all
    linkageType: ''
    returnType: int
    signature: int rwlock_unwrlock(bthread_rwlock_t* rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: auto::load
      Src: /src/brpc/src/bthread/rwlock.cpp:408,1
    - Dst: bthread::rwlock_unwrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:410,1
    - Dst: bthread::rwlock_unrdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 406
    functionDepth: 6
    functionLinenumber: 406
    functionLinenumberEnd: 414
    functionName: bthread::rwlock_unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread::rwlock_unwrlock
    - auto::load
    - bthread::rwlock_unrdlock
    linkageType: ''
    returnType: int
    signature: int rwlock_unlock(bthread_rwlock_t* rwlock)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:423,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - butex
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 425
    functionName: operator()(void* butex) const
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - butex_destroy
    linkageType: ''
    returnType: void
    signature: void operator()(void* butex) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:432,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:437,1
    - Dst: bthread_mutexattr_init
      Src: /src/brpc/src/bthread/rwlock.cpp:444,1
    - Dst: bthread_mutexattr_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:445,1
    - Dst: bthread_mutexattr_disable_csite
      Src: /src/brpc/src/bthread/rwlock.cpp:449,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/bthread/rwlock.cpp:450,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:452,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/bthread/rwlock.cpp:459,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/bthread/rwlock.cpp:460,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 21
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 462
    functionName: bthread::rwlock_init
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutexattr_init
    - std::unique_ptr::release
    - LOG
    - bthread_mutexattr_disable_csite
    - bthread_mutex_init
    - bthread_mutexattr_destroy
    linkageType: ''
    returnType: int
    signature: int rwlock_init(bthread_rwlock_t* rwlock)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:468,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/rwlock.cpp:470,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:473,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:477,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 481
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 481
    functionName: bthread::rwlock_destroy
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_destroy
    - LOG
    - bthread::butex_destroy
    linkageType: ''
    returnType: int
    signature: int rwlock_destroy(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_init
      Src: /src/brpc/src/bthread/rwlock.cpp:489,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 485
    functionDepth: 2
    functionLinenumber: 485
    functionLinenumberEnd: 490
    functionName: bthread_rwlock_init
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 22
    functionsReached:
    - bthread::rwlock_init
    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::rwlock_destroy
      Src: /src/brpc/src/bthread/rwlock.cpp:493,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 492
    functionDepth: 3
    functionLinenumber: 492
    functionLinenumberEnd: 494
    functionName: bthread_rwlock_destroy
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 20
    functionsReached:
    - bthread::rwlock_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:497,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 498
      start: 496
    functionDepth: 5
    functionLinenumber: 496
    functionLinenumberEnd: 498
    functionName: bthread_rwlock_rdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 28
    functionsReached:
    - bthread::rwlock_rdlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_rdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:501,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 500
    functionDepth: 5
    functionLinenumber: 500
    functionLinenumberEnd: 502
    functionName: bthread_rwlock_tryrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - bthread::rwlock_rdlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_tryrdlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_rdlock
      Src: /src/brpc/src/bthread/rwlock.cpp:506,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 507
      start: 504
    functionDepth: 5
    functionLinenumber: 504
    functionLinenumberEnd: 507
    functionName: bthread_rwlock_timedrdlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - bthread::rwlock_rdlock
    linkageType: ''
    returnType: int
    signature: "int bthread_rwlock_timedrdlock(bthread_rwlock_t* __restrict rwlock,\n
      \                              const struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:510,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 509
    functionDepth: 7
    functionLinenumber: 509
    functionLinenumberEnd: 511
    functionName: bthread_rwlock_wrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 24
    functionsReached:
    - bthread::rwlock_wrlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_wrlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:514,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 515
      start: 513
    functionDepth: 7
    functionLinenumber: 513
    functionLinenumberEnd: 515
    functionName: bthread_rwlock_trywrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - bthread::rwlock_wrlock
    linkageType: ''
    returnType: int
    signature: int bthread_rwlock_trywrlock(bthread_rwlock_t* rwlock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_wrlock
      Src: /src/brpc/src/bthread/rwlock.cpp:519,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - rwlock
    - abstime
    argTypes:
    - bthread_rwlock_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 517
    functionDepth: 7
    functionLinenumber: 517
    functionLinenumberEnd: 520
    functionName: bthread_rwlock_timedwrlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 6
    functionsReached:
    - bthread::rwlock_wrlock
    linkageType: ''
    returnType: int
    signature: "int bthread_rwlock_timedwrlock(bthread_rwlock_t* __restrict rwlock,\n
      \                              const struct timespec* __restrict abstime)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bthread::rwlock_unlock
      Src: /src/brpc/src/bthread/rwlock.cpp:523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rwlock
    argTypes:
    - bthread_rwlock_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 524
      start: 522
    functionDepth: 7
    functionLinenumber: 522
    functionLinenumberEnd: 524
    functionName: bthread_rwlock_unlock
    functionSourceFile: /src/brpc/src/bthread/rwlock.cpp
    functionUses: 42
    functionsReached:
    - bthread::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:
    - static_cast<T*>
    - bthread::butex_create
    - BAIDU_CASSERT
    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:
    - static_cast<T*>
    - bthread::butex_create
    - BAIDU_CASSERT
    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: 115
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 115
    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:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - other_flags
    argTypes:
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 121
    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: 187
      start: 184
    functionDepth: 0
    functionLinenumber: 184
    functionLinenumberEnd: 187
    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: 206
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 206
    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: 218
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 218
    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: 228
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 228
    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: 296
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 296
    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: 298
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 298
    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: 300
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 300
    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: 302
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 302
    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: 304
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 304
    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: 306
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 306
    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: 308
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 308
    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: ed_priority_queue
      Src: /src/brpc/src/bthread/task_control.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - tag
    - priority_index
    - tid
    argTypes:
    - bthread_tag_t
    - int
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 112
    functionName: bthread::TaskControl::push_ed_priority_queue
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - ed_priority_queue
    linkageType: ''
    returnType: void
    signature: "void push_ed_priority_queue(\n            bthread_tag_t tag, int priority_index,
      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: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    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: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tag
    - index
    argTypes:
    - bthread_tag_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 138
    functionName: "& ed_priority_queue(\n            bthread_tag_t tag, int index)"
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: WorkStealingQueue<bthread_t>
    signature: "WorkStealingQueue<bthread_t> & ed_priority_queue(\n            bthread_tag_t
      tag, int index)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:199,1
    - Dst: create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 204
    functionName: '& TaskControl::exposed_pending_time()'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    - create_exposed_pending_time
    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: 208
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 208
    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: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    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:216,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.h:219,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.h:220,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.h:221,1
    - Dst: f
      Src: /src/brpc/src/bthread/task_control.h:223,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - F
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 226
    functionName: bthread::TaskControl::for_each_task_group
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    - tag_group
    - tag_ngroup
    - size
    - f
    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: ed_priority_queue
      Src: /src/brpc/src/bthread/task_control.h:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - tag
    - priority_index
    - tid
    argTypes:
    - bthread_tag_t
    - int
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 112
    functionName: bthread::TaskControl::push_ed_priority_queue
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - ed_priority_queue
    linkageType: ''
    returnType: void
    signature: "void push_ed_priority_queue(\n            bthread_tag_t tag, int priority_index,
      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: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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: 131
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 131
    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: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - tag
    - index
    argTypes:
    - bthread_tag_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 138
    functionName: "& ed_priority_queue(\n            bthread_tag_t tag, int index)"
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: WorkStealingQueue<bthread_t>
    signature: "WorkStealingQueue<bthread_t> & ed_priority_queue(\n            bthread_tag_t
      tag, int index)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.h:199,1
    - Dst: create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 198
    functionDepth: 0
    functionLinenumber: 198
    functionLinenumberEnd: 204
    functionName: '& TaskControl::exposed_pending_time()'
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    - create_exposed_pending_time
    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: 208
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 208
    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: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    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:216,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.h:219,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.h:220,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.h:221,1
    - Dst: f
      Src: /src/brpc/src/bthread/task_control.h:223,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' f'
    argTypes:
    - F
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 226
    functionName: bthread::TaskControl::for_each_task_group
    functionSourceFile: /src/brpc/src/bthread/task_control.h
    functionUses: 0
    functionsReached:
    - load
    - tag_group
    - tag_ngroup
    - size
    - f
    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:
    - bthread_mutex_timedlock
    - std::system_error
    - std::system_category
    - bthread_mutex_destroy
    - bthread_mutex_lock
    - try_lock
    - std::error_code
    - CHECK_EQ
    - bthread_mutex_init
    - bthread_mutex_unlock
    - bthread_mutex_trylock
    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::system_category
    - bthread_mutex_init
    - std::error_code
    - std::system_error
    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:
    - bthread_mutex_destroy
    - CHECK_EQ
    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::system_category
    - std::error_code
    - std::system_error
    - bthread_mutex_lock
    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
    - LOG
    - bthread_mutex_lock
    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:
    - CHECK
    - bthread_mutex_lock
    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:
    - CHECK
    - bthread_mutex_trylock
    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
    - LOG
    - bthread_mutex_lock
    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:
    - CHECK
    - bthread_mutex_lock
    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:
    - CHECK
    - bthread_mutex_trylock
    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: _mm_load_si128
      Src: /src/brpc/src/bthread/task_group.cpp:91,1
    - Dst: reinterpret_cast<const __m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:91,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:96,1
    - Dst: reinterpret_cast<const int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:96,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:129,1
    - Dst: const_cast<FastPthreadMutex&>
      Src: /src/brpc/src/bthread/task_group.cpp:129,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 132
    functionName: bthread::AtomicInteger128::load
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const int64_t*>
    - BAIDU_SCOPED_LOCK
    - vld1q_s64
    - _mm_load_si128
    - const_cast<FastPthreadMutex&>
    - reinterpret_cast<const __m128i*>
    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:137,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:137,1
    - Dst: _mm_store_si128
      Src: /src/brpc/src/bthread/task_group.cpp:138,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:138,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:141,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:141,1
    - Dst: vst1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:142,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:142,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:178,1
    - Dst: const_cast<FastPthreadMutex&>
      Src: /src/brpc/src/bthread/task_group.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 1
    argNames:
    - value
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 181
    functionName: bthread::AtomicInteger128::store
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - reinterpret_cast<int64_t*>
    - vld1q_s64
    - _mm_load_si128
    - vst1q_s64
    - _mm_store_si128
    - const_cast<FastPthreadMutex&>
    - reinterpret_cast<__m128i*>
    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:185,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:187,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:188,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - tid
    - out
    argTypes:
    - bthread_t
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 196
    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:199,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:201,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:202,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 207
    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:210,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:212,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:213,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 221
    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:226,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:229,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:230,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.cpp:234,1
    - Dst: ParkingLot::State::stopped
      Src: /src/brpc/src/bthread/task_group.cpp:235,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:238,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:241,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 223
    functionDepth: 2
    functionLinenumber: 223
    functionLinenumberEnd: 244
    functionName: bthread::TaskGroup::wait_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - get_state
    - wait
    - ParkingLot::State::stopped
    - bthread::TaskGroup::steal_task
    - 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:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    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:251,1
    - Dst: CPUTimeStat::cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:253,1
    - Dst: CPUTimeStat::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:254,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:255,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:255,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 258
    functionName: bthread::TaskGroup::cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - load
    - CPUTimeStat::is_main_task
    - butil::cpuwide_time_ns
    - CPUTimeStat::cumulated_cputime_ns
    - 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:263,1
    - Dst: bthread::TaskGroup::wait_task
      Src: /src/brpc/src/bthread/task_group.cpp:267,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:268,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:269,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:270,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:272,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:277,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_group.cpp:278,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:280,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/task_group.cpp:281,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/bthread/task_group.cpp:283,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bthread/task_group.cpp:283,1
    - Dst: bthread::TaskGroup::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:288,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:289,1
    - Dst: load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:289,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 260
    functionDepth: 3
    functionLinenumber: 260
    functionLinenumberEnd: 290
    functionName: bthread::TaskGroup::run_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::sched_to
    - syscall
    - bthread::TaskGroup::task_runner
    - std::unique_ptr::reset
    - std::unique_ptr::unique_ptr
    - butil::cpuwide_time_ns
    - load_unsafe
    - pthread_numeric_id
    - snprintf
    - bthread::TaskGroup::wait_task
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    - DCHECK_EQ
    - bthread::TaskGroup::current_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::run_main_task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - TaskControl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 295
    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:299,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:300,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:305,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:305,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:306,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 309
    functionName: TaskGroup::~TaskGroup()
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - address_meta
    - return_stack
    - get_slot
    - CHECK
    - return_resource
    - TaskMeta*::release_stack
    linkageType: ''
    returnType: void
    signature: void TaskGroup::~TaskGroup()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_get_stackaddr_np
      Src: /src/brpc/src/bthread/task_group.cpp:320,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:320,1
    - Dst: pthread_get_stacksize_np
      Src: /src/brpc/src/bthread/task_group.cpp:321,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:321,1
    - Dst: pthread_getattr_np
      Src: /src/brpc/src/bthread/task_group.cpp:325,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:327,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:327,1
    - Dst: pthread_attr_getstack
      Src: /src/brpc/src/bthread/task_group.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:333,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:333,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/bthread/task_group.cpp:338,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' stack_addr'
    - ' stack_size'
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 341
    functionName: bthread::PthreadAttrGetStack
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - pthread_get_stackaddr_np
    - pthread_attr_destroy
    - pthread_get_stacksize_np
    - berror
    - LOG
    - pthread_self
    - pthread_getattr_np
    - pthread_attr_getstack
    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:345,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:346,1
    - Dst: bthread::TaskGroup::init
      Src: /src/brpc/src/bthread/task_group.cpp:349,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:350,1
    - Dst: PthreadAttrGetStack
      Src: /src/brpc/src/bthread/task_group.cpp:357,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:362,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:364,1
    - Dst: butil::get_resource<TaskMeta>
      Src: /src/brpc/src/bthread/task_group.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:370,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:380,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:383,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:384,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:397,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_group.cpp:398,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 41
    argCount: 1
    argNames:
    - runqueue_capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 402
    functionName: bthread::TaskGroup::init
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - CPUTimeStat::set_last_run_ns
    - butil::get_resource<TaskMeta>
    - store
    - make_tid
    - butil::cpuwide_time_ns
    - LOG
    - bthread::TaskGroup::init
    - TaskMeta*::set_stack
    - get_stack
    - PthreadAttrGetStack
    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:408,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 405
    functionDepth: 2
    functionLinenumber: 405
    functionLinenumberEnd: 410
    functionName: bthread::TaskGroup::asan_task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::internal::FinishSwitchFiber
    - bthread::TaskGroup::task_runner
    linkageType: ''
    returnType: void
    signature: void TaskGroup::asan_task_runner(intptr_t)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:416,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:418,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:418,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:425,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:426,1
    - Dst: TaskGroup*::_control::exposed_pending_time
      Src: /src/brpc/src/bthread/task_group.cpp:450,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:451,1
    - Dst: TaskMeta*::fn
      Src: /src/brpc/src/bthread/task_group.cpp:460,1
    - Dst: value
      Src: /src/brpc/src/bthread/task_group.cpp:462,1
    - Dst: g_end_bthread_span
      Src: /src/brpc/src/bthread/task_group.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:478,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:487,1
    - Dst: g_rpcz_parent_span_dtor
      Src: /src/brpc/src/bthread/task_group.cpp:489,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:490,1
    - Dst: return_keytable
      Src: /src/brpc/src/bthread/task_group.cpp:500,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:502,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:509,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:519,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:521,1
    - Dst: butex_wake_except
      Src: /src/brpc/src/bthread/task_group.cpp:527,1
    - Dst: TaskGroup*::_control::_task_tracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_group.cpp:532,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:534,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:538,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:538,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:539,1
    - Dst: bthread::TaskGroup::ending_sched
      Src: /src/brpc/src/bthread/task_group.cpp:540,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 57
    argCount: 1
    argNames:
    - skip_remained
    argTypes:
    - intptr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 413
    functionDepth: 2
    functionLinenumber: 413
    functionLinenumberEnd: 546
    functionName: bthread::TaskGroup::task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::tag
    - bthread::TaskTracer::set_end_status_unsafe
    - TaskGroup*::_control::_task_tracer::set_status
    - butex_wake_except
    - LOG
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::tls_bls_ptr
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::_control::_task_tracer::WaitForTracing
    - butil::cpuwide_time_ns
    - TaskGroup*::set_remained
    - BAIDU_SCOPED_LOCK
    - g_rpcz_parent_span_dtor
    - return_keytable
    - TaskGroup*::_control::exposed_pending_time
    - bthread::TaskGroup::ending_sched
    - g_end_bthread_span
    - TaskGroup*::tid
    - TaskMeta*::fn
    - fn
    - bthread::TaskTracer::set_running_status
    - value
    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:549,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:550,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:551,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:551,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:554,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:556,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 548
    functionDepth: 0
    functionLinenumber: 548
    functionLinenumberEnd: 557
    functionName: bthread::TaskGroup::_release_last_context
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - return_stack
    - get_slot
    - return_resource
    - TaskMeta*::set_stack
    - static_cast<TaskMeta*>
    - TaskMeta*::release_stack
    - TaskMeta*::stack_type
    linkageType: ''
    returnType: void
    signature: void TaskGroup::_release_last_context(void* arg)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:564,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:567,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:570,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:571,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:574,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:574,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:581,1
    - Dst: g_create_bthread_span
      Src: /src/brpc/src/bthread/task_group.cpp:586,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:588,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:593,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:597,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:600,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:604,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:604,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:606,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/task_group.cpp:608,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:610,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:617,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:623,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:625,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:626,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 51
    argCount: 5
    argNames:
    - pg
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - TaskGroup**
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 629
    functionName: bthread::TaskGroup::start_foreground
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::sched_to
    - TaskMeta*::current_waiter::load
    - TaskGroup*::tag
    - TaskGroup*::set_remained
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::current_task
    - make_tid
    - butil::cpuwide_time_ns
    - CHECK
    - TaskGroup*::_control::_task_tracer::set_status
    - LOG
    - g_create_bthread_span
    - __builtin_expect
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - butil::get_resource
    - TaskGroup*::is_current_pthread_task
    - 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: 7
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:636,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:639,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:642,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:643,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:646,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:646,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:653,1
    - Dst: g_create_bthread_span
      Src: /src/brpc/src/bthread/task_group.cpp:658,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:660,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:665,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:669,1
    - Dst: bthread::TaskGroup::tag
      Src: /src/brpc/src/bthread/task_group.cpp:671,1
    - Dst: tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:673,1
    - Dst: bthread::TaskGroup::tag
      Src: /src/brpc/src/bthread/task_group.cpp:673,1
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:675,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:678,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:680,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 42
    argCount: 4
    argNames:
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 632
    functionDepth: 1
    functionLinenumber: 632
    functionLinenumberEnd: 683
    functionName: bthread::TaskGroup::start_background
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskMeta*::current_waiter::load
    - bthread::TaskGroup::ready_to_run_remote
    - make_tid
    - butil::cpuwide_time_ns
    - CHECK
    - _task_tracer::set_status
    - LOG
    - g_create_bthread_span
    - __builtin_expect
    - bthread::TaskGroup::ready_to_run
    - bthread::TaskGroup::tag
    - tag_nbthreads
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - butil::get_resource
    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:698,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:701,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:702,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:706,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:707,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:711,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/task_group.cpp:713,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/task_group.cpp:721,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - tid
    - return_value
    argTypes:
    - bthread_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 697
    functionDepth: 1
    functionLinenumber: 697
    functionLinenumberEnd: 726
    functionName: bthread::TaskGroup::join
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - butex_wait
    - get_version
    - std::atomic_thread_fence
    - __builtin_expect
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - TaskGroup*::current_tid
    - bthread::TaskGroup::address_meta
    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:730,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:732,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 728
    functionDepth: 1
    functionLinenumber: 728
    functionLinenumberEnd: 736
    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:739,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 741
    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:752,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:754,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:756,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:762,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:764,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:764,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:769,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:769,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:772,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:773,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:775,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:775,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:778,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:785,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:789,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 743
    functionDepth: 1
    functionLinenumber: 743
    functionLinenumberEnd: 790
    functionName: bthread::TaskGroup::ending_sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::sched_to
    - TaskGroup*::steal_task
    - TaskGroup*::_rq::pop
    - TaskMeta*::set_stack
    - TaskMeta*::release_stack
    - get_stack
    - TaskGroup*::_rq::steal
    - TaskMeta*::stack_type
    - bthread::TaskGroup::address_meta
    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:797,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:799,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:801,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:805,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 806
    functionName: bthread::TaskGroup::sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::_rq::steal
    - TaskGroup*::steal_task
    - TaskGroup*::_rq::pop
    - bthread::TaskGroup::sched_to
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched(TaskGroup** pg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:814,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:820,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:823,1
    - Dst: TaskGroup*::_cpu_time_stat::load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:824,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:825,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:828,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:828,1
    - Dst: CPUTimeStat::add_cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:829,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:829,1
    - Dst: TaskGroup*::_cpu_time_stat::store
      Src: /src/brpc/src/bthread/task_group.cpp:830,1
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:833,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:845,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:848,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:849,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:855,1
    - Dst: CheckBthreadScheSafety
      Src: /src/brpc/src/bthread/task_group.cpp:861,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:863,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:864,1
    - Dst: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
      Src: /src/brpc/src/bthread/task_group.cpp:867,1
    - Dst: jump_stack
      Src: /src/brpc/src/bthread/task_group.cpp:868,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:871,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:873,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:873,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:880,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:887,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:891,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:891,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:897,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:898,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:904,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 51
    argCount: 2
    argNames:
    - pg
    - next_meta
    argTypes:
    - TaskGroup**
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 810
    functionDepth: 2
    functionLinenumber: 810
    functionLinenumberEnd: 910
    functionName: bthread::TaskGroup::sched_to
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 8
    functionsReached:
    - CPUTimeStat::set_last_run_ns
    - TaskGroup*::_control::_task_tracer::set_status
    - LOG
    - BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::cputhread_time_ns
    - TaskGroup*::_cpu_time_stat::store
    - butil::cpuwide_time_ns
    - CHECK
    - CPUTimeStat::add_cumulated_cputime_ns
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::current_tid
    - TaskGroup*::tid
    - TaskGroup*::_cpu_time_stat::load_unsafe
    - bthread::TaskGroup::is_main_task
    - jump_stack
    - __builtin_expect
    - fn
    - bthread::TaskTracer::set_running_status
    - CheckBthreadScheSafety
    - CPUTimeStat::last_run_ns
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched_to(TaskGroup** pg, TaskMeta* next_meta)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _destroy_group
      Src: /src/brpc/src/bthread/task_group.cpp:914,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 912
    functionDepth: 1
    functionLinenumber: 912
    functionLinenumberEnd: 919
    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:924,1
    - Dst: bthread::TaskGroup::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:926,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:933,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 922
    functionDepth: 2
    functionLinenumber: 922
    functionLinenumberEnd: 935
    functionName: bthread::TaskGroup::ready_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - signal_task
    - bthread::TaskGroup::push_rq
    - _task_tracer::set_status
    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:942,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 937
    functionDepth: 0
    functionLinenumber: 937
    functionLinenumberEnd: 944
    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:948,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:950,1
    - Dst: push_locked
      Src: /src/brpc/src/bthread/task_group.cpp:951,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
      Src: /src/brpc/src/bthread/task_group.cpp:952,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/task_group.cpp:953,1
    - Dst: capacity
      Src: /src/brpc/src/bthread/task_group.cpp:954,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/task_group.cpp:955,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:956,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:960,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:965,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:966,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 968
      start: 946
    functionDepth: 1
    functionLinenumber: 946
    functionLinenumberEnd: 968
    functionName: bthread::TaskGroup::ready_to_run_remote
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - _mutex::lock
    - capacity
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    - _task_tracer::set_status
    - push_locked
    - signal_task
    - _mutex::unlock
    - LOG_EVERY_SECOND
    - bthread::TaskGroup::usleep
    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:973,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_group.cpp:978,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:979,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' locked_mutex'
    argTypes:
    - butil::Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 970
    functionDepth: 0
    functionLinenumber: 970
    functionLinenumberEnd: 980
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:983,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:984,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:986,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 982
    functionDepth: 3
    functionLinenumber: 982
    functionLinenumberEnd: 987
    functionName: bthread::TaskGroup::ready_to_run_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:990,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/task_group.cpp:991,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote
      Src: /src/brpc/src/bthread/task_group.cpp:993,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 994
      start: 989
    functionDepth: 2
    functionLinenumber: 989
    functionLinenumberEnd: 994
    functionName: bthread::TaskGroup::flush_nosignal_tasks_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:997,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:998,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 996
    functionDepth: 1
    functionLinenumber: 996
    functionLinenumberEnd: 1000
    functionName: bthread::TaskGroup::ready_to_run_in_worker
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:1003,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1004,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:1007,1
    - Dst: TaskGroup*::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:1009,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1010
    functionName: bthread::TaskGroup::ready_to_run_in_worker_ignoresignal
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - TaskGroup*::_control::_task_tracer::set_status
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::push_rq
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_in_worker_ignoresignal(void* args_in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:1013,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1014,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:1016,1
    - Dst: TaskGroup*::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:1019,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/task_group.cpp:1021,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1023
      start: 1012
    functionDepth: 1
    functionLinenumber: 1012
    functionLinenumberEnd: 1023
    functionName: bthread::TaskGroup::priority_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::control
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::_control::_task_tracer::set_status
    - TaskGroup*::push_rq
    - static_cast<ReadyToRunArgs*>
    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:1033,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1033,1
    - Dst: static_cast<const SleepArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:1034,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:1036,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/task_group.cpp:1037,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1032
    functionDepth: 1
    functionLinenumber: 1032
    functionLinenumberEnd: 1038
    functionName: bthread::ready_to_run_from_timer_thread
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::control
    - TaskGroup*::tag
    - CHECK
    - static_cast<const SleepArgs*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:1044,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:1047,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1051,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_group.cpp:1053,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1058,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1063,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1065,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1074,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1082,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1084
      start: 1040
    functionDepth: 1
    functionLinenumber: 1040
    functionLinenumberEnd: 1084
    functionName: bthread::TaskGroup::_add_sleep_event
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - static_cast<SleepArgs*>
    - TaskGroup*::_control::_task_tracer::set_status
    - get_global_timer_thread
    - butil::microseconds_from_now
    - get_version
    - 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:1089,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:1095,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:1095,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:1096,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:1097,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - pg
    - timeout_us
    argTypes:
    - TaskGroup**
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1118
      start: 1087
    functionDepth: 1
    functionLinenumber: 1087
    functionLinenumberEnd: 1118
    functionName: bthread::TaskGroup::usleep
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 13
    functionsReached:
    - TaskGroup*::current_task
    - bthread::TaskGroup::sched
    - bthread::TaskGroup::yield
    - TaskGroup*::set_remained
    - TaskGroup*::current_tid
    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:1125,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1129,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1130,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/task_group.cpp:1132,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: 1139
      start: 1123
    functionDepth: 1
    functionLinenumber: 1123
    functionLinenumberEnd: 1139
    functionName: bthread::interrupt_and_consume_waiters
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - TaskMeta*::current_waiter::exchange
    - BAIDU_SCOPED_LOCK
    - bthread::get_version
    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:1142,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1144,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1145,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/task_group.cpp:1148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - tid
    - w
    argTypes:
    - bthread_t
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1141
    functionDepth: 1
    functionLinenumber: 1141
    functionLinenumberEnd: 1153
    functionName: bthread::set_butex_waiter
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskMeta*::current_waiter::store
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - bthread::get_version
    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:1166,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:1171,1
    - Dst: erase_from_butex_because_of_interruption
      Src: /src/brpc/src/bthread/task_group.cpp:1173,1
    - Dst: set_butex_waiter
      Src: /src/brpc/src/bthread/task_group.cpp:1176,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:1178,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1182,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1183,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1184,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1186,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/task_group.cpp:1191,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 2
    argNames:
    - tid
    - c
    argTypes:
    - bthread_t
    - TaskControl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1162
    functionDepth: 1
    functionLinenumber: 1162
    functionLinenumberEnd: 1196
    functionName: bthread::TaskGroup::interrupt
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - erase_from_butex_because_of_interruption
    - CHECK
    - get_global_timer_thread
    - LOG
    - TaskControl*::choose_one_group
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - interrupt_and_consume_waiters
    - bthread::TaskGroup::address_meta
    - set_butex_waiter
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: int
    signature: int TaskGroup::interrupt(bthread_t tid, TaskControl* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:1200,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:1201,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:1202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1203
      start: 1198
    functionDepth: 1
    functionLinenumber: 1198
    functionLinenumberEnd: 1203
    functionName: bthread::TaskGroup::yield
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::set_remained
    - TaskGroup*::tag
    - bthread::TaskGroup::sched
    linkageType: ''
    returnType: void
    signature: void TaskGroup::yield(TaskGroup** pg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1207,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1212,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1227,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:1260,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/src/bthread/task_group.cpp:1269,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 39
    argCount: 3
    argNames:
    - ' os'
    - tid
    - enable_trace
    argTypes:
    - std::ostream
    - bthread_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1277
      start: 1205
    functionDepth: 1
    functionLinenumber: 1205
    functionLinenumberEnd: 1277
    functionName: bthread::print_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_ns
    - bthread::get_version
    - bthread::TaskGroup::address_meta
    - bthread::stack_trace
    linkageType: ''
    returnType: void
    signature: "void print_task(std::ostream& os, bthread_t tid, bool enable_trace,\n
      \               bool ignore_not_matched = false)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _mm_load_si128
      Src: /src/brpc/src/bthread/task_group.cpp:91,1
    - Dst: reinterpret_cast<const __m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:91,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:96,1
    - Dst: reinterpret_cast<const int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:96,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:129,1
    - Dst: const_cast<FastPthreadMutex&>
      Src: /src/brpc/src/bthread/task_group.cpp:129,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 132
    functionName: bthread::AtomicInteger128::load
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const int64_t*>
    - BAIDU_SCOPED_LOCK
    - vld1q_s64
    - _mm_load_si128
    - const_cast<FastPthreadMutex&>
    - reinterpret_cast<const __m128i*>
    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:137,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:137,1
    - Dst: _mm_store_si128
      Src: /src/brpc/src/bthread/task_group.cpp:138,1
    - Dst: reinterpret_cast<__m128i*>
      Src: /src/brpc/src/bthread/task_group.cpp:138,1
    - Dst: vld1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:141,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:141,1
    - Dst: vst1q_s64
      Src: /src/brpc/src/bthread/task_group.cpp:142,1
    - Dst: reinterpret_cast<int64_t*>
      Src: /src/brpc/src/bthread/task_group.cpp:142,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:178,1
    - Dst: const_cast<FastPthreadMutex&>
      Src: /src/brpc/src/bthread/task_group.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 15
    argCount: 1
    argNames:
    - value
    argTypes:
    - Value
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 134
    functionDepth: 1
    functionLinenumber: 134
    functionLinenumberEnd: 181
    functionName: bthread::AtomicInteger128::store
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - reinterpret_cast<int64_t*>
    - vld1q_s64
    - _mm_load_si128
    - vst1q_s64
    - _mm_store_si128
    - const_cast<FastPthreadMutex&>
    - reinterpret_cast<__m128i*>
    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:185,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:187,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:188,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - tid
    - out
    argTypes:
    - bthread_t
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 196
    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:199,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:201,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:202,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 207
    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:210,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:212,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:213,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 221
    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:226,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:229,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:230,1
    - Dst: get_state
      Src: /src/brpc/src/bthread/task_group.cpp:234,1
    - Dst: ParkingLot::State::stopped
      Src: /src/brpc/src/bthread/task_group.cpp:235,1
    - Dst: bthread::TaskGroup::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:238,1
    - Dst: wait
      Src: /src/brpc/src/bthread/task_group.cpp:241,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 223
    functionDepth: 2
    functionLinenumber: 223
    functionLinenumberEnd: 244
    functionName: bthread::TaskGroup::wait_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - get_state
    - wait
    - ParkingLot::State::stopped
    - bthread::TaskGroup::steal_task
    - 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:247,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 248
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 248
    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:251,1
    - Dst: CPUTimeStat::cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:253,1
    - Dst: CPUTimeStat::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:254,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:255,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:255,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 258
      start: 250
    functionDepth: 1
    functionLinenumber: 250
    functionLinenumberEnd: 258
    functionName: bthread::TaskGroup::cumulated_cputime_ns
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - load
    - CPUTimeStat::is_main_task
    - butil::cpuwide_time_ns
    - CPUTimeStat::cumulated_cputime_ns
    - 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:263,1
    - Dst: bthread::TaskGroup::wait_task
      Src: /src/brpc/src/bthread/task_group.cpp:267,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:268,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:269,1
    - Dst: DCHECK_EQ
      Src: /src/brpc/src/bthread/task_group.cpp:270,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:272,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:277,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_group.cpp:278,1
    - Dst: snprintf
      Src: /src/brpc/src/bthread/task_group.cpp:280,1
    - Dst: syscall
      Src: /src/brpc/src/bthread/task_group.cpp:281,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/bthread/task_group.cpp:283,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
      Src: /src/brpc/src/bthread/task_group.cpp:283,1
    - Dst: bthread::TaskGroup::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:288,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:289,1
    - Dst: load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:289,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 260
    functionDepth: 3
    functionLinenumber: 260
    functionLinenumberEnd: 290
    functionName: bthread::TaskGroup::run_main_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::sched_to
    - syscall
    - bthread::TaskGroup::task_runner
    - std::unique_ptr::reset
    - std::unique_ptr::unique_ptr
    - butil::cpuwide_time_ns
    - load_unsafe
    - pthread_numeric_id
    - snprintf
    - bthread::TaskGroup::wait_task
    - bvar::PerSecond<bvar::PassiveStatus<double> >::PassiveStatus<double> >
    - DCHECK_EQ
    - bthread::TaskGroup::current_task
    linkageType: ''
    returnType: void
    signature: void TaskGroup::run_main_task()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:294,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - c
    argTypes:
    - TaskControl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 295
    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:299,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:300,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:305,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:305,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:306,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:306,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 309
    functionName: TaskGroup::~TaskGroup()
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - address_meta
    - return_stack
    - get_slot
    - CHECK
    - return_resource
    - TaskMeta*::release_stack
    linkageType: ''
    returnType: void
    signature: void TaskGroup::~TaskGroup()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_get_stackaddr_np
      Src: /src/brpc/src/bthread/task_group.cpp:320,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:320,1
    - Dst: pthread_get_stacksize_np
      Src: /src/brpc/src/bthread/task_group.cpp:321,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:321,1
    - Dst: pthread_getattr_np
      Src: /src/brpc/src/bthread/task_group.cpp:325,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_group.cpp:325,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:327,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:327,1
    - Dst: pthread_attr_getstack
      Src: /src/brpc/src/bthread/task_group.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:333,1
    - Dst: berror
      Src: /src/brpc/src/bthread/task_group.cpp:333,1
    - Dst: pthread_attr_destroy
      Src: /src/brpc/src/bthread/task_group.cpp:338,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' stack_addr'
    - ' stack_size'
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 318
    functionDepth: 1
    functionLinenumber: 318
    functionLinenumberEnd: 341
    functionName: bthread::PthreadAttrGetStack
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - pthread_get_stackaddr_np
    - pthread_attr_destroy
    - pthread_get_stacksize_np
    - berror
    - LOG
    - pthread_self
    - pthread_getattr_np
    - pthread_attr_getstack
    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:345,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:346,1
    - Dst: bthread::TaskGroup::init
      Src: /src/brpc/src/bthread/task_group.cpp:349,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:350,1
    - Dst: PthreadAttrGetStack
      Src: /src/brpc/src/bthread/task_group.cpp:357,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:362,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:364,1
    - Dst: butil::get_resource<TaskMeta>
      Src: /src/brpc/src/bthread/task_group.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:370,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:380,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:383,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:384,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:397,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_group.cpp:398,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 41
    argCount: 1
    argNames:
    - runqueue_capacity
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 402
    functionName: bthread::TaskGroup::init
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - CPUTimeStat::set_last_run_ns
    - butil::get_resource<TaskMeta>
    - store
    - make_tid
    - butil::cpuwide_time_ns
    - LOG
    - bthread::TaskGroup::init
    - TaskMeta*::set_stack
    - get_stack
    - PthreadAttrGetStack
    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:408,1
    - Dst: bthread::TaskGroup::task_runner
      Src: /src/brpc/src/bthread/task_group.cpp:409,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 405
    functionDepth: 3
    functionLinenumber: 405
    functionLinenumberEnd: 410
    functionName: bthread::TaskGroup::asan_task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::internal::FinishSwitchFiber
    - bthread::TaskGroup::task_runner
    linkageType: ''
    returnType: void
    signature: void TaskGroup::asan_task_runner(intptr_t)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:416,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:418,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:418,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:425,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:426,1
    - Dst: TaskGroup*::_control::exposed_pending_time
      Src: /src/brpc/src/bthread/task_group.cpp:450,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:451,1
    - Dst: TaskMeta*::fn
      Src: /src/brpc/src/bthread/task_group.cpp:460,1
    - Dst: value
      Src: /src/brpc/src/bthread/task_group.cpp:462,1
    - Dst: g_end_bthread_span
      Src: /src/brpc/src/bthread/task_group.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:478,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:487,1
    - Dst: g_rpcz_parent_span_dtor
      Src: /src/brpc/src/bthread/task_group.cpp:489,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:490,1
    - Dst: return_keytable
      Src: /src/brpc/src/bthread/task_group.cpp:500,1
    - Dst: bthread::tls_bls_ptr
      Src: /src/brpc/src/bthread/task_group.cpp:502,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:509,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:519,1
    - Dst: bthread::TaskTracer::set_end_status_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:521,1
    - Dst: butex_wake_except
      Src: /src/brpc/src/bthread/task_group.cpp:527,1
    - Dst: TaskGroup*::_control::_task_tracer::WaitForTracing
      Src: /src/brpc/src/bthread/task_group.cpp:532,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:534,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:538,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:538,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:539,1
    - Dst: bthread::TaskGroup::ending_sched
      Src: /src/brpc/src/bthread/task_group.cpp:540,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 57
    argCount: 1
    argNames:
    - skip_remained
    argTypes:
    - intptr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 546
      start: 413
    functionDepth: 2
    functionLinenumber: 413
    functionLinenumberEnd: 546
    functionName: bthread::TaskGroup::task_runner
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 4
    functionsReached:
    - TaskGroup*::tag
    - bthread::TaskTracer::set_end_status_unsafe
    - TaskGroup*::_control::_task_tracer::set_status
    - butex_wake_except
    - LOG
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - bthread::tls_bls_ptr
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::_control::_task_tracer::WaitForTracing
    - butil::cpuwide_time_ns
    - TaskGroup*::set_remained
    - BAIDU_SCOPED_LOCK
    - g_rpcz_parent_span_dtor
    - return_keytable
    - TaskGroup*::_control::exposed_pending_time
    - bthread::TaskGroup::ending_sched
    - g_end_bthread_span
    - TaskGroup*::tid
    - TaskMeta*::fn
    - fn
    - bthread::TaskTracer::set_running_status
    - value
    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:549,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:550,1
    - Dst: return_stack
      Src: /src/brpc/src/bthread/task_group.cpp:551,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:551,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:554,1
    - Dst: return_resource
      Src: /src/brpc/src/bthread/task_group.cpp:556,1
    - Dst: get_slot
      Src: /src/brpc/src/bthread/task_group.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 557
      start: 548
    functionDepth: 0
    functionLinenumber: 548
    functionLinenumberEnd: 557
    functionName: bthread::TaskGroup::_release_last_context
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - return_stack
    - get_slot
    - return_resource
    - TaskMeta*::set_stack
    - static_cast<TaskMeta*>
    - TaskMeta*::release_stack
    - TaskMeta*::stack_type
    linkageType: ''
    returnType: void
    signature: void TaskGroup::_release_last_context(void* arg)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:564,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:567,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:570,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:571,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:574,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:574,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:581,1
    - Dst: g_create_bthread_span
      Src: /src/brpc/src/bthread/task_group.cpp:586,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:588,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:593,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:597,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:600,1
    - Dst: TaskGroup*::_control::tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:604,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:604,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:606,1
    - Dst: TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/bthread/task_group.cpp:608,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:610,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:617,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:623,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:625,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:626,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 51
    argCount: 5
    argNames:
    - pg
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - TaskGroup**
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 559
    functionDepth: 1
    functionLinenumber: 559
    functionLinenumberEnd: 629
    functionName: bthread::TaskGroup::start_foreground
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - bthread::TaskGroup::sched_to
    - TaskMeta*::current_waiter::load
    - TaskGroup*::tag
    - TaskGroup*::set_remained
    - TaskGroup*::_control::tag_nbthreads
    - TaskGroup*::current_task
    - make_tid
    - butil::cpuwide_time_ns
    - CHECK
    - TaskGroup*::_control::_task_tracer::set_status
    - LOG
    - g_create_bthread_span
    - __builtin_expect
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - butil::get_resource
    - TaskGroup*::is_current_pthread_task
    - 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: 7
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:636,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:639,1
    - Dst: butil::get_resource
      Src: /src/brpc/src/bthread/task_group.cpp:642,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:643,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:646,1
    - Dst: TaskMeta*::current_waiter::load
      Src: /src/brpc/src/bthread/task_group.cpp:646,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:653,1
    - Dst: g_create_bthread_span
      Src: /src/brpc/src/bthread/task_group.cpp:658,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:660,1
    - Dst: make_tid
      Src: /src/brpc/src/bthread/task_group.cpp:665,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:669,1
    - Dst: bthread::TaskGroup::tag
      Src: /src/brpc/src/bthread/task_group.cpp:671,1
    - Dst: tag_nbthreads
      Src: /src/brpc/src/bthread/task_group.cpp:673,1
    - Dst: bthread::TaskGroup::tag
      Src: /src/brpc/src/bthread/task_group.cpp:673,1
    - Dst: _task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:675,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:678,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:680,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 42
    argCount: 4
    argNames:
    - th
    - attr
    - (*fn)(void*)
    - arg
    argTypes:
    - bthread_t*
    - bthread_attr_t*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 632
    functionDepth: 3
    functionLinenumber: 632
    functionLinenumberEnd: 683
    functionName: bthread::TaskGroup::start_background
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskMeta*::current_waiter::load
    - bthread::TaskGroup::ready_to_run_remote
    - make_tid
    - butil::cpuwide_time_ns
    - CHECK
    - _task_tracer::set_status
    - LOG
    - g_create_bthread_span
    - __builtin_expect
    - bthread::TaskGroup::ready_to_run
    - bthread::TaskGroup::tag
    - tag_nbthreads
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - butil::get_resource
    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:698,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:701,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/task_group.cpp:702,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:706,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:707,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:711,1
    - Dst: butex_wait
      Src: /src/brpc/src/bthread/task_group.cpp:713,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/bthread/task_group.cpp:721,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 20
    argCount: 2
    argNames:
    - tid
    - return_value
    argTypes:
    - bthread_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 726
      start: 697
    functionDepth: 1
    functionLinenumber: 697
    functionLinenumberEnd: 726
    functionName: bthread::TaskGroup::join
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - butex_wait
    - get_version
    - std::atomic_thread_fence
    - __builtin_expect
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_UNLIKELY
    - TaskGroup*::current_tid
    - bthread::TaskGroup::address_meta
    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:730,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:732,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 736
      start: 728
    functionDepth: 1
    functionLinenumber: 728
    functionLinenumberEnd: 736
    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:739,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 741
      start: 738
    functionDepth: 1
    functionLinenumber: 738
    functionLinenumberEnd: 741
    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:752,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:754,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:756,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:762,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:764,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:764,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:769,1
    - Dst: TaskMeta*::release_stack
      Src: /src/brpc/src/bthread/task_group.cpp:769,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:772,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:773,1
    - Dst: get_stack
      Src: /src/brpc/src/bthread/task_group.cpp:775,1
    - Dst: TaskMeta*::stack_type
      Src: /src/brpc/src/bthread/task_group.cpp:775,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:778,1
    - Dst: TaskMeta*::set_stack
      Src: /src/brpc/src/bthread/task_group.cpp:785,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:789,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 790
      start: 743
    functionDepth: 1
    functionLinenumber: 743
    functionLinenumberEnd: 790
    functionName: bthread::TaskGroup::ending_sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - bthread::TaskGroup::sched_to
    - TaskGroup*::steal_task
    - TaskGroup*::_rq::pop
    - TaskMeta*::set_stack
    - TaskMeta*::release_stack
    - get_stack
    - TaskGroup*::_rq::steal
    - TaskMeta*::stack_type
    - bthread::TaskGroup::address_meta
    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:797,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_group.cpp:799,1
    - Dst: TaskGroup*::steal_task
      Src: /src/brpc/src/bthread/task_group.cpp:801,1
    - Dst: bthread::TaskGroup::sched_to
      Src: /src/brpc/src/bthread/task_group.cpp:805,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 792
    functionDepth: 0
    functionLinenumber: 792
    functionLinenumberEnd: 806
    functionName: bthread::TaskGroup::sched
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 4
    functionsReached:
    - TaskGroup*::_rq::steal
    - TaskGroup*::steal_task
    - TaskGroup*::_rq::pop
    - bthread::TaskGroup::sched_to
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched(TaskGroup** pg)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:814,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:820,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:823,1
    - Dst: TaskGroup*::_cpu_time_stat::load_unsafe
      Src: /src/brpc/src/bthread/task_group.cpp:824,1
    - Dst: CPUTimeStat::last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:825,1
    - Dst: CPUTimeStat::set_last_run_ns
      Src: /src/brpc/src/bthread/task_group.cpp:828,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:828,1
    - Dst: CPUTimeStat::add_cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_group.cpp:829,1
    - Dst: bthread::TaskGroup::is_main_task
      Src: /src/brpc/src/bthread/task_group.cpp:829,1
    - Dst: TaskGroup*::_cpu_time_stat::store
      Src: /src/brpc/src/bthread/task_group.cpp:830,1
    - Dst: butil::cputhread_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:833,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_group.cpp:845,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:848,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:849,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:855,1
    - Dst: CheckBthreadScheSafety
      Src: /src/brpc/src/bthread/task_group.cpp:861,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:863,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:864,1
    - Dst: BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
      Src: /src/brpc/src/bthread/task_group.cpp:867,1
    - Dst: jump_stack
      Src: /src/brpc/src/bthread/task_group.cpp:868,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:871,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:873,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:873,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:880,1
    - Dst: bthread::TaskTracer::set_running_status
      Src: /src/brpc/src/bthread/task_group.cpp:887,1
    - Dst: TaskGroup*::tid
      Src: /src/brpc/src/bthread/task_group.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:891,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:891,1
    - Dst: fn
      Src: /src/brpc/src/bthread/task_group.cpp:897,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:898,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:904,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 51
    argCount: 2
    argNames:
    - pg
    - next_meta
    argTypes:
    - TaskGroup**
    - TaskMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 810
    functionDepth: 2
    functionLinenumber: 810
    functionLinenumberEnd: 910
    functionName: bthread::TaskGroup::sched_to
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 12
    functionsReached:
    - CPUTimeStat::set_last_run_ns
    - TaskGroup*::_control::_task_tracer::set_status
    - LOG
    - BTHREAD_SCOPED_ASAN_FIBER_SWITCHER
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::cputhread_time_ns
    - TaskGroup*::_cpu_time_stat::store
    - butil::cpuwide_time_ns
    - CHECK
    - CPUTimeStat::add_cumulated_cputime_ns
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::current_tid
    - TaskGroup*::tid
    - TaskGroup*::_cpu_time_stat::load_unsafe
    - bthread::TaskGroup::is_main_task
    - jump_stack
    - __builtin_expect
    - fn
    - bthread::TaskTracer::set_running_status
    - CheckBthreadScheSafety
    - CPUTimeStat::last_run_ns
    linkageType: ''
    returnType: void
    signature: void TaskGroup::sched_to(TaskGroup** pg, TaskMeta* next_meta)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _destroy_group
      Src: /src/brpc/src/bthread/task_group.cpp:914,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 912
    functionDepth: 1
    functionLinenumber: 912
    functionLinenumberEnd: 919
    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:924,1
    - Dst: bthread::TaskGroup::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:926,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:933,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 922
    functionDepth: 2
    functionLinenumber: 922
    functionLinenumberEnd: 935
    functionName: bthread::TaskGroup::ready_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - signal_task
    - bthread::TaskGroup::push_rq
    - _task_tracer::set_status
    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:942,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 944
      start: 937
    functionDepth: 0
    functionLinenumber: 937
    functionLinenumberEnd: 944
    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:948,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:950,1
    - Dst: push_locked
      Src: /src/brpc/src/bthread/task_group.cpp:951,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote_locked
      Src: /src/brpc/src/bthread/task_group.cpp:952,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/bthread/task_group.cpp:953,1
    - Dst: capacity
      Src: /src/brpc/src/bthread/task_group.cpp:954,1
    - Dst: bthread::TaskGroup::usleep
      Src: /src/brpc/src/bthread/task_group.cpp:955,1
    - Dst: _mutex::lock
      Src: /src/brpc/src/bthread/task_group.cpp:956,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:960,1
    - Dst: _mutex::unlock
      Src: /src/brpc/src/bthread/task_group.cpp:965,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:966,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 968
      start: 946
    functionDepth: 2
    functionLinenumber: 946
    functionLinenumberEnd: 968
    functionName: bthread::TaskGroup::ready_to_run_remote
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - _mutex::lock
    - capacity
    - bthread::TaskGroup::flush_nosignal_tasks_remote_locked
    - _task_tracer::set_status
    - push_locked
    - signal_task
    - _mutex::unlock
    - LOG_EVERY_SECOND
    - bthread::TaskGroup::usleep
    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:973,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_group.cpp:978,1
    - Dst: signal_task
      Src: /src/brpc/src/bthread/task_group.cpp:979,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' locked_mutex'
    argTypes:
    - butil::Mutex
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 970
    functionDepth: 0
    functionLinenumber: 970
    functionLinenumberEnd: 980
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:983,1
    - Dst: bthread::TaskGroup::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:984,1
    - Dst: bthread::TaskGroup::ready_to_run_remote
      Src: /src/brpc/src/bthread/task_group.cpp:986,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - meta
    - nosignal
    argTypes:
    - TaskMeta*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 982
    functionDepth: 3
    functionLinenumber: 982
    functionLinenumberEnd: 987
    functionName: bthread::TaskGroup::ready_to_run_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:990,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks
      Src: /src/brpc/src/bthread/task_group.cpp:991,1
    - Dst: bthread::TaskGroup::flush_nosignal_tasks_remote
      Src: /src/brpc/src/bthread/task_group.cpp:993,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 994
      start: 989
    functionDepth: 2
    functionLinenumber: 989
    functionLinenumberEnd: 994
    functionName: bthread::TaskGroup::flush_nosignal_tasks_general
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - 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:997,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:998,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 996
    functionDepth: 1
    functionLinenumber: 996
    functionLinenumberEnd: 1000
    functionName: bthread::TaskGroup::ready_to_run_in_worker
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:1003,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1004,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:1007,1
    - Dst: TaskGroup*::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:1009,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1010
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1010
    functionName: bthread::TaskGroup::ready_to_run_in_worker_ignoresignal
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - static_cast<ReadyToRunArgs*>
    - TaskGroup*::_control::_task_tracer::set_status
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::push_rq
    linkageType: ''
    returnType: void
    signature: void TaskGroup::ready_to_run_in_worker_ignoresignal(void* args_in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ReadyToRunArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:1013,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1014,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:1016,1
    - Dst: TaskGroup*::push_rq
      Src: /src/brpc/src/bthread/task_group.cpp:1019,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/task_group.cpp:1021,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - args_in
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1023
      start: 1012
    functionDepth: 1
    functionLinenumber: 1012
    functionLinenumberEnd: 1023
    functionName: bthread::TaskGroup::priority_to_run
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::control
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::_control::_task_tracer::set_status
    - TaskGroup*::push_rq
    - static_cast<ReadyToRunArgs*>
    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:1033,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1033,1
    - Dst: static_cast<const SleepArgs*>
      Src: /src/brpc/src/bthread/task_group.cpp:1034,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:1036,1
    - Dst: TaskGroup*::control
      Src: /src/brpc/src/bthread/task_group.cpp:1037,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1038
      start: 1032
    functionDepth: 1
    functionLinenumber: 1032
    functionLinenumberEnd: 1038
    functionName: bthread::ready_to_run_from_timer_thread
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::control
    - TaskGroup*::tag
    - CHECK
    - static_cast<const SleepArgs*>
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:1044,1
    - Dst: TaskGroup*::_control::_task_tracer::set_status
      Src: /src/brpc/src/bthread/task_group.cpp:1047,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1051,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_group.cpp:1053,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1058,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1063,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1065,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1074,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1082,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1084
      start: 1040
    functionDepth: 1
    functionLinenumber: 1040
    functionLinenumberEnd: 1084
    functionName: bthread::TaskGroup::_add_sleep_event
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - static_cast<SleepArgs*>
    - TaskGroup*::_control::_task_tracer::set_status
    - get_global_timer_thread
    - butil::microseconds_from_now
    - get_version
    - 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:1089,1
    - Dst: TaskGroup*::current_tid
      Src: /src/brpc/src/bthread/task_group.cpp:1095,1
    - Dst: TaskGroup*::current_task
      Src: /src/brpc/src/bthread/task_group.cpp:1095,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:1096,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:1097,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - pg
    - timeout_us
    argTypes:
    - TaskGroup**
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1118
      start: 1087
    functionDepth: 2
    functionLinenumber: 1087
    functionLinenumberEnd: 1118
    functionName: bthread::TaskGroup::usleep
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 14
    functionsReached:
    - TaskGroup*::current_task
    - bthread::TaskGroup::sched
    - bthread::TaskGroup::yield
    - TaskGroup*::set_remained
    - TaskGroup*::current_tid
    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:1125,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1129,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1130,1
    - Dst: TaskMeta*::current_waiter::exchange
      Src: /src/brpc/src/bthread/task_group.cpp:1132,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: 1139
      start: 1123
    functionDepth: 1
    functionLinenumber: 1123
    functionLinenumberEnd: 1139
    functionName: bthread::interrupt_and_consume_waiters
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - bthread::TaskGroup::address_meta
    - TaskMeta*::current_waiter::exchange
    - BAIDU_SCOPED_LOCK
    - bthread::get_version
    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:1142,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1144,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1145,1
    - Dst: TaskMeta*::current_waiter::store
      Src: /src/brpc/src/bthread/task_group.cpp:1148,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - tid
    - w
    argTypes:
    - bthread_t
    - ButexWaiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1141
    functionDepth: 1
    functionLinenumber: 1141
    functionLinenumberEnd: 1153
    functionName: bthread::set_butex_waiter
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 0
    functionsReached:
    - TaskMeta*::current_waiter::store
    - bthread::TaskGroup::address_meta
    - BAIDU_SCOPED_LOCK
    - bthread::get_version
    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:1166,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_group.cpp:1171,1
    - Dst: erase_from_butex_because_of_interruption
      Src: /src/brpc/src/bthread/task_group.cpp:1173,1
    - Dst: set_butex_waiter
      Src: /src/brpc/src/bthread/task_group.cpp:1176,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_group.cpp:1178,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_group.cpp:1182,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_group.cpp:1183,1
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1184,1
    - Dst: TaskGroup*::ready_to_run
      Src: /src/brpc/src/bthread/task_group.cpp:1186,1
    - Dst: TaskControl*::choose_one_group
      Src: /src/brpc/src/bthread/task_group.cpp:1191,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 26
    argCount: 2
    argNames:
    - tid
    - c
    argTypes:
    - bthread_t
    - TaskControl*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1162
    functionDepth: 1
    functionLinenumber: 1162
    functionLinenumberEnd: 1196
    functionName: bthread::TaskGroup::interrupt
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 1
    functionsReached:
    - erase_from_butex_because_of_interruption
    - CHECK
    - get_global_timer_thread
    - LOG
    - TaskControl*::choose_one_group
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - interrupt_and_consume_waiters
    - bthread::TaskGroup::address_meta
    - set_butex_waiter
    - TaskGroup*::ready_to_run
    linkageType: ''
    returnType: int
    signature: int TaskGroup::interrupt(bthread_t tid, TaskControl* c)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_group.cpp:1200,1
    - Dst: TaskGroup*::set_remained
      Src: /src/brpc/src/bthread/task_group.cpp:1201,1
    - Dst: bthread::TaskGroup::sched
      Src: /src/brpc/src/bthread/task_group.cpp:1202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - pg
    argTypes:
    - TaskGroup**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1203
      start: 1198
    functionDepth: 1
    functionLinenumber: 1198
    functionLinenumberEnd: 1203
    functionName: bthread::TaskGroup::yield
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 3
    functionsReached:
    - TaskGroup*::set_remained
    - TaskGroup*::tag
    - bthread::TaskGroup::sched
    linkageType: ''
    returnType: void
    signature: void TaskGroup::yield(TaskGroup** pg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/bthread/task_group.cpp:1207,1
    - Dst: bthread::get_version
      Src: /src/brpc/src/bthread/task_group.cpp:1212,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_group.cpp:1227,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/task_group.cpp:1260,1
    - Dst: bthread::stack_trace
      Src: /src/brpc/src/bthread/task_group.cpp:1269,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 39
    argCount: 3
    argNames:
    - ' os'
    - tid
    - enable_trace
    argTypes:
    - std::ostream
    - bthread_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1277
      start: 1205
    functionDepth: 1
    functionLinenumber: 1205
    functionLinenumberEnd: 1277
    functionName: bthread::print_task
    functionSourceFile: /src/brpc/src/bthread/task_group.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_ns
    - bthread::get_version
    - bthread::TaskGroup::address_meta
    - bthread::stack_trace
    linkageType: ''
    returnType: void
    signature: "void print_task(std::ostream& os, bthread_t tid, bool enable_trace,\n
      \               bool ignore_not_matched = false)"
  - 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: 7
    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: 7
    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:
    - malloc
    - load
    - mmap
    - std::max
    - getpagesize
    - VALGRIND_STACK_REGISTER
    - PLOG_EVERY_SECOND
    - fetch_add
    - LOG_ONCE
    - RunningOnValgrind
    - mprotect
    - munmap
    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:
    - VALGRIND_STACK_DEREGISTER
    - fetch_sub
    - free
    - RunningOnValgrind
    - munmap
    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:
    - malloc
    - load
    - mmap
    - std::max
    - getpagesize
    - VALGRIND_STACK_REGISTER
    - PLOG_EVERY_SECOND
    - fetch_add
    - LOG_ONCE
    - RunningOnValgrind
    - mprotect
    - munmap
    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:
    - VALGRIND_STACK_DEREGISTER
    - fetch_sub
    - free
    - RunningOnValgrind
    - munmap
    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
    - bthread::exists
    - bthread::ListOfABAFreeId<Id, IdTraits>::gc
    - IdBlock::IdBlock
    - arraysize
    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>::for_each
    - bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
    - 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
    - bthread::exists
    - bthread::ListOfABAFreeId<Id, IdTraits>::gc
    - IdBlock::IdBlock
    - arraysize
    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>::for_each
    - bthread::ListOfABAFreeId<Id, IdTraits>::add_to_temp_list
    - 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:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    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:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    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: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:97,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/task_control.cpp:99,1
    - Dst: static_cast<WorkerThreadArgs*>
      Src: /src/brpc/src/bthread/task_control.cpp:102,1
    - Dst: run_tagged_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:106,1
    - Dst: auto::create_group
      Src: /src/brpc/src/bthread/task_control.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:111,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:111,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:115,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:118,1
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:120,1
    - Dst: bthread::TaskControl::bind_thread_to_cpu
      Src: /src/brpc/src/bthread/task_control.cpp:122,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:122,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.cpp:122,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/bthread/task_control.cpp:125,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:126,1
    - Dst: butil::PlatformThread::SetNameSimple
      Src: /src/brpc/src/bthread/task_control.cpp:127,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/bthread/task_control.cpp:127,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:129,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:130,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:130,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_control.cpp:131,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:133,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:133,1
    - Dst: TaskGroup*::run_main_task
      Src: /src/brpc/src/bthread/task_control.cpp:135,1
    - Dst: TaskGroup*::main_stat
      Src: /src/brpc/src/bthread/task_control.cpp:137,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:138,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:139,1
    - Dst: TaskGroup*::current_uptime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:140,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_control.cpp:141,1
    - Dst: TaskGroup*::destroy_self
      Src: /src/brpc/src/bthread/task_control.cpp:142,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:144,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:144,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 146
    functionName: bthread::TaskControl::worker_thread
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::main_stat
    - TaskGroup*::tag
    - static_cast<WorkerThreadArgs*>
    - LOG
    - empty
    - TaskGroup*::destroy_self
    - TaskGroup*::main_tid
    - logging::ComlogInitializer::ComlogInitializer
    - bthread::TaskControl::bind_thread_to_cpu
    - butil::string_printf
    - size
    - run_worker_startfn
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - std::string::c_str
    - run_tagged_worker_startfn
    - fetch_add
    - auto::tag_nworkers
    - butil::PlatformThread::SetNameSimple
    - TaskGroup*::current_uptime_ns
    - pthread_self
    - auto::create_group
    - TaskGroup*::run_main_task
    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:149,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:151,1
    - Dst: TaskGroup*::init
      Src: /src/brpc/src/bthread/task_control.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:155,1
    - Dst: bthread::TaskControl::_add_group
      Src: /src/brpc/src/bthread/task_control.cpp:159,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 164
    functionName: bthread::TaskControl::create_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup::TaskGroup
    - bthread::TaskControl::_add_group
    - TaskGroup*::init
    - LOG
    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:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - os
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 169
    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:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 173
    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: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    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:182,1
    - Dst: auto::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 186
    functionName: bthread::get_cumulated_worker_time_from_this_with_tag
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - auto::get_cumulated_worker_time
    - static_cast<CumulatedWithTagArgs*>
    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:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    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:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 194
    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: 223
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 223
    functionName: bthread::TaskControl::TaskControl
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskControl::TaskControl()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ed_priority_queue
      Src: /src/brpc/src/bthread/task_control.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:234,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 241
    functionName: bthread::TaskControl::init_ed_priority_queues
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - ed_priority_queue
    - LOG
    linkageType: ''
    returnType: int
    signature: int TaskControl::init_ed_priority_queues()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:249,1
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:254,1
    - Dst: bthread::TaskControl::parse_cpuset
      Src: /src/brpc/src/bthread/task_control.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:256,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:263,1
    - Dst: std::to_string
      Src: /src/brpc/src/bthread/task_control.cpp:264,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:265,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:265,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:266,1
    - Dst: CumulatedWithTagArgs::CumulatedWithTagArgs
      Src: /src/brpc/src/bthread/task_control.cpp:267,1
    - Dst: bvar::PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bthread/task_control.cpp:266,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:268,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
      Src: /src/brpc/src/bthread/task_control.cpp:268,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:270,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:270,1
    - Dst: bthread::TaskControl::init_ed_priority_queues
      Src: /src/brpc/src/bthread/task_control.cpp:273,1
    - Dst: get_or_create_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:278,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:279,1
    - Dst: Init
      Src: /src/brpc/src/bthread/task_control.cpp:284,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:285,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:290,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:292,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:293,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:296,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:300,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:301,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:302,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:303,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:309,1
    - Dst: usleep
      Src: /src/brpc/src/bthread/task_control.cpp:310,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:316,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 1
    argNames:
    - concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 243
    functionDepth: 2
    functionLinenumber: 243
    functionLinenumberEnd: 319
    functionName: bthread::TaskControl::init
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - store
    - LOG
    - empty
    - get_or_create_global_timer_thread
    - expose
    - usleep
    - resize
    - pthread_create
    - bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
    - PLOG
    - CumulatedWithTagArgs::CumulatedWithTagArgs
    - WorkerThreadArgs::WorkerThreadArgs
    - std::to_string
    - bthread::TaskControl::init_ed_priority_queues
    - bvar::Adder<int64_t>::Adder<int64_t>
    - bvar::PassiveStatus<double>::PassiveStatus<double>
    - push_back
    - load
    - bthread::TaskControl::parse_cpuset
    - Init
    linkageType: ''
    returnType: int
    signature: int TaskControl::init(int concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:326,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:330,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:334,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:335,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:336,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:340,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/task_control.cpp:341,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:346,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:346,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:347,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - num
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 348
    functionName: bthread::TaskControl::add_workers
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - load
    - pthread_create
    - PLOG
    - fetch_sub
    - fetch_add
    - WorkerThreadArgs::WorkerThreadArgs
    - resize
    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:351,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:352,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:353,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bthread/task_control.cpp:355,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_control.cpp:357,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 359
    functionName: bthread::TaskControl::choose_one_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - butil::fast_rand_less_than
    - tag_ngroup
    - CHECK
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * TaskControl::choose_one_group(bthread_tag_t tag)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:367,1
    - Dst: std::regex_match
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: data
      Src: /src/brpc/src/bthread/task_control.cpp:373,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bthread/task_control.cpp:374,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bthread/task_control.cpp:374,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/bthread/task_control.cpp:375,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/bthread/task_control.cpp:378,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/bthread/task_control.cpp:380,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/bthread/task_control.cpp:381,1
    - Dst: butil::StringSplitter::StringSplitter
      Src: /src/brpc/src/bthread/task_control.cpp:385,1
    - Dst: butil::StringSplitter::StringSplitter
      Src: /src/brpc/src/bthread/task_control.cpp:386,1
    - Dst: std::set::insert
      Src: /src/brpc/src/bthread/task_control.cpp:391,1
    - Dst: assign
      Src: /src/brpc/src/bthread/task_control.cpp:394,1
    - Dst: std::set::begin
      Src: /src/brpc/src/bthread/task_control.cpp:394,1
    - Dst: std::set::end
      Src: /src/brpc/src/bthread/task_control.cpp:394,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - ' value'
    - ' cpus'
    argTypes:
    - std::string
    - std::vector<unsigned>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 396
    functionName: bthread::parse_one_cpuset
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::StringSplitter
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - std::set::insert
    - butil::StringPiece::substr
    - assign
    - std::set::begin
    - empty
    - data
    - std::regex_match
    - std::set::end
    - butil::StringPiece::find
    linkageType: ''
    returnType: int
    signature: int parse_one_cpuset(const std::string& value, std::vector<unsigned>&
      cpus)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:399,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/bthread/task_control.cpp:402,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.cpp:402,1
    - Dst: find
      Src: /src/brpc/src/bthread/task_control.cpp:405,1
    - Dst: find
      Src: /src/brpc/src/bthread/task_control.cpp:406,1
    - Dst: data
      Src: /src/brpc/src/bthread/task_control.cpp:410,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bthread/task_control.cpp:411,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bthread/task_control.cpp:411,1
    - Dst: std::string::find_first_not_of
      Src: /src/brpc/src/bthread/task_control.cpp:413,1
    - Dst: std::string::find_last_not_of
      Src: /src/brpc/src/bthread/task_control.cpp:414,1
    - Dst: std::string::substr
      Src: /src/brpc/src/bthread/task_control.cpp:416,1
    - Dst: std::string::find
      Src: /src/brpc/src/bthread/task_control.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:420,1
    - Dst: std::string::substr
      Src: /src/brpc/src/bthread/task_control.cpp:423,1
    - Dst: std::string::substr
      Src: /src/brpc/src/bthread/task_control.cpp:424,1
    - Dst: butil::StringSplitter::StringSplitter
      Src: /src/brpc/src/bthread/task_control.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:429,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:433,1
    - Dst: parse_one_cpuset
      Src: /src/brpc/src/bthread/task_control.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:440,1
    - Dst: std::move
      Src: /src/brpc/src/bthread/task_control.cpp:444,1
    - Dst: parse_one_cpuset
      Src: /src/brpc/src/bthread/task_control.cpp:449,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:450,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 458
    functionName: bthread::TaskControl::parse_cpuset
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - std::string::substr
    - butil::StringSplitter::length
    - find
    - butil::StringSplitter::field
    - std::string::find
    - butil::StringSplitter::StringSplitter
    - std::string::find_first_not_of
    - static_cast<int>
    - parse_one_cpuset
    - LOG
    - std::move
    - std::string::find_last_not_of
    - empty
    - data
    - size
    linkageType: ''
    returnType: int
    signature: int TaskControl::parse_cpuset(const std::string& value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CPU_ZERO
      Src: /src/brpc/src/bthread/task_control.cpp:463,1
    - Dst: CPU_SET
      Src: /src/brpc/src/bthread/task_control.cpp:464,1
    - Dst: pthread_setaffinity_np
      Src: /src/brpc/src/bthread/task_control.cpp:465,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:467,1
    - Dst: pthread_mach_thread_np
      Src: /src/brpc/src/bthread/task_control.cpp:471,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:473,1
    - Dst: thread_policy_set
      Src: /src/brpc/src/bthread/task_control.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:483,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - pthread
    - cpu_id
    argTypes:
    - pthread_t
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 486
    functionName: bthread::TaskControl::bind_thread_to_cpu
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - pthread_mach_thread_np
    - CPU_SET
    - LOG
    - CPU_ZERO
    - thread_policy_set
    - pthread_setaffinity_np
    linkageType: ''
    returnType: void
    signature: void TaskControl::bind_thread_to_cpu(pthread_t pthread, unsigned cpu_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Trace
      Src: /src/brpc/src/bthread/task_control.cpp:490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 491
    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:494,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 495
    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:503,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/src/bthread/task_control.cpp:503,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:507,1
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:509,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:510,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:510,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:511,1
    - Dst: stop
      Src: /src/brpc/src/bthread/task_control.cpp:515,1
    - Dst: pthread_kill
      Src: /src/brpc/src/bthread/task_control.cpp:522,1
    - Dst: get_trace_signal
      Src: /src/brpc/src/bthread/task_control.cpp:522,1
    - Dst: interrupt_pthread
      Src: /src/brpc/src/bthread/task_control.cpp:524,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/task_control.cpp:529,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 500
    functionDepth: 7
    functionLinenumber: 500
    functionLinenumberEnd: 531
    functionName: bthread::TaskControl::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - begin
    - std::for_each
    - BAIDU_SCOPED_LOCK
    - end
    - pthread_kill
    - store
    - interrupt_pthread
    - pthread_join
    - get_trace_signal
    - stop_and_join_epoll_threads
    - stop
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void TaskControl::stop_and_join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/bthread/task_control.cpp:536,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:537,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:538,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:539,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:540,1
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/task_control.cpp:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 533
    functionDepth: 6
    functionLinenumber: 533
    functionLinenumberEnd: 543
    functionName: TaskControl::~TaskControl()
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - stop_and_join
    - exchange
    - hide
    linkageType: ''
    returnType: void
    signature: void TaskControl::~TaskControl()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_control.cpp:546,1
    - Dst: TaskGroup*::set_tag
      Src: /src/brpc/src/bthread/task_control.cpp:553,1
    - Dst: TaskGroup*::set_pl
      Src: /src/brpc/src/bthread/task_control.cpp:554,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:554,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:554,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:555,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:558,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/task_control.cpp:560,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - g
    - tag
    argTypes:
    - TaskGroup*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 545
    functionDepth: 1
    functionLinenumber: 545
    functionLinenumberEnd: 565
    functionName: bthread::TaskControl::_add_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - TaskGroup*::set_pl
    - load
    - store
    - fmix64
    - __builtin_expect
    - pthread_numeric_id
    - TaskGroup*::set_tag
    - std::unique_lock::unlock
    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: 569
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 569
    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:573,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:577,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:583,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:584,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:585,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:586,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:600,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:614,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_control.cpp:616,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - g
    argTypes:
    - TaskGroup*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 571
    functionDepth: 1
    functionLinenumber: 571
    functionLinenumberEnd: 619
    functionName: bthread::TaskControl::_destroy_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - TaskGroup*::tag
    - BAIDU_SCOPED_LOCK
    - tag_ngroup
    - get_global_timer_thread
    - LOG
    - butil::microseconds_from_now
    linkageType: ''
    returnType: int
    signature: int TaskControl::_destroy_group(TaskGroup* g)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_control.cpp:622,1
    - Dst: ed_priority_queue
      Src: /src/brpc/src/bthread/task_control.cpp:627,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:635,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:643,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_control.cpp:648,1
    - Dst: TaskGroup*::_remote_rq::pop
      Src: /src/brpc/src/bthread/task_control.cpp:652,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 25
    argCount: 3
    argNames:
    - tid
    - seed
    - offset
    argTypes:
    - bthread_t*
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 660
    functionName: bthread::TaskControl::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - tag_ngroup
    - TaskGroup*::_rq::steal
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::_remote_rq::pop
    - ed_priority_queue
    linkageType: ''
    returnType: bool
    signature: bool TaskControl::steal_task(bthread_t* tid, size_t* seed, size_t offset)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tag_pl
      Src: /src/brpc/src/bthread/task_control.cpp:673,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:674,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:674,1
    - Dst: signal
      Src: /src/brpc/src/bthread/task_control.cpp:676,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:683,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:685,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:686,1
    - Dst: bthread::TaskControl::add_workers
      Src: /src/brpc/src/bthread/task_control.cpp:687,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - num_task
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 690
    functionName: bthread::TaskControl::signal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - fmix64
    - pthread_numeric_id
    - tag_pl
    - bthread::TaskControl::add_workers
    - signal
    linkageType: ''
    returnType: void
    signature: void TaskControl::signal_task(int num_task, bthread_tag_t tag)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:694,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:694,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:694,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:695,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:703,1
    - Dst: _rq::volatile_size
      Src: /src/brpc/src/bthread/task_control.cpp:704,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:713,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:715,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:716,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:717,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:722,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:724,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:725,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:726,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:728,1
    - Dst: TaskControl::get_cumulated_switch_count
      Src: /src/brpc/src/bthread/task_control.cpp:733,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:735,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:736,1
    - Dst: TaskControl::get_cumulated_signal_count
      Src: /src/brpc/src/bthread/task_control.cpp:744,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:746,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:747,1
    - Dst: TaskControl::create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.cpp:755,1
    - Dst: lock
      Src: /src/brpc/src/bthread/task_control.cpp:757,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:758,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/bthread/task_control.cpp:760,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:761,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_control.cpp:764,1
    - Dst: bvar::LatencyRecorder*::expose
      Src: /src/brpc/src/bthread/task_control.cpp:766,1
    - Dst: TaskControl::get_living_bthreads
      Src: /src/brpc/src/bthread/task_control.cpp:771,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/bthread/task_control.cpp:773,1
    - Dst: butil::for_each_resource<TaskMeta>
      Src: /src/brpc/src/bthread/task_control.cpp:774,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_control.cpp:780,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:781,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/bthread/task_control.cpp:783,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 58
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 791
      start: 692
    functionDepth: 2
    functionLinenumber: 692
    functionLinenumberEnd: 791
    functionName: bthread::TaskControl::print_rq_sizes
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - TaskControl::get_cumulated_switch_count
    - store
    - bvar::LatencyRecorder*::expose
    - begin
    - std::vector::reserve
    - TaskControl::create_exposed_pending_time
    - unlock
    - bvar::LatencyRecorder::LatencyRecorder
    - TaskControl::get_cumulated_signal_count
    - std::for_each
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - TaskControl::get_cumulated_worker_time
    - tag_ngroup
    - butil::for_each_resource<TaskMeta>
    - TaskControl::get_living_bthreads
    - lock
    - get_version
    - cumulated_cputime_ns
    - load
    - bthread::TaskControl::for_each_task_group
    - end
    - _rq::volatile_size
    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:80,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 82
    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:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 88
    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: 91
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 91
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: run_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:97,1
    - Dst: logging::ComlogInitializer::ComlogInitializer
      Src: /src/brpc/src/bthread/task_control.cpp:99,1
    - Dst: static_cast<WorkerThreadArgs*>
      Src: /src/brpc/src/bthread/task_control.cpp:102,1
    - Dst: run_tagged_worker_startfn
      Src: /src/brpc/src/bthread/task_control.cpp:106,1
    - Dst: auto::create_group
      Src: /src/brpc/src/bthread/task_control.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:111,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:111,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:115,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:118,1
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:120,1
    - Dst: bthread::TaskControl::bind_thread_to_cpu
      Src: /src/brpc/src/bthread/task_control.cpp:122,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:122,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.cpp:122,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/bthread/task_control.cpp:125,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:126,1
    - Dst: butil::PlatformThread::SetNameSimple
      Src: /src/brpc/src/bthread/task_control.cpp:127,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/bthread/task_control.cpp:127,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:129,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:130,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:130,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_control.cpp:131,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:133,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:133,1
    - Dst: TaskGroup*::run_main_task
      Src: /src/brpc/src/bthread/task_control.cpp:135,1
    - Dst: TaskGroup*::main_stat
      Src: /src/brpc/src/bthread/task_control.cpp:137,1
    - Dst: pthread_self
      Src: /src/brpc/src/bthread/task_control.cpp:138,1
    - Dst: TaskGroup*::main_tid
      Src: /src/brpc/src/bthread/task_control.cpp:139,1
    - Dst: TaskGroup*::current_uptime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:140,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_control.cpp:141,1
    - Dst: TaskGroup*::destroy_self
      Src: /src/brpc/src/bthread/task_control.cpp:142,1
    - Dst: auto::tag_nworkers
      Src: /src/brpc/src/bthread/task_control.cpp:144,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:144,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 96
    functionDepth: 2
    functionLinenumber: 96
    functionLinenumberEnd: 146
    functionName: bthread::TaskControl::worker_thread
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup*::main_stat
    - TaskGroup*::tag
    - static_cast<WorkerThreadArgs*>
    - LOG
    - empty
    - TaskGroup*::destroy_self
    - TaskGroup*::main_tid
    - logging::ComlogInitializer::ComlogInitializer
    - bthread::TaskControl::bind_thread_to_cpu
    - butil::string_printf
    - size
    - run_worker_startfn
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - std::string::c_str
    - run_tagged_worker_startfn
    - fetch_add
    - auto::tag_nworkers
    - butil::PlatformThread::SetNameSimple
    - TaskGroup*::current_uptime_ns
    - pthread_self
    - auto::create_group
    - TaskGroup*::run_main_task
    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:149,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:151,1
    - Dst: TaskGroup*::init
      Src: /src/brpc/src/bthread/task_control.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:155,1
    - Dst: bthread::TaskControl::_add_group
      Src: /src/brpc/src/bthread/task_control.cpp:159,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 164
    functionName: bthread::TaskControl::create_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - TaskGroup::TaskGroup
    - bthread::TaskControl::_add_group
    - TaskGroup*::init
    - LOG
    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:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - os
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 169
    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:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 173
    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: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    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:182,1
    - Dst: auto::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 186
    functionName: bthread::get_cumulated_worker_time_from_this_with_tag
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - auto::get_cumulated_worker_time
    - static_cast<CumulatedWithTagArgs*>
    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:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    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:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 194
    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: 223
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 223
    functionName: bthread::TaskControl::TaskControl
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TaskControl::TaskControl()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ed_priority_queue
      Src: /src/brpc/src/bthread/task_control.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:234,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 241
    functionName: bthread::TaskControl::init_ed_priority_queues
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - ed_priority_queue
    - LOG
    linkageType: ''
    returnType: int
    signature: int TaskControl::init_ed_priority_queues()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:249,1
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:254,1
    - Dst: bthread::TaskControl::parse_cpuset
      Src: /src/brpc/src/bthread/task_control.cpp:255,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:256,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:263,1
    - Dst: std::to_string
      Src: /src/brpc/src/bthread/task_control.cpp:264,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:265,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:265,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:266,1
    - Dst: CumulatedWithTagArgs::CumulatedWithTagArgs
      Src: /src/brpc/src/bthread/task_control.cpp:267,1
    - Dst: bvar::PassiveStatus<double>::PassiveStatus<double>
      Src: /src/brpc/src/bthread/task_control.cpp:266,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:268,1
    - Dst: bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
      Src: /src/brpc/src/bthread/task_control.cpp:268,1
    - Dst: push_back
      Src: /src/brpc/src/bthread/task_control.cpp:270,1
    - Dst: bvar::Adder<int64_t>::Adder<int64_t>
      Src: /src/brpc/src/bthread/task_control.cpp:270,1
    - Dst: bthread::TaskControl::init_ed_priority_queues
      Src: /src/brpc/src/bthread/task_control.cpp:273,1
    - Dst: get_or_create_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:278,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:279,1
    - Dst: Init
      Src: /src/brpc/src/bthread/task_control.cpp:284,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:285,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:290,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:292,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:293,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:296,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:300,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:301,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:302,1
    - Dst: expose
      Src: /src/brpc/src/bthread/task_control.cpp:303,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:309,1
    - Dst: usleep
      Src: /src/brpc/src/bthread/task_control.cpp:310,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:316,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 1
    argNames:
    - concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 243
    functionDepth: 2
    functionLinenumber: 243
    functionLinenumberEnd: 319
    functionName: bthread::TaskControl::init
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - store
    - LOG
    - empty
    - get_or_create_global_timer_thread
    - expose
    - usleep
    - resize
    - pthread_create
    - bvar::PerSecond<bvar::PassiveStatus<double>>::PassiveStatus<double>>
    - PLOG
    - CumulatedWithTagArgs::CumulatedWithTagArgs
    - WorkerThreadArgs::WorkerThreadArgs
    - std::to_string
    - bthread::TaskControl::init_ed_priority_queues
    - bvar::Adder<int64_t>::Adder<int64_t>
    - bvar::PassiveStatus<double>::PassiveStatus<double>
    - push_back
    - load
    - bthread::TaskControl::parse_cpuset
    - Init
    linkageType: ''
    returnType: int
    signature: int TaskControl::init(int concurrency)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:326,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:330,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/task_control.cpp:334,1
    - Dst: WorkerThreadArgs::WorkerThreadArgs
      Src: /src/brpc/src/bthread/task_control.cpp:335,1
    - Dst: pthread_create
      Src: /src/brpc/src/bthread/task_control.cpp:336,1
    - Dst: PLOG
      Src: /src/brpc/src/bthread/task_control.cpp:340,1
    - Dst: fetch_sub
      Src: /src/brpc/src/bthread/task_control.cpp:341,1
    - Dst: resize
      Src: /src/brpc/src/bthread/task_control.cpp:346,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:346,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:347,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - num
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 348
      start: 321
    functionDepth: 1
    functionLinenumber: 321
    functionLinenumberEnd: 348
    functionName: bthread::TaskControl::add_workers
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 1
    functionsReached:
    - load
    - pthread_create
    - PLOG
    - fetch_sub
    - fetch_add
    - WorkerThreadArgs::WorkerThreadArgs
    - resize
    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:351,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:352,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:353,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/bthread/task_control.cpp:355,1
    - Dst: CHECK
      Src: /src/brpc/src/bthread/task_control.cpp:357,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 359
      start: 350
    functionDepth: 1
    functionLinenumber: 350
    functionLinenumberEnd: 359
    functionName: bthread::TaskControl::choose_one_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - butil::fast_rand_less_than
    - tag_ngroup
    - CHECK
    linkageType: ''
    returnType: TaskGroup
    signature: TaskGroup * TaskControl::choose_one_group(bthread_tag_t tag)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:367,1
    - Dst: std::regex_match
      Src: /src/brpc/src/bthread/task_control.cpp:370,1
    - Dst: data
      Src: /src/brpc/src/bthread/task_control.cpp:373,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bthread/task_control.cpp:374,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bthread/task_control.cpp:374,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/bthread/task_control.cpp:375,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/bthread/task_control.cpp:378,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/bthread/task_control.cpp:380,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/bthread/task_control.cpp:381,1
    - Dst: butil::StringSplitter::StringSplitter
      Src: /src/brpc/src/bthread/task_control.cpp:385,1
    - Dst: butil::StringSplitter::StringSplitter
      Src: /src/brpc/src/bthread/task_control.cpp:386,1
    - Dst: std::set::insert
      Src: /src/brpc/src/bthread/task_control.cpp:391,1
    - Dst: assign
      Src: /src/brpc/src/bthread/task_control.cpp:394,1
    - Dst: std::set::begin
      Src: /src/brpc/src/bthread/task_control.cpp:394,1
    - Dst: std::set::end
      Src: /src/brpc/src/bthread/task_control.cpp:394,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - ' value'
    - ' cpus'
    argTypes:
    - std::string
    - std::vector<unsigned>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 396
    functionName: bthread::parse_one_cpuset
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::StringSplitter
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - std::set::insert
    - butil::StringPiece::substr
    - assign
    - std::set::begin
    - empty
    - data
    - std::regex_match
    - std::set::end
    - butil::StringPiece::find
    linkageType: ''
    returnType: int
    signature: int parse_one_cpuset(const std::string& value, std::vector<unsigned>&
      cpus)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/bthread/task_control.cpp:399,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/bthread/task_control.cpp:402,1
    - Dst: size
      Src: /src/brpc/src/bthread/task_control.cpp:402,1
    - Dst: find
      Src: /src/brpc/src/bthread/task_control.cpp:405,1
    - Dst: find
      Src: /src/brpc/src/bthread/task_control.cpp:406,1
    - Dst: data
      Src: /src/brpc/src/bthread/task_control.cpp:410,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/bthread/task_control.cpp:411,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/bthread/task_control.cpp:411,1
    - Dst: std::string::find_first_not_of
      Src: /src/brpc/src/bthread/task_control.cpp:413,1
    - Dst: std::string::find_last_not_of
      Src: /src/brpc/src/bthread/task_control.cpp:414,1
    - Dst: std::string::substr
      Src: /src/brpc/src/bthread/task_control.cpp:416,1
    - Dst: std::string::find
      Src: /src/brpc/src/bthread/task_control.cpp:418,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:420,1
    - Dst: std::string::substr
      Src: /src/brpc/src/bthread/task_control.cpp:423,1
    - Dst: std::string::substr
      Src: /src/brpc/src/bthread/task_control.cpp:424,1
    - Dst: butil::StringSplitter::StringSplitter
      Src: /src/brpc/src/bthread/task_control.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:429,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:433,1
    - Dst: parse_one_cpuset
      Src: /src/brpc/src/bthread/task_control.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:440,1
    - Dst: std::move
      Src: /src/brpc/src/bthread/task_control.cpp:444,1
    - Dst: parse_one_cpuset
      Src: /src/brpc/src/bthread/task_control.cpp:449,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:450,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 458
    functionName: bthread::TaskControl::parse_cpuset
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 2
    functionsReached:
    - std::string::substr
    - butil::StringSplitter::length
    - find
    - butil::StringSplitter::field
    - std::string::find
    - butil::StringSplitter::StringSplitter
    - std::string::find_first_not_of
    - static_cast<int>
    - parse_one_cpuset
    - LOG
    - std::move
    - std::string::find_last_not_of
    - empty
    - data
    - size
    linkageType: ''
    returnType: int
    signature: int TaskControl::parse_cpuset(const std::string& value)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CPU_ZERO
      Src: /src/brpc/src/bthread/task_control.cpp:463,1
    - Dst: CPU_SET
      Src: /src/brpc/src/bthread/task_control.cpp:464,1
    - Dst: pthread_setaffinity_np
      Src: /src/brpc/src/bthread/task_control.cpp:465,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:467,1
    - Dst: pthread_mach_thread_np
      Src: /src/brpc/src/bthread/task_control.cpp:471,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:473,1
    - Dst: thread_policy_set
      Src: /src/brpc/src/bthread/task_control.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:483,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - pthread
    - cpu_id
    argTypes:
    - pthread_t
    - unsigned
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 486
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 486
    functionName: bthread::TaskControl::bind_thread_to_cpu
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 2
    functionsReached:
    - pthread_mach_thread_np
    - CPU_SET
    - LOG
    - CPU_ZERO
    - thread_policy_set
    - pthread_setaffinity_np
    linkageType: ''
    returnType: void
    signature: void TaskControl::bind_thread_to_cpu(pthread_t pthread, unsigned cpu_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Trace
      Src: /src/brpc/src/bthread/task_control.cpp:490,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - tid
    argTypes:
    - std::ostream
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 491
    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:494,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 493
    functionDepth: 0
    functionLinenumber: 493
    functionLinenumberEnd: 495
    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:503,1
    - Dst: stop_and_join_epoll_threads
      Src: /src/brpc/src/bthread/task_control.cpp:503,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:507,1
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:509,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:510,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:510,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:511,1
    - Dst: stop
      Src: /src/brpc/src/bthread/task_control.cpp:515,1
    - Dst: pthread_kill
      Src: /src/brpc/src/bthread/task_control.cpp:522,1
    - Dst: get_trace_signal
      Src: /src/brpc/src/bthread/task_control.cpp:522,1
    - Dst: interrupt_pthread
      Src: /src/brpc/src/bthread/task_control.cpp:524,1
    - Dst: pthread_join
      Src: /src/brpc/src/bthread/task_control.cpp:529,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 500
    functionDepth: 7
    functionLinenumber: 500
    functionLinenumberEnd: 531
    functionName: bthread::TaskControl::stop_and_join
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - begin
    - std::for_each
    - BAIDU_SCOPED_LOCK
    - end
    - pthread_kill
    - store
    - interrupt_pthread
    - pthread_join
    - get_trace_signal
    - stop_and_join_epoll_threads
    - stop
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void TaskControl::stop_and_join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/bthread/task_control.cpp:536,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:537,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:538,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:539,1
    - Dst: hide
      Src: /src/brpc/src/bthread/task_control.cpp:540,1
    - Dst: stop_and_join
      Src: /src/brpc/src/bthread/task_control.cpp:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 533
    functionDepth: 6
    functionLinenumber: 533
    functionLinenumberEnd: 543
    functionName: TaskControl::~TaskControl()
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - stop_and_join
    - exchange
    - hide
    linkageType: ''
    returnType: void
    signature: void TaskControl::~TaskControl()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: __builtin_expect
      Src: /src/brpc/src/bthread/task_control.cpp:546,1
    - Dst: TaskGroup*::set_tag
      Src: /src/brpc/src/bthread/task_control.cpp:553,1
    - Dst: TaskGroup*::set_pl
      Src: /src/brpc/src/bthread/task_control.cpp:554,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:554,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:554,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:555,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:558,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/bthread/task_control.cpp:560,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - g
    - tag
    argTypes:
    - TaskGroup*
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 545
    functionDepth: 1
    functionLinenumber: 545
    functionLinenumberEnd: 565
    functionName: bthread::TaskControl::_add_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 2
    functionsReached:
    - TaskGroup*::set_pl
    - load
    - store
    - fmix64
    - __builtin_expect
    - pthread_numeric_id
    - TaskGroup*::set_tag
    - std::unique_lock::unlock
    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: 569
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 569
    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:573,1
    - Dst: LOG
      Src: /src/brpc/src/bthread/task_control.cpp:577,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:583,1
    - Dst: TaskGroup*::tag
      Src: /src/brpc/src/bthread/task_control.cpp:584,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:585,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:586,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:600,1
    - Dst: get_global_timer_thread
      Src: /src/brpc/src/bthread/task_control.cpp:614,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/bthread/task_control.cpp:616,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - g
    argTypes:
    - TaskGroup*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 571
    functionDepth: 1
    functionLinenumber: 571
    functionLinenumberEnd: 619
    functionName: bthread::TaskControl::_destroy_group
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - TaskGroup*::tag
    - BAIDU_SCOPED_LOCK
    - tag_ngroup
    - get_global_timer_thread
    - LOG
    - butil::microseconds_from_now
    linkageType: ''
    returnType: int
    signature: int TaskControl::_destroy_group(TaskGroup* g)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/task_control.cpp:622,1
    - Dst: ed_priority_queue
      Src: /src/brpc/src/bthread/task_control.cpp:627,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:635,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:643,1
    - Dst: TaskGroup*::_rq::steal
      Src: /src/brpc/src/bthread/task_control.cpp:648,1
    - Dst: TaskGroup*::_remote_rq::pop
      Src: /src/brpc/src/bthread/task_control.cpp:652,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 25
    argCount: 3
    argNames:
    - tid
    - seed
    - offset
    argTypes:
    - bthread_t*
    - size_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 660
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 660
    functionName: bthread::TaskControl::steal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - tag_ngroup
    - TaskGroup*::_rq::steal
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - TaskGroup*::_remote_rq::pop
    - ed_priority_queue
    linkageType: ''
    returnType: bool
    signature: bool TaskControl::steal_task(bthread_t* tid, size_t* seed, size_t offset)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: tag_pl
      Src: /src/brpc/src/bthread/task_control.cpp:673,1
    - Dst: fmix64
      Src: /src/brpc/src/bthread/task_control.cpp:674,1
    - Dst: pthread_numeric_id
      Src: /src/brpc/src/bthread/task_control.cpp:674,1
    - Dst: signal
      Src: /src/brpc/src/bthread/task_control.cpp:676,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:683,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:685,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:686,1
    - Dst: bthread::TaskControl::add_workers
      Src: /src/brpc/src/bthread/task_control.cpp:687,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 19
    argCount: 2
    argNames:
    - num_task
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 690
      start: 662
    functionDepth: 2
    functionLinenumber: 662
    functionLinenumberEnd: 690
    functionName: bthread::TaskControl::signal_task
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - fmix64
    - pthread_numeric_id
    - tag_pl
    - bthread::TaskControl::add_workers
    - signal
    linkageType: ''
    returnType: void
    signature: void TaskControl::signal_task(int num_task, bthread_tag_t tag)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::for_each
      Src: /src/brpc/src/bthread/task_control.cpp:694,1
    - Dst: begin
      Src: /src/brpc/src/bthread/task_control.cpp:694,1
    - Dst: end
      Src: /src/brpc/src/bthread/task_control.cpp:694,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:695,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:703,1
    - Dst: _rq::volatile_size
      Src: /src/brpc/src/bthread/task_control.cpp:704,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:713,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:715,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:716,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:717,1
    - Dst: TaskControl::get_cumulated_worker_time
      Src: /src/brpc/src/bthread/task_control.cpp:722,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:724,1
    - Dst: tag_ngroup
      Src: /src/brpc/src/bthread/task_control.cpp:725,1
    - Dst: tag_group
      Src: /src/brpc/src/bthread/task_control.cpp:726,1
    - Dst: cumulated_cputime_ns
      Src: /src/brpc/src/bthread/task_control.cpp:728,1
    - Dst: TaskControl::get_cumulated_switch_count
      Src: /src/brpc/src/bthread/task_control.cpp:733,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:735,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:736,1
    - Dst: TaskControl::get_cumulated_signal_count
      Src: /src/brpc/src/bthread/task_control.cpp:744,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:746,1
    - Dst: bthread::TaskControl::for_each_task_group
      Src: /src/brpc/src/bthread/task_control.cpp:747,1
    - Dst: TaskControl::create_exposed_pending_time
      Src: /src/brpc/src/bthread/task_control.cpp:755,1
    - Dst: lock
      Src: /src/brpc/src/bthread/task_control.cpp:757,1
    - Dst: load
      Src: /src/brpc/src/bthread/task_control.cpp:758,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/bthread/task_control.cpp:760,1
    - Dst: store
      Src: /src/brpc/src/bthread/task_control.cpp:761,1
    - Dst: unlock
      Src: /src/brpc/src/bthread/task_control.cpp:764,1
    - Dst: bvar::LatencyRecorder*::expose
      Src: /src/brpc/src/bthread/task_control.cpp:766,1
    - Dst: TaskControl::get_living_bthreads
      Src: /src/brpc/src/bthread/task_control.cpp:771,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/bthread/task_control.cpp:773,1
    - Dst: butil::for_each_resource<TaskMeta>
      Src: /src/brpc/src/bthread/task_control.cpp:774,1
    - Dst: get_version
      Src: /src/brpc/src/bthread/task_control.cpp:780,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/bthread/task_control.cpp:781,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/bthread/task_control.cpp:783,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 58
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 791
      start: 692
    functionDepth: 2
    functionLinenumber: 692
    functionLinenumberEnd: 791
    functionName: bthread::TaskControl::print_rq_sizes
    functionSourceFile: /src/brpc/src/bthread/task_control.cpp
    functionUses: 0
    functionsReached:
    - tag_group
    - TaskControl::get_cumulated_switch_count
    - store
    - bvar::LatencyRecorder*::expose
    - begin
    - std::vector::reserve
    - TaskControl::create_exposed_pending_time
    - unlock
    - bvar::LatencyRecorder::LatencyRecorder
    - TaskControl::get_cumulated_signal_count
    - std::for_each
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - TaskControl::get_cumulated_worker_time
    - tag_ngroup
    - butil::for_each_resource<TaskMeta>
    - TaskControl::get_living_bthreads
    - lock
    - get_version
    - cumulated_cputime_ns
    - load
    - bthread::TaskControl::for_each_task_group
    - end
    - _rq::volatile_size
    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_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:542,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:546,1
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:550,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:550,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/src/bthread/mutex.cpp:555,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:556,1
    - Dst: BAIDU_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:585,1
    - Dst: TLSPthreadContentionSites
      Src: /src/brpc/src/bthread/mutex.cpp:586,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:595,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:597,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/mutex.cpp:602,1
    - Dst: butil::static_atomic::fetch_add
      Src: /src/brpc/src/bthread/mutex.cpp:607,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:614,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:616,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:628,1
    - Dst: store
      Src: /src/brpc/src/bthread/mutex.cpp:629,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:635,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:637,1
    - Dst: butil::debug::StackTrace::FrameCount
      Src: /src/brpc/src/bthread/mutex.cpp:641,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:649,1
    - Dst: butil::local_pool_free_empty<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:650,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/src/bthread/mutex.cpp:652,1
    - Dst: butil::get_object<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:657,1
    - Dst: butil::debug::StackTrace::CopyAddressTo
      Src: /src/brpc/src/bthread/mutex.cpp:664,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/mutex.cpp:664,1
    - Dst: auto::submit
      Src: /src/brpc/src/bthread/mutex.cpp:665,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:667,1
    - Dst: pthread_mutexattr_gettype
      Src: /src/brpc/src/bthread/mutex.cpp:717,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:726,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:727,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:728,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:734,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:735,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:749,1
    - Dst: MutexOwnerMapEntry*::valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:750,1
    - Dst: valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:755,1
    - Dst: FindMutexOwnerMapEntry
      Src: /src/brpc/src/bthread/mutex.cpp:763,1
    - Dst: MutexOwnerMapEntry*::valid::store
      Src: /src/brpc/src/bthread/mutex.cpp:765,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:809,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:811,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:816,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:818,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:823,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:830,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:832,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:835,1
    - Dst: sys_pthread_mutex_trylock
      Src: /src/brpc/src/bthread/mutex.cpp:842,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:844,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:846,1
    - Dst: SYS_PTHREAD_MUTEX_RESET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:852,1
    - Dst: SubTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:853,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:854,1
    - Dst: pthread_mutex_t*::lock
      Src: /src/brpc/src/bthread/mutex.cpp:861,1
    - Dst: pthread_mutex_t*::timed_lock
      Src: /src/brpc/src/bthread/mutex.cpp:864,1
    - Dst: pthread_mutex_t*::try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:869,1
    - Dst: pthread_mutex_t*::unlock
      Src: /src/brpc/src/bthread/mutex.cpp:873,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:883,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:884,1
    - Dst: pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:887,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:892,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:897,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:906,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:907,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:908,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:912,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:913,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:916,1
    - Dst: pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:917,1
    - Dst: add_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:920,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:925,1
    - Dst: pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:933,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:939,1
    - Dst: pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:943,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:950,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:953,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:955,1
    - Dst: remove_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:966,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:967,1
    - Dst: pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:970,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:973,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:975,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:984,1
    - Dst: internal::pthread_mutex_trylock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:988,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:994,1
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:999,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/bthread/mutex.cpp:1017,1
    - Dst: MutexInternal*::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1053,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:1067,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:1068,1
    - Dst: TaskGroup*::rq_size
      Src: /src/brpc/src/bthread/mutex.cpp:1068,1
    - Dst: cpu_relax
      Src: /src/brpc/src/bthread/mutex.cpp:1070,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1077,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/mutex.cpp:1078,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1105,1
    - Dst: butil::timespec_to_microseconds
      Src: /src/brpc/src/bthread/mutex.cpp:1111,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1114,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/mutex.cpp:1118,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/mutex.cpp:1119,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/mutex.cpp:1123,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1134,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1135,1
    - Dst: try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1140,1
    - Dst: PTHREAD_MUTEX_CHECK_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1144,1
    - Dst: lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1145,1
    - Dst: auto::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1150,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1152,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1153,1
    - Dst: try_lock
      Src: /src/brpc/src/bthread/mutex.cpp:1159,1
    - Dst: lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1162,1
    - Dst: SubTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1166,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1167,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1169,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/mutex.cpp:1172,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1180,1
    - Dst: internal::pthread_mutex_unlock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1184,1
    - Dst: internal::pthread_mutex_lock_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1189,1
    CyclomaticComplexity: 108
    EdgeCount: 108
    ICount: 471
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1193
      start: 53
    functionDepth: 4
    functionLinenumber: 53
    functionLinenumberEnd: 1193
    functionName: namespace
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - butil::MurmurHash3_x86_32
    - SampledContention*::destroy
    - store
    - bvar::is_sampling_range_valid
    - butil::microseconds_to_timespec
    - add_pthread_contention_site
    - empty
    - ContentionProfiler*::init_if_needed
    - pthread_mutexattr_gettype
    - TLSPthreadContentionSites
    - sys_pthread_mutex_trylock
    - dump_and_destroy
    - compare_exchange_strong
    - bthread::butex_wait
    - butil::cpuwide_time_ns
    - BUTIL_STATIC_ATOMIC_INIT
    - size
    - TaskGroup*::rq_size
    - BAIDU_SCOPED_LOCK
    - clear
    - destroy
    - internal::pthread_mutex_trylock_impl
    - butil::IOPortal::append_from_file_descriptor
    - internal::pthread_mutex_lock_impl
    - hash_mutex_ptr
    - pthread_mutex_unlock_internal
    - AddTlsPthreadLockCount
    - BAIDU_CASSERT
    - ContentionProfiler::ContentionProfiler
    - sys_pthread_mutex_timedlock
    - butil::FilePath::DirName
    - begin
    - sys_pthread_mutex_init
    - butil::return_object
    - MutexOwnerMapEntry*::valid::load
    - butil::debug::StackTrace::StackTrace
    - SubTlsPthreadLockCount
    - butil::debug::StackTrace::FindSymbol
    - BAIDU_LIKELY
    - butil::IOBufBuilder::buf
    - open
    - butil::static_atomic::fetch_add
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - cpu_relax
    - pthread_mutex_t*::timed_lock
    - butil::debug::StackTrace::FrameCount
    - BAIDU_UNLIKELY
    - lock_contended
    - sys_pthread_mutex_destroy
    - sys_pthread_mutex_unlock
    - is_contention_site_valid
    - butil::IOPortal::IOPortal
    - MutexInternal*::locked::exchange
    - butil::gettimeofday_us
    - _dl_sym
    - butil::local_pool_free_empty<SampledContention>
    - flush_to_disk
    - auto::exchange
    - PTHREAD_MUTEX_SET_OWNER
    - cut_into_file_descriptor
    - butil::CreateDirectoryAndGetError
    - pthread_mutex_lock_internal
    - butil::timespec_to_microseconds
    - make_contention_site_invalid
    - submit_contention
    - std::unique_lock::unlock
    - pthread_mutex_t*::lock
    - sys_pthread_mutex_lock
    - pthread_once
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - dlsym
    - butil::get_object<SampledContention>
    - butil::static_atomic::load
    - fmix64
    - futex_wait_private
    - valid::load
    - remove_pthread_contention_site
    - butil::debug::StackTrace::CopyAddressTo
    - arraysize
    - end
    - pthread_mutex_t*::try_lock
    - internal::pthread_mutex_unlock_impl
    - bvar::is_collectable
    - seek
    - hash_code
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    - insert
    - auto::locked::exchange
    - init
    - std::unique_ptr::release
    - LOG
    - FindMutexOwnerMapEntry
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - LOG_BACKTRACE_ONCE
    - futex_wake_private
    - auto::submit
    - butil::FilePath::value
    - PLOG
    - BAIDU_VOLATILE_THREAD_LOCAL
    - append
    - c_str
    - pthread_mutex_t*::unlock
    - init_if_needed
    - MutexOwnerMapEntry*::valid::store
    - try_lock
    - PTHREAD_MUTEX_CHECK_OWNER
    - butil::IOBufBuilder::IOBufBuilder
    - memcmp
    - SYS_PTHREAD_MUTEX_RESET_OWNER
    - load
    - ceil
    - valid::exchange
    - pthread_mutex_trylock_internal
    - MUTEX_RESET_OWNER_COMMON
    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:
    - SampledContention*::hash_code
    - memcmp
    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:
    - init
    - append
    - 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:
    - insert
    - SampledContention*::destroy
    - ContentionProfiler::init_if_needed
    - seek
    - ContentionProfiler::flush_to_disk
    - size
    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:
    - butil::IOPortal::IOPortal
    - SampledContention*::destroy
    - LOG
    - empty
    - cut_into_file_descriptor
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    - begin
    - butil::FilePath::value
    - PLOG
    - append
    - butil::IOBufBuilder::buf
    - open
    - c_str
    - size
    - clear
    - butil::IOBufBuilder::IOBufBuilder
    - end
    - ceil
    - butil::IOPortal::append_from_file_descriptor
    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::dump_and_destroy
    - SampledContention::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
    - BAIDU_SCOPED_LOCK
    - LOG
    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:
    - LOG
    - std::unique_lock::unlock
    - ContentionProfiler*::init_if_needed
    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: 1
    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: 1
    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:
    - _dl_sym
    - dlsym
    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:
    - sys_pthread_mutex_init
    - pthread_once
    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:
    - sys_pthread_mutex_destroy
    - pthread_once
    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:
    - sys_pthread_mutex_lock
    - pthread_once
    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:
    - sys_pthread_mutex_trylock
    - pthread_once
    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:
    - sys_pthread_mutex_timedlock
    - pthread_once
    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: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:542,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - AddTlsPthreadLockCount
    argTypes:
    - void
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 543
    functionName: BAIDU_VOLATILE_THREAD_LOCAL
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: void
    signature: 'void BAIDU_VOLATILE_THREAD_LOCAL(int, tls_pthread_lock_count, 0);


      inline void AddTlsPthreadLockCount()'
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:546,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 545
    functionDepth: 1
    functionLinenumber: 545
    functionLinenumberEnd: 547
    functionName: SubTlsPthreadLockCount
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    linkageType: ''
    returnType: void
    signature: void SubTlsPthreadLockCount()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_LIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:550,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:550,1
    - Dst: LOG_BACKTRACE_ONCE
      Src: /src/brpc/src/bthread/mutex.cpp:555,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:556,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 549
    functionDepth: 1
    functionLinenumber: 549
    functionLinenumberEnd: 558
    functionName: CheckBthreadScheSafety
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_LIKELY
    - LOG_BACKTRACE_ONCE
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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: 560
      start: 560
    functionDepth: 0
    functionLinenumber: 560
    functionLinenumberEnd: 560
    functionName: AddTlsPthreadLockCount
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AddTlsPthreadLockCount()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    functionName: SubTlsPthreadLockCount
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SubTlsPthreadLockCount()
  - 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: 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:595,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:597,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/bthread/mutex.cpp:602,1
    - Dst: fetch_add
      Src: /src/brpc/src/bthread/mutex.cpp:607,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 593
    functionDepth: 2
    functionLinenumber: 593
    functionLinenumberEnd: 609
    functionName: add_pthread_contention_site
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - hash_mutex_ptr
    - fetch_add
    - load
    - 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:614,1
    - Dst: load
      Src: /src/brpc/src/bthread/mutex.cpp:616,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:628,1
    - Dst: store
      Src: /src/brpc/src/bthread/mutex.cpp:629,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - mutex
    - saved_csite
    argTypes:
    - Mutex*
    - bthread_contention_site_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 612
    functionDepth: 2
    functionLinenumber: 612
    functionLinenumberEnd: 631
    functionName: remove_pthread_contention_site
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - hash_mutex_ptr
    - make_contention_site_invalid
    - load
    - store
    linkageType: ''
    returnType: bool
    signature: "bool remove_pthread_contention_site(const Mutex* mutex,\n                                           bthread_contention_site_t*
      saved_csite)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:635,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:637,1
    - Dst: butil::debug::StackTrace::FrameCount
      Src: /src/brpc/src/bthread/mutex.cpp:641,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:649,1
    - Dst: butil::local_pool_free_empty<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:650,1
    - Dst: butil::debug::StackTrace::FindSymbol
      Src: /src/brpc/src/bthread/mutex.cpp:652,1
    - Dst: butil::get_object<SampledContention>
      Src: /src/brpc/src/bthread/mutex.cpp:657,1
    - Dst: butil::debug::StackTrace::CopyAddressTo
      Src: /src/brpc/src/bthread/mutex.cpp:664,1
    - Dst: arraysize
      Src: /src/brpc/src/bthread/mutex.cpp:664,1
    - Dst: auto::submit
      Src: /src/brpc/src/bthread/mutex.cpp:665,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:667,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: 668
      start: 634
    functionDepth: 1
    functionLinenumber: 634
    functionLinenumberEnd: 668
    functionName: submit_contention
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 7
    functionsReached:
    - auto::submit
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - butil::get_object<SampledContention>
    - butil::local_pool_free_empty<SampledContention>
    - butil::debug::StackTrace::FindSymbol
    - butil::debug::StackTrace::FrameCount
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - butil::debug::StackTrace::CopyAddressTo
    - arraysize
    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: 674
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 674
    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: 679
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 679
    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: 690
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 690
    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: 692
      start: 691
    functionDepth: 0
    functionLinenumber: 691
    functionLinenumberEnd: 692
    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: 693
      start: 692
    functionDepth: 0
    functionLinenumber: 692
    functionLinenumberEnd: 693
    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: 694
      start: 693
    functionDepth: 0
    functionLinenumber: 693
    functionLinenumberEnd: 694
    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: 705
      start: 701
    functionDepth: 0
    functionLinenumber: 701
    functionLinenumberEnd: 705
    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:717,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:726,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:727,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:728,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:734,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:735,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 713
    functionDepth: 2
    functionLinenumber: 713
    functionLinenumberEnd: 739
    functionName: internal::InitMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutexattr_gettype
    - hash_mutex_ptr
    - MUTEX_RESET_OWNER_COMMON
    - valid::exchange
    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:749,1
    - Dst: MutexOwnerMapEntry*::valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:750,1
    - Dst: valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:755,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 741
    functionDepth: 2
    functionLinenumber: 741
    functionLinenumberEnd: 760
    functionName: MutexOwnerMapEntry* FindMutexOwnerMapEntry(pthread_mutex_t* mutex)
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - hash_mutex_ptr
    - MutexOwnerMapEntry*::valid::load
    - 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:763,1
    - Dst: MutexOwnerMapEntry*::valid::store
      Src: /src/brpc/src/bthread/mutex.cpp:765,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 767
    functionName: internal::DestroyMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FindMutexOwnerMapEntry
    - MutexOwnerMapEntry*::valid::store
    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: 771
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 771
    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: 774
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 774
    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: 777
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 777
    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: 788
    functionDepth: 0
    functionLinenumber: 788
    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: 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: 796
      start: 795
    functionDepth: 0
    functionLinenumber: 795
    functionLinenumberEnd: 796
    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: 797
      start: 796
    functionDepth: 0
    functionLinenumber: 796
    functionLinenumberEnd: 797
    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: 798
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 798
    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: 801
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 801
    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:809,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:811,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:816,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:818,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:823,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 805
    functionDepth: 1
    functionLinenumber: 805
    functionLinenumberEnd: 826
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - sys_pthread_mutex_timedlock
    - AddTlsPthreadLockCount
    - 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* abstime)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:830,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:832,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:835,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 838
      start: 828
    functionDepth: 1
    functionLinenumber: 828
    functionLinenumberEnd: 838
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - AddTlsPthreadLockCount
    - 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:842,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:844,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:846,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 841
    functionDepth: 1
    functionLinenumber: 841
    functionLinenumberEnd: 849
    functionName: internal::pthread_mutex_trylock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - AddTlsPthreadLockCount
    - sys_pthread_mutex_trylock
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    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:852,1
    - Dst: SubTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:853,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:854,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 855
      start: 851
    functionDepth: 2
    functionLinenumber: 851
    functionLinenumberEnd: 855
    functionName: internal::pthread_mutex_unlock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - SYS_PTHREAD_MUTEX_RESET_OWNER
    - SubTlsPthreadLockCount
    - sys_pthread_mutex_unlock
    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:861,1
    - Dst: FastPthreadMutex*::timed_lock
      Src: /src/brpc/src/bthread/mutex.cpp:864,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - FastPthreadMutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 866
      start: 858
    functionDepth: 0
    functionLinenumber: 858
    functionLinenumberEnd: 866
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FastPthreadMutex*::timed_lock
    - FastPthreadMutex*::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:869,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 870
      start: 868
    functionDepth: 0
    functionLinenumber: 868
    functionLinenumberEnd: 870
    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:873,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 875
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 875
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:883,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:884,1
    - Dst: internal::pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:887,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:892,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:897,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:906,1
    - Dst: make_contention_site_invalid
      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: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:912,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:913,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:916,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:917,1
    - Dst: add_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:920,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:925,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 34
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - Mutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 878
    functionDepth: 3
    functionLinenumber: 878
    functionLinenumberEnd: 929
    functionName: internal::pthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - internal::pthread_mutex_lock_internal
    - bvar::is_collectable
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - bvar::is_sampling_range_valid
    - make_contention_site_invalid
    - butil::cpuwide_time_ns
    - internal::pthread_mutex_trylock_internal
    - add_pthread_contention_site
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:933,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 934
      start: 932
    functionDepth: 2
    functionLinenumber: 932
    functionLinenumberEnd: 934
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:939,1
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:943,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:950,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:953,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:955,1
    - Dst: remove_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:966,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:967,1
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:970,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:973,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:975,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 937
    functionDepth: 3
    functionLinenumber: 937
    functionLinenumberEnd: 978
    functionName: internal::pthread_mutex_unlock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - butil::cpuwide_time_ns
    - submit_contention
    - remove_pthread_contention_site
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - internal::pthread_mutex_unlock_internal
    - is_contention_site_valid
    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: 705
      start: 701
    functionDepth: 0
    functionLinenumber: 701
    functionLinenumberEnd: 705
    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:717,1
    - Dst: hash_mutex_ptr
      Src: /src/brpc/src/bthread/mutex.cpp:726,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:727,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:728,1
    - Dst: valid::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:734,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:735,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 739
      start: 713
    functionDepth: 2
    functionLinenumber: 713
    functionLinenumberEnd: 739
    functionName: internal::InitMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - pthread_mutexattr_gettype
    - hash_mutex_ptr
    - MUTEX_RESET_OWNER_COMMON
    - valid::exchange
    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:749,1
    - Dst: MutexOwnerMapEntry*::valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:750,1
    - Dst: valid::load
      Src: /src/brpc/src/bthread/mutex.cpp:755,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 741
    functionDepth: 2
    functionLinenumber: 741
    functionLinenumberEnd: 760
    functionName: MutexOwnerMapEntry* FindMutexOwnerMapEntry(pthread_mutex_t* mutex)
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - hash_mutex_ptr
    - MutexOwnerMapEntry*::valid::load
    - 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:763,1
    - Dst: MutexOwnerMapEntry*::valid::store
      Src: /src/brpc/src/bthread/mutex.cpp:765,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 762
    functionDepth: 0
    functionLinenumber: 762
    functionLinenumberEnd: 767
    functionName: internal::DestroyMutexOwnerMapEntry
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - FindMutexOwnerMapEntry
    - MutexOwnerMapEntry*::valid::store
    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: 771
      start: 769
    functionDepth: 0
    functionLinenumber: 769
    functionLinenumberEnd: 771
    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: 774
      start: 772
    functionDepth: 0
    functionLinenumber: 772
    functionLinenumberEnd: 774
    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: 777
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 777
    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: 788
    functionDepth: 0
    functionLinenumber: 788
    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: 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: 796
      start: 795
    functionDepth: 0
    functionLinenumber: 795
    functionLinenumberEnd: 796
    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: 797
      start: 796
    functionDepth: 0
    functionLinenumber: 796
    functionLinenumberEnd: 797
    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: 798
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 798
    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: 801
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 801
    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:809,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:811,1
    - Dst: sys_pthread_mutex_timedlock
      Src: /src/brpc/src/bthread/mutex.cpp:816,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:818,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:823,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 805
    functionDepth: 1
    functionLinenumber: 805
    functionLinenumberEnd: 826
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - sys_pthread_mutex_timedlock
    - AddTlsPthreadLockCount
    - 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* abstime)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:830,1
    - Dst: sys_pthread_mutex_lock
      Src: /src/brpc/src/bthread/mutex.cpp:832,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:835,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 838
      start: 828
    functionDepth: 1
    functionLinenumber: 828
    functionLinenumberEnd: 838
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - AddTlsPthreadLockCount
    - 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:842,1
    - Dst: FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
      Src: /src/brpc/src/bthread/mutex.cpp:844,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:846,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 849
      start: 841
    functionDepth: 1
    functionLinenumber: 841
    functionLinenumberEnd: 849
    functionName: internal::pthread_mutex_trylock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - AddTlsPthreadLockCount
    - sys_pthread_mutex_trylock
    - FIND_SYS_PTHREAD_MUTEX_OWNER_MAP_ENTRY
    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:852,1
    - Dst: SubTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:853,1
    - Dst: sys_pthread_mutex_unlock
      Src: /src/brpc/src/bthread/mutex.cpp:854,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 855
      start: 851
    functionDepth: 2
    functionLinenumber: 851
    functionLinenumberEnd: 855
    functionName: internal::pthread_mutex_unlock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - SYS_PTHREAD_MUTEX_RESET_OWNER
    - SubTlsPthreadLockCount
    - sys_pthread_mutex_unlock
    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:861,1
    - Dst: FastPthreadMutex*::timed_lock
      Src: /src/brpc/src/bthread/mutex.cpp:864,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - FastPthreadMutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 866
      start: 858
    functionDepth: 0
    functionLinenumber: 858
    functionLinenumberEnd: 866
    functionName: internal::pthread_mutex_lock_internal
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - FastPthreadMutex*::timed_lock
    - FastPthreadMutex*::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:869,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 870
      start: 868
    functionDepth: 0
    functionLinenumber: 868
    functionLinenumberEnd: 870
    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:873,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - FastPthreadMutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 875
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 875
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:883,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:884,1
    - Dst: internal::pthread_mutex_trylock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:887,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:892,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:897,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:906,1
    - Dst: make_contention_site_invalid
      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: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:912,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:913,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:916,1
    - Dst: internal::pthread_mutex_lock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:917,1
    - Dst: add_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:920,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:925,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 34
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - Mutex*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 878
    functionDepth: 3
    functionLinenumber: 878
    functionLinenumberEnd: 929
    functionName: internal::pthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - internal::pthread_mutex_lock_internal
    - bvar::is_collectable
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - bvar::is_sampling_range_valid
    - make_contention_site_invalid
    - butil::cpuwide_time_ns
    - internal::pthread_mutex_trylock_internal
    - add_pthread_contention_site
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    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:933,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 934
      start: 932
    functionDepth: 2
    functionLinenumber: 932
    functionLinenumberEnd: 934
    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: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:939,1
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:943,1
    - Dst: BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/bthread/mutex.cpp:950,1
    - Dst: is_contention_site_valid
      Src: /src/brpc/src/bthread/mutex.cpp:953,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:955,1
    - Dst: remove_pthread_contention_site
      Src: /src/brpc/src/bthread/mutex.cpp:966,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:967,1
    - Dst: internal::pthread_mutex_unlock_internal
      Src: /src/brpc/src/bthread/mutex.cpp:970,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:973,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:975,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - Mutex*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 937
    functionDepth: 3
    functionLinenumber: 937
    functionLinenumberEnd: 978
    functionName: internal::pthread_mutex_unlock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_PTR_VOLATILE_THREAD_LOCAL
    - butil::cpuwide_time_ns
    - submit_contention
    - remove_pthread_contention_site
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - internal::pthread_mutex_unlock_internal
    - is_contention_site_valid
    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:984,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 985
      start: 983
    functionDepth: 4
    functionLinenumber: 983
    functionLinenumberEnd: 985
    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:988,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 989
      start: 987
    functionDepth: 3
    functionLinenumber: 987
    functionLinenumberEnd: 989
    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:994,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - mutex
    - abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 995
      start: 992
    functionDepth: 4
    functionLinenumber: 992
    functionLinenumberEnd: 995
    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:999,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 998
    functionDepth: 4
    functionLinenumber: 998
    functionLinenumberEnd: 1000
    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:1053,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1051
    functionDepth: 0
    functionLinenumber: 1051
    functionLinenumberEnd: 1058
    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:1067,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/bthread/mutex.cpp:1068,1
    - Dst: TaskGroup*::rq_size
      Src: /src/brpc/src/bthread/mutex.cpp:1068,1
    - Dst: cpu_relax
      Src: /src/brpc/src/bthread/mutex.cpp:1070,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1077,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/bthread/mutex.cpp:1078,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 20
    argCount: 2
    argNames:
    - m
    - abstime
    argTypes:
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1099
      start: 1062
    functionDepth: 4
    functionLinenumber: 1062
    functionLinenumberEnd: 1099
    functionName: mutex_lock_contended_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - cpu_relax
    - bthread::butex_wait
    - auto::exchange
    - 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:1105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1106
      start: 1104
    functionDepth: 1
    functionLinenumber: 1104
    functionLinenumberEnd: 1106
    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:1111,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1114,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/mutex.cpp:1118,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/mutex.cpp:1119,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/mutex.cpp:1123,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1134,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1137
      start: 1108
    functionDepth: 1
    functionLinenumber: 1108
    functionLinenumberEnd: 1137
    functionName: internal::FastPthreadMutex::lock_contended
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - AddTlsPthreadLockCount
    - butil::gettimeofday_us
    - butil::timespec_to_microseconds
    - auto::exchange
    - PTHREAD_MUTEX_SET_OWNER
    - butil::microseconds_to_timespec
    - futex_wait_private
    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:1140,1
    - Dst: PTHREAD_MUTEX_CHECK_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1144,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1146
      start: 1139
    functionDepth: 2
    functionLinenumber: 1139
    functionLinenumberEnd: 1146
    functionName: internal::FastPthreadMutex::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::try_lock
    - PTHREAD_MUTEX_CHECK_OWNER
    - internal::FastPthreadMutex::lock_contended
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: auto::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1150,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1152,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1156
      start: 1148
    functionDepth: 1
    functionLinenumber: 1148
    functionLinenumberEnd: 1156
    functionName: internal::FastPthreadMutex::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 1
    functionsReached:
    - AddTlsPthreadLockCount
    - 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:1159,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1163
      start: 1158
    functionDepth: 2
    functionLinenumber: 1158
    functionLinenumberEnd: 1163
    functionName: internal::FastPthreadMutex::timed_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::try_lock
    - internal::FastPthreadMutex::lock_contended
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::timed_lock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SubTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1166,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1167,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1169,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/mutex.cpp:1172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1174
      start: 1165
    functionDepth: 2
    functionLinenumber: 1165
    functionLinenumberEnd: 1174
    functionName: internal::FastPthreadMutex::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - SubTlsPthreadLockCount
    - 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:1105,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1106
      start: 1104
    functionDepth: 1
    functionLinenumber: 1104
    functionLinenumberEnd: 1106
    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:1111,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1114,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/bthread/mutex.cpp:1118,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/bthread/mutex.cpp:1119,1
    - Dst: futex_wait_private
      Src: /src/brpc/src/bthread/mutex.cpp:1123,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1134,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1135,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1137
      start: 1108
    functionDepth: 1
    functionLinenumber: 1108
    functionLinenumberEnd: 1137
    functionName: internal::FastPthreadMutex::lock_contended
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    functionsReached:
    - AddTlsPthreadLockCount
    - butil::gettimeofday_us
    - butil::timespec_to_microseconds
    - auto::exchange
    - PTHREAD_MUTEX_SET_OWNER
    - butil::microseconds_to_timespec
    - futex_wait_private
    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:1140,1
    - Dst: PTHREAD_MUTEX_CHECK_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1144,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1145,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1146
      start: 1139
    functionDepth: 2
    functionLinenumber: 1139
    functionLinenumberEnd: 1146
    functionName: internal::FastPthreadMutex::lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::try_lock
    - PTHREAD_MUTEX_CHECK_OWNER
    - internal::FastPthreadMutex::lock_contended
    linkageType: ''
    returnType: void
    signature: void FastPthreadMutex::lock()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: auto::locked::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1150,1
    - Dst: PTHREAD_MUTEX_SET_OWNER
      Src: /src/brpc/src/bthread/mutex.cpp:1152,1
    - Dst: AddTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1156
      start: 1148
    functionDepth: 1
    functionLinenumber: 1148
    functionLinenumberEnd: 1156
    functionName: internal::FastPthreadMutex::try_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 3
    functionsReached:
    - AddTlsPthreadLockCount
    - 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:1159,1
    - Dst: internal::FastPthreadMutex::lock_contended
      Src: /src/brpc/src/bthread/mutex.cpp:1162,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1163
      start: 1158
    functionDepth: 2
    functionLinenumber: 1158
    functionLinenumberEnd: 1163
    functionName: internal::FastPthreadMutex::timed_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - internal::FastPthreadMutex::try_lock
    - internal::FastPthreadMutex::lock_contended
    linkageType: ''
    returnType: bool
    signature: bool FastPthreadMutex::timed_lock(const struct timespec* abstime)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SubTlsPthreadLockCount
      Src: /src/brpc/src/bthread/mutex.cpp:1166,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1167,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1169,1
    - Dst: futex_wake_private
      Src: /src/brpc/src/bthread/mutex.cpp:1172,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1174
      start: 1165
    functionDepth: 2
    functionLinenumber: 1165
    functionLinenumberEnd: 1174
    functionName: internal::FastPthreadMutex::unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - SubTlsPthreadLockCount
    - 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:1180,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1181
      start: 1179
    functionDepth: 4
    functionLinenumber: 1179
    functionLinenumberEnd: 1181
    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:1184,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1185
      start: 1183
    functionDepth: 4
    functionLinenumber: 1183
    functionLinenumberEnd: 1185
    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:1189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - abstime
    argTypes:
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1188
    functionDepth: 4
    functionLinenumber: 1188
    functionLinenumberEnd: 1190
    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:1199,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1200,1
    - Dst: bthread::butex_create_checked<unsigned>
      Src: /src/brpc/src/bthread/mutex.cpp:1201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - m
    - attr
    argTypes:
    - bthread_mutex_t*
    - bthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1195
    functionDepth: 1
    functionLinenumber: 1195
    functionLinenumberEnd: 1208
    functionName: bthread_mutex_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 18
    functionsReached:
    - make_contention_site_invalid
    - bthread::butex_create_checked<unsigned>
    - MUTEX_RESET_OWNER_COMMON
    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:1211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1213
      start: 1210
    functionDepth: 2
    functionLinenumber: 1210
    functionLinenumberEnd: 1213
    functionName: bthread_mutex_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 18
    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:1216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1215
    functionDepth: 3
    functionLinenumber: 1215
    functionLinenumberEnd: 1217
    functionName: bthread_mutex_trylock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 8
    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:1220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1221
      start: 1219
    functionDepth: 5
    functionLinenumber: 1219
    functionLinenumberEnd: 1221
    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:1225,1
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1230,1
    - Dst: bvar::is_collectable
      Src: /src/brpc/src/bthread/mutex.cpp:1234,1
    - Dst: bvar::is_sampling_range_valid
      Src: /src/brpc/src/bthread/mutex.cpp:1235,1
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1236,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1239,1
    - Dst: mutex_lock_contended_impl
      Src: /src/brpc/src/bthread/mutex.cpp:1242,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1244,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1248,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:1250,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - m
    - abstime
    argTypes:
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1253
      start: 1223
    functionDepth: 5
    functionLinenumber: 1223
    functionLinenumberEnd: 1253
    functionName: bthread_mutex_lock_impl
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 0
    functionsReached:
    - mutex_lock_contended_impl
    - butil::cpuwide_time_ns
    - bvar::is_sampling_range_valid
    - submit_contention
    - bvar::is_collectable
    - internal::pthread_mutex_trylock_impl
    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:1256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1257
      start: 1255
    functionDepth: 6
    functionLinenumber: 1255
    functionLinenumberEnd: 1257
    functionName: bthread_mutex_lock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 22
    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:1261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - m
    - abstime
    argTypes:
    - bthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1262
      start: 1259
    functionDepth: 6
    functionLinenumber: 1259
    functionLinenumberEnd: 1262
    functionName: bthread_mutex_timedlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 6
    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:1267,1
    - Dst: make_contention_site_invalid
      Src: /src/brpc/src/bthread/mutex.cpp:1270,1
    - Dst: MUTEX_RESET_OWNER_COMMON
      Src: /src/brpc/src/bthread/mutex.cpp:1272,1
    - Dst: auto::exchange
      Src: /src/brpc/src/bthread/mutex.cpp:1273,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/mutex.cpp:1280,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1283,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/bthread/mutex.cpp:1284,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/bthread/mutex.cpp:1285,1
    - Dst: submit_contention
      Src: /src/brpc/src/bthread/mutex.cpp:1287,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - m
    argTypes:
    - bthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1264
    functionDepth: 4
    functionLinenumber: 1264
    functionLinenumberEnd: 1289
    functionName: bthread_mutex_unlock
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 29
    functionsReached:
    - make_contention_site_invalid
    - butil::cpuwide_time_ns
    - submit_contention
    - bthread::butex_wake
    - auto::exchange
    - is_contention_site_valid
    - 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: 1294
      start: 1291
    functionDepth: 0
    functionLinenumber: 1291
    functionLinenumberEnd: 1294
    functionName: bthread_mutexattr_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    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: 1299
      start: 1296
    functionDepth: 0
    functionLinenumber: 1296
    functionLinenumberEnd: 1299
    functionName: bthread_mutexattr_disable_csite
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    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: 1304
      start: 1301
    functionDepth: 0
    functionLinenumber: 1301
    functionLinenumberEnd: 1304
    functionName: bthread_mutexattr_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 2
    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:1310,1
    - Dst: first_sys_pthread_mutex_init
      Src: /src/brpc/src/bthread/mutex.cpp:1311,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - mutex
    - mutexattr
    argTypes:
    - pthread_mutex_t*
    - pthread_mutexattr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1312
      start: 1308
    functionDepth: 1
    functionLinenumber: 1308
    functionLinenumberEnd: 1312
    functionName: pthread_mutex_init
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 32
    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:1315,1
    - Dst: first_sys_pthread_mutex_destroy
      Src: /src/brpc/src/bthread/mutex.cpp:1316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1317
      start: 1314
    functionDepth: 1
    functionLinenumber: 1314
    functionLinenumberEnd: 1317
    functionName: pthread_mutex_destroy
    functionSourceFile: /src/brpc/src/bthread/mutex.cpp
    functionUses: 24
    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:1320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1321
      start: 1319
    functionDepth: 4
    functionLinenumber: 1319
    functionLinenumberEnd: 1321
    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:1326,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - __mutex
    - __abstime
    argTypes:
    - pthread_mutex_t*
    - struct timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1327
      start: 1324
    functionDepth: 5
    functionLinenumber: 1324
    functionLinenumberEnd: 1327
    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:1331,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1332
      start: 1330
    functionDepth: 3
    functionLinenumber: 1330
    functionLinenumberEnd: 1332
    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:1335,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - mutex
    argTypes:
    - pthread_mutex_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1336
      start: 1334
    functionDepth: 4
    functionLinenumber: 1334
    functionLinenumberEnd: 1336
    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:
    - BAIDU_SCOPED_LOCK
    - CHECK
    - std::unique_lock::unlock
    - CHECK_NE
    - 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
    - std::unique_lock::unlock
    - CHECK_NE
    - 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:
    - bthread::ExecutionQueueBase
    - _cond
    - dereference
    - store
    - _head
    - _pthread_started
    - DISALLOW_COPY_AND_ASSIGN
    - _high_priority_tasks
    - _current_head
    - _versioned_ref
    - 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:
    - BAIDU_SCOPED_LOCK
    - CHECK
    - std::unique_lock::unlock
    - CHECK_NE
    - 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
    - std::unique_lock::unlock
    - CHECK_NE
    - 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:
    - bthread::ExecutionQueueBase
    - _cond
    - dereference
    - store
    - _head
    - _pthread_started
    - DISALLOW_COPY_AND_ASSIGN
    - _high_priority_tasks
    - _current_head
    - _versioned_ref
    - 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
    - T*::~T
    - debug_block_deallocate
    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:
    - static_cast<iterator&>
    - f
    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:
    - scoped_ptr_t::Pass
    - bthread::ExecutionQueueBase::address
    - Base::scoped_ptr_t::release
    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:
    - std::forward<T>
    - ExecutionQueue::execute
    - const_cast<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:
    - std::forward<T>
    - ExecutionQueue::execute
    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:
    - std::forward<T>
    - start_execute
    - allocate_node
    - return_task_node
    - T::T
    - debug_block_allocate
    - TaskOptions::TaskOptions
    - BAIDU_UNLIKELY
    - 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:
    - bthread::ExecutionQueueBase::address
    - typename ExecutionQueue<T>::scoped_ptr_t::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,\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:
    - std::forward<T>
    - execution_queue_execute
    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:
    - std::forward<T>
    - execution_queue_execute
    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:
    - std::forward<T>
    - bthread::ExecutionQueueBase::address
    - typename ExecutionQueue<T>::scoped_ptr_t::execute
    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:
    - bthread::get_allocated_mem
    - cur_node
    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:
    - CHECK
    - CHECK_NE
    - sched_yield
    - 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
    - compare_exchange_strong
    - fetch_sub
    - _make_vref
    - _ref_of_vref
    - LOG
    - __builtin_expect
    - _on_recycle
    - _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: 71
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 71
    functionName: brpc::ChannelOptions::ChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 161
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelOptions::ChannelOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:75,1
    - Dst: ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/src/brpc/channel.cpp:75,1
    - Dst: get
      Src: /src/brpc/src/brpc/channel.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 78
    functionName: brpc::ChannelOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 6
    functionsReached:
    - reset
    - get
    - ChannelSSLOptions::ChannelSSLOptions
    linkageType: ''
    returnType: ChannelSSLOptions
    signature: ChannelSSLOptions * ChannelOptions::mutable_ssl_options()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:82,1
    - Dst: client_host::empty
      Src: /src/brpc/src/brpc/channel.cpp:83,1
    - Dst: device_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:84,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:85,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:86,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:88,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/channel.cpp:92,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:95,1
    - Dst: butil::MurmurHash3_x64_128_Init
      Src: /src/brpc/src/brpc/channel.cpp:96,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:98,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:99,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:100,1
    - Dst: client_host::empty
      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: device_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:106,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:107,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:108,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:111,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:112,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:114,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:115,1
    - Dst: std::string::append
      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::append
      Src: /src/brpc/src/brpc/channel.cpp:118,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:118,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:120,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:121,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:122,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:123,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:124,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:125,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:127,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:129,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:130,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:131,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:132,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:133,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:134,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:135,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:136,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:141,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:143,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/channel.cpp:143,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/channel.cpp:143,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:144,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:146,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:147,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/channel.cpp:148,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:150,1
    - Dst: certificate::data
      Src: /src/brpc/src/brpc/channel.cpp:151,1
    - Dst: certificate::size
      Src: /src/brpc/src/brpc/channel.cpp:151,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:152,1
    - Dst: private_key::data
      Src: /src/brpc/src/brpc/channel.cpp:153,1
    - Dst: private_key::size
      Src: /src/brpc/src/brpc/channel.cpp:153,1
    - Dst: butil::MurmurHash3_x64_128_Final
      Src: /src/brpc/src/brpc/channel.cpp:158,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:159,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 64
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - ChannelOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 166
    functionName: brpc::ComputeChannelSignature
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - certificate::data
    - connection_group::empty
    - std::string::append
    - hc_option::health_check_path::empty
    - butil::MurmurHash3_x64_128_Final
    - client_host::empty
    - butil::MurmurHash3_x64_128_Init
    - std::string::push_back
    - std::to_string
    - butil::MurmurHash3_x64_128_Update
    - std::string::clear
    - private_key::size
    - brpc::ChannelSignature
    - brpc::has_ssl_options
    - device_name::empty
    - private_key::data
    - ssl_options
    - certificate::empty
    - certificate::size
    - std::string::data
    - std::string::reserve
    - 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: 174
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 174
    functionName: brpc::Channel::Channel
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 232
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Channel::Channel(ProfilerLinker)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:178,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/channel.cpp:179,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 181
    functionName: Channel::~Channel()
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - SocketMapKey
    - SocketMapRemove
    - ComputeChannelSignature
    linkageType: ''
    returnType: void
    signature: void Channel::~Channel()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:188,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:190,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:193,1
    - Dst: brpc::TransportFactory::ContextInitOrDie
      Src: /src/brpc/src/brpc/channel.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:199,1
    - Dst: connection_type::has_error
      Src: /src/brpc/src/brpc/channel.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:221,1
    - Dst: connection_type::name
      Src: /src/brpc/src/brpc/channel.cpp:222,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:227,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/channel.cpp:228,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/channel.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:235,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:236,1
    - Dst: brpc::policy::global_esp_authenticator
      Src: /src/brpc/src/brpc/channel.cpp:242,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: front
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: back
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/src/brpc/channel.cpp:249,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 51
    argCount: 1
    argNames:
    - options
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 253
    functionName: brpc::Channel::InitChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - connection_type::has_error
    - front
    - back
    - Protocol*::support_client
    - butil::TrimWhitespace
    - get_client_side_messenger
    - LOG
    - hc_option::health_check_path::empty
    - protocol::name
    - empty
    - ConnectionTypeToString
    - connection_type::name
    - brpc::policy::global_esp_authenticator
    - ::isspace
    - brpc::TransportFactory::ContextInitOrDie
    - FindProtocol
    linkageType: ''
    returnType: int
    signature: int Channel::InitChannelOptions(const ChannelOptions* options)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:257,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:258,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:260,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:262,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:266,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:267,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:271,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:272,1
    - Dst: strstr
      Src: /src/brpc/src/brpc/channel.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:276,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:280,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:285,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 286
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 159
    functionsReached:
    - Protocol*::support_client
    - hostname2endpoint
    - LOG
    - butil::EndPoint::EndPoint
    - strstr
    - brpc::Channel::InitSingle
    - GlobalInitializeOrDie
    - Protocol*::parse_server_address
    - str2endpoint
    - FindProtocol
    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:290,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:291,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:293,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:295,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:300,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:305,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:307,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:311,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - server_addr
    - port
    - options
    argTypes:
    - char*
    - int
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 288
    functionDepth: 1
    functionLinenumber: 288
    functionLinenumberEnd: 312
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 159
    functionsReached:
    - Protocol*::support_client
    - hostname2endpoint
    - LOG
    - butil::EndPoint::EndPoint
    - brpc::Channel::InitSingle
    - GlobalInitializeOrDie
    - Protocol*::parse_server_address
    - str2endpoint
    - FindProtocol
    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:316,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:317,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:319,1
    - Dst: std::make_shared<SocketSSLContext>
      Src: /src/brpc/src/brpc/channel.cpp:322,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:324,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:325,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' options'
    - ssl_ctx
    argTypes:
    - ChannelOptions
    - std::shared_ptr<SocketSSLContext>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::CreateSocketSSLContext
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - ssl_options
    - brpc::CreateClientSSLContext
    - std::make_shared<SocketSSLContext>
    - LOG
    - brpc::has_ssl_options
    linkageType: ''
    returnType: int
    signature: "int CreateSocketSSLContext(const ChannelOptions& options,\n                                  std::shared_ptr<SocketSSLContext>*
      ssl_ctx)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:334,1
    - Dst: ChannelSSLOptions*::sni_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:335,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:341,1
    - Dst: brpc::SupportsPeerNameVerification
      Src: /src/brpc/src/brpc/channel.cpp:342,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/channel.cpp:345,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - ' host'
    - options
    argTypes:
    - std::string
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 350
    functionName: brpc::SetHttpsPeerName
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelSSLOptions*::sni_name::empty
    - brpc::SupportsPeerNameVerification
    - expected_peer_name::empty
    - LOG_ONCE
    - ChannelOptions*::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: "void SetHttpsPeerName(const std::string& host,\n                             ChannelOptions*
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - butil::EndPoint
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 352
    functionDepth: 1
    functionLinenumber: 352
    functionLinenumberEnd: 355
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 159
    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:361,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:362,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:366,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:369,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:369,1
    - Dst: SetHttpsPeerName
      Src: /src/brpc/src/brpc/channel.cpp:372,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:376,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:379,1
    - Dst: client_host::empty
      Src: /src/brpc/src/brpc/channel.cpp:380,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/channel.cpp:381,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:381,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/channel.cpp:382,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:383,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:387,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:389,1
    - Dst: SocketMapInsert
      Src: /src/brpc/src/brpc/channel.cpp:398,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:398,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:400,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 34
    argCount: 4
    argNames:
    - ' server_addr_and_port'
    - raw_server_address
    - options
    - raw_port
    argTypes:
    - butil::EndPoint
    - char*
    - ChannelOptions*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 357
    functionDepth: 2
    functionLinenumber: 357
    functionLinenumberEnd: 404
    functionName: brpc::Channel::InitSingle
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 3
    functionsReached:
    - ParseURL
    - client_host::empty
    - client_host::c_str
    - SetHttpsPeerName
    - butil::hostname2ip
    - LOG
    - CreateSocketSSLContext
    - butil::EndPoint::EndPoint
    - SocketMapKey
    - append
    - SocketMapInsert
    - ComputeChannelSignature
    - std::to_string
    - GlobalInitializeOrDie
    - brpc::Channel::InitChannelOptions
    - butil::str2ip
    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:411,1
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:413,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:414,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:418,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:421,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:421,1
    - Dst: SetHttpsPeerName
      Src: /src/brpc/src/brpc/channel.cpp:424,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:426,1
    - Dst: client_host::empty
      Src: /src/brpc/src/brpc/channel.cpp:427,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/channel.cpp:428,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:428,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/channel.cpp:429,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:430,1
    - Dst: LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/src/brpc/channel.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:436,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:443,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:447,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/channel.cpp:451,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:452,1
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:455,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/channel.cpp:455,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 3
    argNames:
    - ns_url
    - lb_name
    - options
    argTypes:
    - char*
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 457
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 160
    functionsReached:
    - std::unique_ptr::release
    - LOG
    - CreateSocketSSLContext
    - ComputeChannelSignature
    - brpc::Channel::InitChannelOptions
    - std::unique_ptr::Init
    - brpc::Channel::Init
    - client_host::empty
    - SetHttpsPeerName
    - append
    - std::to_string
    - GlobalInitializeOrDie
    - butil::str2ip
    - ParseURL
    - butil::EndPoint::EndPoint
    - LoadBalancerWithNaming::LoadBalancerWithNaming
    - reset
    - client_host::c_str
    - butil::hostname2ip
    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:461,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 462
    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:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 464
    functionDepth: 1
    functionLinenumber: 464
    functionLinenumberEnd: 467
    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:474,1
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/channel.cpp:475,1
    - Dst: Controller*::OnRPCBegin
      Src: /src/brpc/src/brpc/channel.cpp:476,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:478,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:479,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:481,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:484,1
    - Dst: protocol::has_param
      Src: /src/brpc/src/brpc/channel.cpp:488,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/channel.cpp:489,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:489,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:490,1
    - Dst: protocol::param
      Src: /src/brpc/src/brpc/channel.cpp:490,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/channel.cpp:493,1
    - Dst: host
      Src: /src/brpc/src/brpc/channel.cpp:494,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:494,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/channel.cpp:495,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/channel.cpp:501,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/channel.cpp:503,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/src/brpc/channel.cpp:504,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:505,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/channel.cpp:507,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:508,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:509,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/channel.cpp:512,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:512,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/channel.cpp:523,1
    - Dst: Controller*::set_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:527,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/channel.cpp:529,1
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/channel.cpp:529,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/channel.cpp:530,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/channel.cpp:533,1
    - Dst: _get_method_name
      Src: /src/brpc/src/brpc/channel.cpp:533,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/channel.cpp:535,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/channel.cpp:535,1
    - Dst: brpc::Span::CreateClientSpan
      Src: /src/brpc/src/brpc/channel.cpp:540,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/channel.cpp:544,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/channel.cpp:544,1
    - Dst: std::shared_ptr::set_base_cid
      Src: /src/brpc/src/brpc/channel.cpp:545,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/channel.cpp:546,1
    - Dst: std::shared_ptr::set_start_send_us
      Src: /src/brpc/src/brpc/channel.cpp:547,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/channel.cpp:548,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:552,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:553,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:559,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:561,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/channel.cpp:564,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/channel.cpp:565,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/src/brpc/channel.cpp:573,1
    - Dst: _serialize_request
      Src: /src/brpc/src/brpc/channel.cpp:584,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:585,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:588,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/channel.cpp:592,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:593,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:595,1
    - Dst: Controller*::_request_streams::empty
      Src: /src/brpc/src/brpc/channel.cpp:598,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:600,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:601,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:605,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:606,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:606,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:607,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:613,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:616,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:618,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:620,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:621,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:623,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:624,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:625,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:627,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:631,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:632,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:634,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:636,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:637,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:638,1
    - Dst: Controller*::IssueRPC
      Src: /src/brpc/src/brpc/channel.cpp:644,1
    - Dst: Join
      Src: /src/brpc/src/brpc/channel.cpp:649,1
    - Dst: Controller*::SubmitSpan
      Src: /src/brpc/src/brpc/channel.cpp:650,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/channel.cpp:651,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/channel.cpp:651,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: 653
      start: 469
    functionDepth: 3
    functionLinenumber: 469
    functionLinenumberEnd: 653
    functionName: brpc::Channel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 93
    functionsReached:
    - google::protobuf::Closure*::Run
    - Controller*::HandleSendFailed
    - ControllerPrivateAccessor::set_span
    - butil::gettimeofday_us
    - Controller*::call_id
    - SetHostAndPort
    - butil::EnsureString
    - std::shared_ptr::set_protocol
    - TooManyUserCode
    - Controller*::protocol_param
    - Controller*::OnRPCBegin
    - butil::microseconds_to_timespec
    - empty
    - Controller*::_request_streams::empty
    - CHECK_EQ
    - Controller*::set_timeout_ms
    - Controller*::set_max_retry
    - LOG_IF
    - Controller*::is_used_by_rpc
    - Controller*::set_used_by_rpc
    - Controller*::timeout_ms
    - std::shared_ptr::set_start_send_us
    - bthread_timer_add
    - Join
    - CHECK
    - Controller*::connection_type
    - host
    - Controller*::backup_request_ms
    - Controller*::http_request
    - Controller*::FailedInline
    - Controller*::max_retry
    - static_cast<Controller*>
    - protocol::has_param
    - Controller*::add_flag
    - butil::cpuwide_time_us
    - std::shared_ptr::set_log_id
    - Controller*::OnRPCEnd
    - Controller*::log_id
    - brpc::Channel::SingleServer
    - Controller*::set_backup_request_ms
    - bthread_id_lock_and_reset_range
    - std::shared_ptr::set_base_cid
    - brpc::Span::CreateClientSpan
    - BAIDU_UNLIKELY
    - Controller*::SubmitSpan
    - protocol::param
    - Controller*::IssueRPC
    - Controller*::set_connection_type
    - _get_method_name
    - google::protobuf::MethodDescriptor*::full_name
    - IsTraceable
    - Controller*::SetFailed
    - _serialize_request
    - brpc::Span::tls_parent
    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:657,1
    - Dst: brpc::Channel::Describe
      Src: /src/brpc/src/brpc/channel.cpp:660,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 663
    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:666,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 665
    functionDepth: 1
    functionLinenumber: 665
    functionLinenumberEnd: 667
    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:672,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/channel.cpp:672,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/channel.cpp:680,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 682
    functionName: brpc::Channel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::IsAvailable
    - 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: 71
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 71
    functionName: brpc::ChannelOptions::ChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 161
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ChannelOptions::ChannelOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:75,1
    - Dst: ChannelSSLOptions::ChannelSSLOptions
      Src: /src/brpc/src/brpc/channel.cpp:75,1
    - Dst: get
      Src: /src/brpc/src/brpc/channel.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 73
    functionDepth: 1
    functionLinenumber: 73
    functionLinenumberEnd: 78
    functionName: brpc::ChannelOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 6
    functionsReached:
    - reset
    - get
    - ChannelSSLOptions::ChannelSSLOptions
    linkageType: ''
    returnType: ChannelSSLOptions
    signature: ChannelSSLOptions * ChannelOptions::mutable_ssl_options()
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:82,1
    - Dst: client_host::empty
      Src: /src/brpc/src/brpc/channel.cpp:83,1
    - Dst: device_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:84,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:85,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:86,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:88,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/channel.cpp:92,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:95,1
    - Dst: butil::MurmurHash3_x64_128_Init
      Src: /src/brpc/src/brpc/channel.cpp:96,1
    - Dst: connection_group::empty
      Src: /src/brpc/src/brpc/channel.cpp:98,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:99,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:100,1
    - Dst: client_host::empty
      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: device_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:106,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:107,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:108,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:111,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:112,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:114,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:115,1
    - Dst: std::string::append
      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::append
      Src: /src/brpc/src/brpc/channel.cpp:118,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:118,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:120,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:121,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:122,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:123,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:124,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:125,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:126,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:127,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:129,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:130,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:131,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:132,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:133,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:134,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/channel.cpp:135,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:136,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/channel.cpp:141,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:143,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/channel.cpp:143,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/channel.cpp:143,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/channel.cpp:144,1
    - Dst: brpc::has_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:146,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:147,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/channel.cpp:148,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:150,1
    - Dst: certificate::data
      Src: /src/brpc/src/brpc/channel.cpp:151,1
    - Dst: certificate::size
      Src: /src/brpc/src/brpc/channel.cpp:151,1
    - Dst: butil::MurmurHash3_x64_128_Update
      Src: /src/brpc/src/brpc/channel.cpp:152,1
    - Dst: private_key::data
      Src: /src/brpc/src/brpc/channel.cpp:153,1
    - Dst: private_key::size
      Src: /src/brpc/src/brpc/channel.cpp:153,1
    - Dst: butil::MurmurHash3_x64_128_Final
      Src: /src/brpc/src/brpc/channel.cpp:158,1
    - Dst: brpc::ChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:159,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 64
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - ChannelOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 166
    functionName: brpc::ComputeChannelSignature
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - certificate::data
    - connection_group::empty
    - std::string::append
    - hc_option::health_check_path::empty
    - butil::MurmurHash3_x64_128_Final
    - client_host::empty
    - butil::MurmurHash3_x64_128_Init
    - std::string::push_back
    - std::to_string
    - butil::MurmurHash3_x64_128_Update
    - std::string::clear
    - private_key::size
    - brpc::ChannelSignature
    - brpc::has_ssl_options
    - device_name::empty
    - private_key::data
    - ssl_options
    - certificate::empty
    - certificate::size
    - std::string::data
    - std::string::reserve
    - 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: 174
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 174
    functionName: brpc::Channel::Channel
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 232
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Channel::Channel(ProfilerLinker)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:178,1
    - Dst: SocketMapRemove
      Src: /src/brpc/src/brpc/channel.cpp:179,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 181
    functionName: Channel::~Channel()
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - SocketMapKey
    - SocketMapRemove
    - ComputeChannelSignature
    linkageType: ''
    returnType: void
    signature: void Channel::~Channel()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:188,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:190,1
    - Dst: hc_option::health_check_path::empty
      Src: /src/brpc/src/brpc/channel.cpp:193,1
    - Dst: brpc::TransportFactory::ContextInitOrDie
      Src: /src/brpc/src/brpc/channel.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:199,1
    - Dst: connection_type::has_error
      Src: /src/brpc/src/brpc/channel.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:221,1
    - Dst: connection_type::name
      Src: /src/brpc/src/brpc/channel.cpp:222,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:223,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:227,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/channel.cpp:228,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/channel.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:235,1
    - Dst: protocol::name
      Src: /src/brpc/src/brpc/channel.cpp:236,1
    - Dst: brpc::policy::global_esp_authenticator
      Src: /src/brpc/src/brpc/channel.cpp:242,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: front
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: ::isspace
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: back
      Src: /src/brpc/src/brpc/channel.cpp:248,1
    - Dst: butil::TrimWhitespace
      Src: /src/brpc/src/brpc/channel.cpp:249,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 51
    argCount: 1
    argNames:
    - options
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 253
    functionName: brpc::Channel::InitChannelOptions
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 2
    functionsReached:
    - connection_type::has_error
    - front
    - back
    - Protocol*::support_client
    - butil::TrimWhitespace
    - get_client_side_messenger
    - LOG
    - hc_option::health_check_path::empty
    - protocol::name
    - empty
    - ConnectionTypeToString
    - connection_type::name
    - brpc::policy::global_esp_authenticator
    - ::isspace
    - brpc::TransportFactory::ContextInitOrDie
    - FindProtocol
    linkageType: ''
    returnType: int
    signature: int Channel::InitChannelOptions(const ChannelOptions* options)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:257,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:258,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:260,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:262,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:266,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:267,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:271,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:272,1
    - Dst: strstr
      Src: /src/brpc/src/brpc/channel.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:276,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:280,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:285,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 255
    functionDepth: 3
    functionLinenumber: 255
    functionLinenumberEnd: 286
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 160
    functionsReached:
    - Protocol*::support_client
    - hostname2endpoint
    - LOG
    - butil::EndPoint::EndPoint
    - strstr
    - brpc::Channel::InitSingle
    - GlobalInitializeOrDie
    - Protocol*::parse_server_address
    - str2endpoint
    - FindProtocol
    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:290,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:291,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/channel.cpp:293,1
    - Dst: Protocol*::support_client
      Src: /src/brpc/src/brpc/channel.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:295,1
    - Dst: Protocol*::parse_server_address
      Src: /src/brpc/src/brpc/channel.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:300,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:305,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/channel.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:307,1
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:311,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - server_addr
    - port
    - options
    argTypes:
    - char*
    - int
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 288
    functionDepth: 3
    functionLinenumber: 288
    functionLinenumberEnd: 312
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 160
    functionsReached:
    - Protocol*::support_client
    - hostname2endpoint
    - LOG
    - butil::EndPoint::EndPoint
    - brpc::Channel::InitSingle
    - GlobalInitializeOrDie
    - Protocol*::parse_server_address
    - str2endpoint
    - FindProtocol
    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:316,1
    - Dst: brpc::CreateClientSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:317,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:319,1
    - Dst: std::make_shared<SocketSSLContext>
      Src: /src/brpc/src/brpc/channel.cpp:322,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:324,1
    - Dst: ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:325,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - ' options'
    - ssl_ctx
    argTypes:
    - ChannelOptions
    - std::shared_ptr<SocketSSLContext>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::CreateSocketSSLContext
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - ssl_options
    - brpc::CreateClientSSLContext
    - std::make_shared<SocketSSLContext>
    - LOG
    - brpc::has_ssl_options
    linkageType: ''
    returnType: int
    signature: "int CreateSocketSSLContext(const ChannelOptions& options,\n                                  std::shared_ptr<SocketSSLContext>*
      ssl_ctx)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::mutable_ssl_options
      Src: /src/brpc/src/brpc/channel.cpp:334,1
    - Dst: ChannelSSLOptions*::sni_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:335,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/channel.cpp:341,1
    - Dst: brpc::SupportsPeerNameVerification
      Src: /src/brpc/src/brpc/channel.cpp:342,1
    - Dst: LOG_ONCE
      Src: /src/brpc/src/brpc/channel.cpp:345,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 11
    argCount: 2
    argNames:
    - ' host'
    - options
    argTypes:
    - std::string
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 350
    functionName: brpc::SetHttpsPeerName
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelSSLOptions*::sni_name::empty
    - brpc::SupportsPeerNameVerification
    - expected_peer_name::empty
    - LOG_ONCE
    - ChannelOptions*::mutable_ssl_options
    linkageType: ''
    returnType: void
    signature: "void SetHttpsPeerName(const std::string& host,\n                             ChannelOptions*
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Channel::InitSingle
      Src: /src/brpc/src/brpc/channel.cpp:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - server_addr_and_port
    - options
    argTypes:
    - butil::EndPoint
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 352
    functionDepth: 3
    functionLinenumber: 352
    functionLinenumberEnd: 355
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 160
    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:361,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:362,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:366,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:369,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:369,1
    - Dst: SetHttpsPeerName
      Src: /src/brpc/src/brpc/channel.cpp:372,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:376,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:379,1
    - Dst: client_host::empty
      Src: /src/brpc/src/brpc/channel.cpp:380,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/channel.cpp:381,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:381,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/channel.cpp:382,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:383,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:387,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:389,1
    - Dst: SocketMapInsert
      Src: /src/brpc/src/brpc/channel.cpp:398,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/channel.cpp:398,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:400,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 34
    argCount: 4
    argNames:
    - ' server_addr_and_port'
    - raw_server_address
    - options
    - raw_port
    argTypes:
    - butil::EndPoint
    - char*
    - ChannelOptions*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 404
      start: 357
    functionDepth: 2
    functionLinenumber: 357
    functionLinenumberEnd: 404
    functionName: brpc::Channel::InitSingle
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 6
    functionsReached:
    - ParseURL
    - client_host::empty
    - client_host::c_str
    - SetHttpsPeerName
    - butil::hostname2ip
    - LOG
    - CreateSocketSSLContext
    - butil::EndPoint::EndPoint
    - SocketMapKey
    - append
    - SocketMapInsert
    - ComputeChannelSignature
    - std::to_string
    - GlobalInitializeOrDie
    - brpc::Channel::InitChannelOptions
    - butil::str2ip
    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:411,1
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/channel.cpp:413,1
    - Dst: brpc::Channel::InitChannelOptions
      Src: /src/brpc/src/brpc/channel.cpp:414,1
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/channel.cpp:418,1
    - Dst: append
      Src: /src/brpc/src/brpc/channel.cpp:421,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/channel.cpp:421,1
    - Dst: SetHttpsPeerName
      Src: /src/brpc/src/brpc/channel.cpp:424,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/channel.cpp:426,1
    - Dst: client_host::empty
      Src: /src/brpc/src/brpc/channel.cpp:427,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/channel.cpp:428,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:428,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/channel.cpp:429,1
    - Dst: client_host::c_str
      Src: /src/brpc/src/brpc/channel.cpp:429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:430,1
    - Dst: LoadBalancerWithNaming::LoadBalancerWithNaming
      Src: /src/brpc/src/brpc/channel.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:436,1
    - Dst: ComputeChannelSignature
      Src: /src/brpc/src/brpc/channel.cpp:443,1
    - Dst: CreateSocketSSLContext
      Src: /src/brpc/src/brpc/channel.cpp:447,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/channel.cpp:451,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/channel.cpp:452,1
    - Dst: reset
      Src: /src/brpc/src/brpc/channel.cpp:455,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/channel.cpp:455,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 3
    argNames:
    - ns_url
    - lb_name
    - options
    argTypes:
    - char*
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 457
      start: 406
    functionDepth: 2
    functionLinenumber: 406
    functionLinenumberEnd: 457
    functionName: brpc::Channel::Init
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 161
    functionsReached:
    - std::unique_ptr::release
    - LOG
    - CreateSocketSSLContext
    - ComputeChannelSignature
    - brpc::Channel::InitChannelOptions
    - std::unique_ptr::Init
    - brpc::Channel::Init
    - client_host::empty
    - SetHttpsPeerName
    - append
    - std::to_string
    - GlobalInitializeOrDie
    - butil::str2ip
    - ParseURL
    - butil::EndPoint::EndPoint
    - LoadBalancerWithNaming::LoadBalancerWithNaming
    - reset
    - client_host::c_str
    - butil::hostname2ip
    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:461,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 462
    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:466,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 464
    functionDepth: 1
    functionLinenumber: 464
    functionLinenumberEnd: 467
    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:474,1
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/channel.cpp:475,1
    - Dst: Controller*::OnRPCBegin
      Src: /src/brpc/src/brpc/channel.cpp:476,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:478,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:479,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:481,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:484,1
    - Dst: protocol::has_param
      Src: /src/brpc/src/brpc/channel.cpp:488,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/channel.cpp:489,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:489,1
    - Dst: Controller*::protocol_param
      Src: /src/brpc/src/brpc/channel.cpp:490,1
    - Dst: protocol::param
      Src: /src/brpc/src/brpc/channel.cpp:490,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/channel.cpp:493,1
    - Dst: host
      Src: /src/brpc/src/brpc/channel.cpp:494,1
    - Dst: empty
      Src: /src/brpc/src/brpc/channel.cpp:494,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/channel.cpp:495,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/channel.cpp:501,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/channel.cpp:503,1
    - Dst: bthread_id_lock_and_reset_range
      Src: /src/brpc/src/brpc/channel.cpp:504,1
    - Dst: Controller*::max_retry
      Src: /src/brpc/src/brpc/channel.cpp:505,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/channel.cpp:507,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:508,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:509,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/channel.cpp:512,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:512,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/channel.cpp:523,1
    - Dst: Controller*::set_used_by_rpc
      Src: /src/brpc/src/brpc/channel.cpp:527,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/channel.cpp:529,1
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/channel.cpp:529,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/channel.cpp:530,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/channel.cpp:533,1
    - Dst: _get_method_name
      Src: /src/brpc/src/brpc/channel.cpp:533,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/channel.cpp:535,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/channel.cpp:535,1
    - Dst: brpc::Span::CreateClientSpan
      Src: /src/brpc/src/brpc/channel.cpp:540,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/channel.cpp:544,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/channel.cpp:544,1
    - Dst: std::shared_ptr::set_base_cid
      Src: /src/brpc/src/brpc/channel.cpp:545,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/channel.cpp:546,1
    - Dst: std::shared_ptr::set_start_send_us
      Src: /src/brpc/src/brpc/channel.cpp:547,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/channel.cpp:548,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:552,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:553,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:559,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:561,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/channel.cpp:564,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/channel.cpp:565,1
    - Dst: brpc::Channel::SingleServer
      Src: /src/brpc/src/brpc/channel.cpp:573,1
    - Dst: _serialize_request
      Src: /src/brpc/src/brpc/channel.cpp:584,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/channel.cpp:585,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:588,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/channel.cpp:592,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:593,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:595,1
    - Dst: Controller*::_request_streams::empty
      Src: /src/brpc/src/brpc/channel.cpp:598,1
    - Dst: Controller*::set_max_retry
      Src: /src/brpc/src/brpc/channel.cpp:600,1
    - Dst: Controller*::set_backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:601,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:605,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:606,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:606,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:607,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:613,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:616,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:618,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:620,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/channel.cpp:621,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:623,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:624,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:625,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:627,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/channel.cpp:631,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/channel.cpp:632,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/channel.cpp:634,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/channel.cpp:636,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/channel.cpp:637,1
    - Dst: Controller*::HandleSendFailed
      Src: /src/brpc/src/brpc/channel.cpp:638,1
    - Dst: Controller*::IssueRPC
      Src: /src/brpc/src/brpc/channel.cpp:644,1
    - Dst: Join
      Src: /src/brpc/src/brpc/channel.cpp:649,1
    - Dst: Controller*::SubmitSpan
      Src: /src/brpc/src/brpc/channel.cpp:650,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/channel.cpp:651,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/channel.cpp:651,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: 653
      start: 469
    functionDepth: 3
    functionLinenumber: 469
    functionLinenumberEnd: 653
    functionName: brpc::Channel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 93
    functionsReached:
    - google::protobuf::Closure*::Run
    - Controller*::HandleSendFailed
    - ControllerPrivateAccessor::set_span
    - butil::gettimeofday_us
    - Controller*::call_id
    - SetHostAndPort
    - butil::EnsureString
    - std::shared_ptr::set_protocol
    - TooManyUserCode
    - Controller*::protocol_param
    - Controller*::OnRPCBegin
    - butil::microseconds_to_timespec
    - empty
    - Controller*::_request_streams::empty
    - CHECK_EQ
    - Controller*::set_timeout_ms
    - Controller*::set_max_retry
    - LOG_IF
    - Controller*::is_used_by_rpc
    - Controller*::set_used_by_rpc
    - Controller*::timeout_ms
    - std::shared_ptr::set_start_send_us
    - bthread_timer_add
    - Join
    - CHECK
    - Controller*::connection_type
    - host
    - Controller*::backup_request_ms
    - Controller*::http_request
    - Controller*::FailedInline
    - Controller*::max_retry
    - static_cast<Controller*>
    - protocol::has_param
    - Controller*::add_flag
    - butil::cpuwide_time_us
    - std::shared_ptr::set_log_id
    - Controller*::OnRPCEnd
    - Controller*::log_id
    - brpc::Channel::SingleServer
    - Controller*::set_backup_request_ms
    - bthread_id_lock_and_reset_range
    - std::shared_ptr::set_base_cid
    - brpc::Span::CreateClientSpan
    - BAIDU_UNLIKELY
    - Controller*::SubmitSpan
    - protocol::param
    - Controller*::IssueRPC
    - Controller*::set_connection_type
    - _get_method_name
    - google::protobuf::MethodDescriptor*::full_name
    - IsTraceable
    - Controller*::SetFailed
    - _serialize_request
    - brpc::Span::tls_parent
    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:657,1
    - Dst: brpc::Channel::Describe
      Src: /src/brpc/src/brpc/channel.cpp:660,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 655
    functionDepth: 1
    functionLinenumber: 655
    functionLinenumberEnd: 663
    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:666,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 667
      start: 665
    functionDepth: 1
    functionLinenumber: 665
    functionLinenumberEnd: 667
    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:672,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/channel.cpp:672,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/channel.cpp:680,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 669
    functionDepth: 1
    functionLinenumber: 669
    functionLinenumberEnd: 682
    functionName: brpc::Channel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/channel.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::IsAvailable
    - SelectServer
    linkageType: ''
    returnType: int
    signature: int Channel::CheckHealth()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - 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
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:63,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 64
    functionName: brpc::Stream::Stream
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_init
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Stream::Stream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:72,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:73,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:74,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 66
    functionDepth: 3
    functionLinenumber: 66
    functionLinenumberEnd: 76
    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:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:92,1
    - Dst: Stream*::_remote_settings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:99,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:102,1
    - Dst: execution_queue_start
      Src: /src/brpc/src/brpc/stream.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:110,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/stream.cpp:117,1
    - Dst: Stream*::BeforeRecycle
      Src: /src/brpc/src/brpc/stream.cpp:118,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:122,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:122,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/stream.cpp:123,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:125,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: 127
      start: 78
    functionDepth: 4
    functionLinenumber: 78
    functionLinenumberEnd: 127
    functionName: brpc::Stream::Create
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - Socket::Create
    - Stream*::BeforeRecycle
    - Stream*::id
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - Stream::Stream
    - LOG
    - execution_queue_start
    - bthread_id_list_init
    - CHECK_EQ
    - Stream*::_remote_settings::MergeFrom
    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:131,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:135,1
    - Dst: brpc::policy::SendStreamClose
      Src: /src/brpc/src/brpc/stream.cpp:136,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:137,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:137,1
    - Dst: RemoveStream
      Src: /src/brpc/src/brpc/stream.cpp:141,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:141,1
    - Dst: execution_queue_stop
      Src: /src/brpc/src/brpc/stream.cpp:145,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 129
    functionDepth: 3
    functionLinenumber: 129
    functionLinenumberEnd: 146
    functionName: brpc::Stream::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - bthread_id_list_reset
    - CHECK
    - execution_queue_stop
    - RemoveStream
    - brpc::policy::SendStreamClose
    - id
    linkageType: ''
    returnType: void
    signature: void Stream::BeforeRecycle(Socket *)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:152,1
    - Dst: writable
      Src: /src/brpc/src/brpc/stream.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:157,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:157,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:158,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/stream.cpp:159,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:164,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:169,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:172,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:174,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:177,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/stream.cpp:180,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:183,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:183,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:184,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:185,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:186,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:187,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:188,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:189,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:190,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:191,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:195,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:197,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:202,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:202,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:203,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:204,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:205,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:207,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/stream.cpp:211,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:212,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 51
    argCount: 2
    argNames:
    - data_list
    - size
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 215
    functionName: brpc::Stream::CutMessageIntoFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - StreamFrameMeta::set_source_stream_id
    - remote_side
    - CHECK
    - butil::IOBuf*::length
    - writable
    - id
    - butil::IOBuf*::cutn
    - brpc::Stream::WriteToHostSocket
    - clear
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_has_continuation
    - butil::IOBuf::clear
    - brpc::policy::PackStreamMessage
    - butil::IOBuf::length
    - stream_id
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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:218,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 219
    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:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 225
    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:230,1
    - Dst: ConnectMeta*::on_connect
      Src: /src/brpc/src/brpc/stream.cpp:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 236
    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:240,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/stream.cpp:240,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:241,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:243,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:244,1
    - Dst: ConnectMeta::ConnectMeta
      Src: /src/brpc/src/brpc/stream.cpp:250,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:254,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:257,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:257,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:258,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:262,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 2
    argNames:
    - ptr
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 238
    functionDepth: 7
    functionLinenumber: 238
    functionLinenumberEnd: 264
    functionName: brpc::Stream::Connect
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ConnectMeta::ConnectMeta
    - brpc::Stream::RunOnConnect
    - berror
    - CHECK
    - LOG
    - bthread_mutex_lock
    - Socket*::id
    - bthread_mutex_unlock
    - bthread_start_urgent
    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:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 268
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:271,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:273,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:277,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:278,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:281,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:283,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:283,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:286,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:286,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:288,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:289,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:290,1
    - Dst: store
      Src: /src/brpc/src/brpc/stream.cpp:291,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:293,1
    - Dst: brpc::Stream::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:298,1
    - Dst: need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:301,1
    - Dst: load
      Src: /src/brpc/src/brpc/stream.cpp:302,1
    - Dst: brpc::Stream::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:304,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 1
    argNames:
    - remote_settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 270
    functionDepth: 7
    functionLinenumber: 270
    functionLinenumberEnd: 307
    functionName: brpc::Stream::SetConnected
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - load
    - brpc::Stream::StartIdleTimer
    - need_feedback
    - stream_id
    - bthread_mutex_lock
    - store
    - brpc::Stream::TriggerOnConnectIfNeed
    - MergeFrom
    - CHECK
    - IsInitialized
    - brpc::Stream::SendFeedback
    - id
    - bthread_mutex_unlock
    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:311,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:315,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:318,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:318,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:319,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 309
    functionDepth: 5
    functionLinenumber: 309
    functionLinenumberEnd: 324
    functionName: brpc::Stream::TriggerOnConnectIfNeed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - ConnectMeta::ConnectMeta
    - brpc::Stream::RunOnConnect
    - berror
    - LOG
    - bthread_mutex_unlock
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void Stream::TriggerOnConnectIfNeed()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/stream.cpp:333,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:341,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:344,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:351,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:351,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:352,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - data
    - options
    argTypes:
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 360
    functionName: brpc::Stream::AppendIfNotFull
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::IOBuf::length
    - berror
    - LOG
    - std::unique_lock::unlock
    - Write
    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:363,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:365,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:366,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:381,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:381,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:381,1
    - Dst: bthread_id_list_swap
      Src: /src/brpc/src/brpc/stream.cpp:394,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:396,1
    - Dst: bthread_id_list_reset
      Src: /src/brpc/src/brpc/stream.cpp:399,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:400,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 1
    argNames:
    - new_remote_consumed
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 362
    functionDepth: 7
    functionLinenumber: 362
    functionLinenumberEnd: 401
    functionName: brpc::Stream::SetRemoteConsumed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_list_swap
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - CHECK
    - LOG
    - bthread_id_list_init
    - bthread_mutex_lock
    - id
    - bthread_mutex_unlock
    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:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 403
    functionDepth: 2
    functionLinenumber: 403
    functionLinenumberEnd: 408
    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:414,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:422,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:423,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:423,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:424,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:427,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/stream.cpp:429,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: 430
      start: 410
    functionDepth: 6
    functionLinenumber: 410
    functionLinenumberEnd: 430
    functionName: brpc::Stream::TriggerOnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - berror
    - brpc::Stream::RunOnWritable
    - LOG
    - bthread_id_unlock_and_destroy
    - bthread_timer_del
    - bthread_start_background
    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:433,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/stream.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 435
    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:439,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:441,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/stream.cpp:446,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:450,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:459,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/brpc/stream.cpp:461,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:464,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:464,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:467,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:470,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:471,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:471,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/src/brpc/stream.cpp:474,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:475,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:477,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/stream.cpp:477,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: 478
      start: 437
    functionDepth: 7
    functionLinenumber: 437
    functionLinenumberEnd: 478
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - WritableMeta::WritableMeta
    - bthread_mutex_unlock
    - berror
    - bthread_timer_add
    - bthread_mutex_lock
    - brpc::Stream::RunOnWritable
    - CHECK
    - LOG
    - bthread_id_unlock
    - bthread_id_lock
    - bthread_id_list_add
    - CHECK_EQ
    - id
    - reinterpret_cast<void*>
    - bthread_id_create
    - brpc::Stream::TriggerOnWritable
    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:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - due_time
    argTypes:
    - void*
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 480
    functionDepth: 1
    functionLinenumber: 480
    functionLinenumberEnd: 483
    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: 487
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 487
    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:492,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/stream.cpp:494,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - due_time
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 489
    functionDepth: 5
    functionLinenumber: 489
    functionLinenumberEnd: 497
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::Stream::Wait
    - bthread_id_join
    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:501,1
    - Dst: frame_type
      Src: /src/brpc/src/brpc/stream.cpp:505,1
    - Dst: brpc::Stream::SetRemoteConsumed
      Src: /src/brpc/src/brpc/stream.cpp:507,1
    - Dst: feedback
      Src: /src/brpc/src/brpc/stream.cpp:507,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:508,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:508,1
    - Dst: append
      Src: /src/brpc/src/brpc/stream.cpp:512,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/stream.cpp:513,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:515,1
    - Dst: swap
      Src: /src/brpc/src/brpc/stream.cpp:516,1
    - Dst: has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:518,1
    - Dst: execution_queue_execute
      Src: /src/brpc/src/brpc/stream.cpp:521,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:523,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:525,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:530,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:531,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:534,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:536,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 3
    argNames:
    - ' fm'
    - buf
    - sock
    argTypes:
    - StreamFrameMeta
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 499
    functionDepth: 8
    functionLinenumber: 499
    functionLinenumberEnd: 543
    functionName: brpc::Stream::OnReceived
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - feedback
    - brpc::Stream::Close
    - id
    - brpc::Stream::SetRemoteConsumed
    - butil::IOBuf*::clear
    - has_continuation
    - CHECK
    - execution_queue_execute
    - frame_type
    - append
    - swap
    - brpc::Stream::SetHostSocket
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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: 553
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 553
    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:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 554
    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:557,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:558,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 564
    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:567,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:570,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 572
    functionName: brpc::MessageBatcher::push
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - brpc::MessageBatcher::flush
    - butil::IOBuf*::length
    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: 573
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 573
    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: 13
    BranchProfiles: []
    Callsites:
    - Dst: Stream*::StopIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:584,1
    - Dst: is_queue_stopped
      Src: /src/brpc/src/brpc/stream.cpp:585,1
    - Dst: DereferenceSocket
      Src: /src/brpc/src/brpc/stream.cpp:589,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:596,1
    - Dst: Stream*::_options::handler::on_failed
      Src: /src/brpc/src/brpc/stream.cpp:602,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:602,1
    - Dst: Stream*::_options::handler::on_closed
      Src: /src/brpc/src/brpc/stream.cpp:604,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:604,1
    - Dst: Stream*::HandleRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:618,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:620,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:625,1
    - Dst: Stream*::_options::handler::on_idle_timeout
      Src: /src/brpc/src/brpc/stream.cpp:626,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:626,1
    - Dst: flush
      Src: /src/brpc/src/brpc/stream.cpp:629,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:631,1
    - Dst: Stream*::_connected::load
      Src: /src/brpc/src/brpc/stream.cpp:634,1
    - Dst: Stream*::_remote_settings::need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:635,1
    - Dst: Stream*::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:637,1
    - Dst: Stream*::_atomic_local_consumed::fetch_add
      Src: /src/brpc/src/brpc/stream.cpp:642,1
    - Dst: Stream*::_connected::load
      Src: /src/brpc/src/brpc/stream.cpp:643,1
    - Dst: Stream*::_remote_settings::need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:643,1
    - Dst: Stream*::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:644,1
    - Dst: Stream*::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:649,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<butil::IOBuf*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 651
    functionName: brpc::Stream::Consume
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - Stream*::StopIdleTimer
    - BAIDU_SCOPED_LOCK
    - Stream*::id
    - Stream*::_options::handler::on_closed
    - Stream*::SendFeedback
    - flush
    - Stream*::_connected::load
    - Stream*::HandleRpcResponse
    - Stream*::_options::handler::on_idle_timeout
    - Stream*::_remote_settings::need_feedback
    - Stream*::_atomic_local_consumed::fetch_add
    - Stream*::StartIdleTimer
    - push
    - DereferenceSocket
    - total_length
    - Stream*::_options::handler::on_failed
    - is_queue_stopped
    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:618,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:620,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - messages_in_batch
    argTypes:
    - s
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 623
    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:655,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:656,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:656,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: StreamFrameMeta::mutable_feedback
      Src: /src/brpc/src/brpc/stream.cpp:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:659,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:660,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - _consumed_bytes
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 662
      start: 653
    functionDepth: 2
    functionLinenumber: 653
    functionLinenumberEnd: 662
    functionName: brpc::Stream::SendFeedback
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::PackStreamMessage
    - stream_id
    - StreamFrameMeta::mutable_feedback
    - brpc::Stream::WriteToHostSocket
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_frame_type
    - butil::IOBuf::IOBuf
    - StreamFrameMeta::set_source_stream_id
    - id
    linkageType: ''
    returnType: void
    signature: void Stream::SendFeedback(int64_t _consumed_bytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::call_once
      Src: /src/brpc/src/brpc/stream.cpp:665,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:667,1
    - Dst: SocketUniquePtr::AddStream
      Src: /src/brpc/src/brpc/stream.cpp:669,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:669,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:670,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:670,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/stream.cpp:673,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 664
    functionDepth: 1
    functionLinenumber: 664
    functionLinenumberEnd: 676
    functionName: brpc::Stream::SetHostSocket
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::AddStream
    - std::call_once
    - SocketUniquePtr::release
    - CHECK
    - 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:679,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:679,1
    - Dst: StreamSettings*::set_need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:680,1
    - Dst: StreamSettings*::set_writable
      Src: /src/brpc/src/brpc/stream.cpp:681,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 682
    functionName: brpc::Stream::FillSettings
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - StreamSettings*::set_stream_id
    - id
    - StreamSettings*::set_writable
    - 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:686,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 684
    functionDepth: 2
    functionLinenumber: 684
    functionLinenumberEnd: 687
    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:693,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/stream.cpp:694,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:696,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/stream.cpp:698,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 689
    functionDepth: 3
    functionLinenumber: 689
    functionLinenumberEnd: 699
    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:706,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 701
    functionDepth: 2
    functionLinenumber: 701
    functionLinenumberEnd: 708
    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:711,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:712,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:714,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:721,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/stream.cpp:722,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:723,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:726,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:731,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 710
    functionDepth: 7
    functionLinenumber: 710
    functionLinenumberEnd: 732
    functionName: brpc::Stream::Close
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - va_start
    - brpc::Stream::TriggerOnConnectIfNeed
    - va_end
    - butil::string_vappendf
    - bthread_mutex_lock
    - brpc::Stream::SetFailed
    - bthread_mutex_unlock
    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:736,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:740,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:742,1
    - Dst: Stream*::Close
      Src: /src/brpc/src/brpc/stream.cpp:743,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:744,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - id
    - error_code
    - reason_fmt
    argTypes:
    - StreamId
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 734
    functionDepth: 1
    functionLinenumber: 734
    functionLinenumberEnd: 746
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::conn
    - va_start
    - Stream*::Close
    - va_end
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    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:750,1
    - Dst: size
      Src: /src/brpc/src/brpc/stream.cpp:751,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:752,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:754,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' ids'
    - error_code
    - reason_fmt
    argTypes:
    - StreamIds
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 748
    functionDepth: 1
    functionLinenumber: 748
    functionLinenumberEnd: 756
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - va_start
    - size
    - brpc::Stream::SetFailed
    - 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:759,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:759,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:760,1
    - Dst: brpc::policy::ParseRpcMessage
      Src: /src/brpc/src/brpc/stream.cpp:762,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/stream.cpp:763,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:764,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:765,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/stream.cpp:768,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:770,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:771,1
    - Dst: PostponeEOF
      Src: /src/brpc/src/brpc/stream.cpp:774,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:775,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:776,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:777,1
    - Dst: brpc::ProcessRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:779,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - response_buffer
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 758
    functionDepth: 8
    functionLinenumber: 758
    functionLinenumberEnd: 780
    functionName: brpc::Stream::HandleRpcResponse
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - brpc::Stream::Close
    - butil::gettimeofday_us
    - CHECK
    - PostponeEOF
    - ReAddress
    - brpc::policy::ParseRpcMessage
    - IsInitialized
    - ParseResult::message
    - brpc::ProcessRpcResponse
    - ParseResult::is_ok
    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:785,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:788,1
    - Dst: Stream*::AppendIfNotFull
      Src: /src/brpc/src/brpc/stream.cpp:789,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - stream_id
    - message
    - options
    argTypes:
    - StreamId
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 782
    functionDepth: 1
    functionLinenumber: 782
    functionLinenumberEnd: 794
    functionName: brpc::StreamWrite
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 11
    functionsReached:
    - SocketUniquePtr::conn
    - brpc::SetTrackMeAddress
    - Stream*::AppendIfNotFull
    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:799,1
    - Dst: Stream::WritableMeta::WritableMeta
      Src: /src/brpc/src/brpc/stream.cpp:800,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:810,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/stream.cpp:811,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:812,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:816,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:817,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - stream_id
    - due_time
    - arg
    argTypes:
    - StreamId
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 818
      start: 796
    functionDepth: 4
    functionLinenumber: 796
    functionLinenumberEnd: 818
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::conn
    - PLOG
    - brpc::Stream::RunOnWritable
    - brpc::SetTrackMeAddress
    - Stream*::Wait
    - bthread_start_background
    - Stream::WritableMeta::WritableMeta
    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:822,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:825,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:826,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - stream_id
    - due_time
    argTypes:
    - StreamId
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 827
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::conn
    - brpc::SetTrackMeAddress
    - Stream*::Wait
    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:830,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 831
      start: 829
    functionDepth: 2
    functionLinenumber: 829
    functionLinenumberEnd: 831
    functionName: brpc::StreamClose
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 10
    functionsReached:
    - brpc::Stream::SetFailed
    linkageType: ''
    returnType: int
    signature: int StreamClose(StreamId stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:836,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/src/brpc/stream.cpp:840,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - request_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 833
    functionDepth: 1
    functionLinenumber: 833
    functionLinenumberEnd: 846
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 5
    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:850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:851,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:854,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:855,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:865,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:867,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:868,1
    - Dst: _request_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:871,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:872,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: 875
      start: 848
    functionDepth: 5
    functionLinenumber: 848
    functionLinenumberEnd: 875
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 5
    functionsReached:
    - _request_streams::empty
    - _request_streams::push_back
    - LOG
    - brpc::empty
    - brpc::Stream::Create
    - brpc::Stream::SetFailed
    - push_back
    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:880,1
    - Dst: brpc::StreamAccept
      Src: /src/brpc/src/brpc/stream.cpp:884,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/stream.cpp:888,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:889,1
    - Dst: Controller::_response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:891,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:892,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - response_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 897
      start: 877
    functionDepth: 2
    functionLinenumber: 877
    functionLinenumberEnd: 897
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - StreamIds::size
    - brpc::Stream::SetFailed
    - LOG
    - brpc::StreamAccept
    - Controller::_response_streams::clear
    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:901,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:902,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:906,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:907,1
    - Dst: has_remote_stream
      Src: /src/brpc/src/brpc/stream.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:911,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:919,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:920,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:921,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:925,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:926,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:927,1
    - Dst: StreamSettings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:929,1
    - Dst: StreamSettings::clear_extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:931,1
    - Dst: _remote_stream_settings::extra_stream_ids_size
      Src: /src/brpc/src/brpc/stream.cpp:932,1
    - Dst: StreamSettings::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:933,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:933,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:935,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:936,1
    - Dst: _response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:937,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:938,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:939,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:942,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:943,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 3
    argNames:
    - ' response_streams'
    - ' cntl'
    - options
    argTypes:
    - StreamIds
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 948
      start: 899
    functionDepth: 5
    functionLinenumber: 899
    functionLinenumberEnd: 948
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - StreamSettings::set_stream_id
    - clear
    - has_remote_stream
    - _response_streams::push_back
    - StreamSettings::clear_extra_stream_ids
    - _response_streams::clear
    - LOG
    - StreamSettings::MergeFrom
    - brpc::empty
    - _remote_stream_settings::extra_stream_ids_size
    - brpc::Stream::Create
    - _response_streams::empty
    - _remote_stream_settings::extra_stream_ids
    - brpc::Stream::SetFailed
    - push_back
    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:62,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:62,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:63,1
    - Dst: bthread_mutex_init
      Src: /src/brpc/src/brpc/stream.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 64
    functionName: brpc::Stream::Stream
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - bthread_mutex_init
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Stream::Stream()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:72,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:73,1
    - Dst: bthread_mutex_destroy
      Src: /src/brpc/src/brpc/stream.cpp:74,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:75,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 66
    functionDepth: 3
    functionLinenumber: 66
    functionLinenumberEnd: 76
    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:81,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:92,1
    - Dst: Stream*::_remote_settings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:99,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:102,1
    - Dst: execution_queue_start
      Src: /src/brpc/src/brpc/stream.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:110,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/stream.cpp:117,1
    - Dst: Stream*::BeforeRecycle
      Src: /src/brpc/src/brpc/stream.cpp:118,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:122,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/stream.cpp:122,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/stream.cpp:123,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:125,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: 127
      start: 78
    functionDepth: 4
    functionLinenumber: 78
    functionLinenumberEnd: 127
    functionName: brpc::Stream::Create
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 4
    functionsReached:
    - Socket::Create
    - Stream*::BeforeRecycle
    - Stream*::id
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - Stream::Stream
    - LOG
    - execution_queue_start
    - bthread_id_list_init
    - CHECK_EQ
    - Stream*::_remote_settings::MergeFrom
    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:131,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:135,1
    - Dst: brpc::policy::SendStreamClose
      Src: /src/brpc/src/brpc/stream.cpp:136,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:137,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:137,1
    - Dst: RemoveStream
      Src: /src/brpc/src/brpc/stream.cpp:141,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:141,1
    - Dst: execution_queue_stop
      Src: /src/brpc/src/brpc/stream.cpp:145,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 129
    functionDepth: 3
    functionLinenumber: 129
    functionLinenumberEnd: 146
    functionName: brpc::Stream::BeforeRecycle
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - bthread_id_list_reset
    - CHECK
    - execution_queue_stop
    - RemoveStream
    - brpc::policy::SendStreamClose
    - id
    linkageType: ''
    returnType: void
    signature: void Stream::BeforeRecycle(Socket *)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:152,1
    - Dst: writable
      Src: /src/brpc/src/brpc/stream.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:157,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:157,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:158,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/stream.cpp:159,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:164,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:169,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:172,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:174,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:177,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/stream.cpp:180,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:182,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:183,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:183,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:184,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:185,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:186,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:187,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:188,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:189,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:190,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:191,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:195,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/stream.cpp:197,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:201,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:202,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:202,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/stream.cpp:203,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:204,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:205,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:207,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/stream.cpp:211,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:212,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 51
    argCount: 2
    argNames:
    - data_list
    - size
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 148
    functionDepth: 2
    functionLinenumber: 148
    functionLinenumberEnd: 215
    functionName: brpc::Stream::CutMessageIntoFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - StreamFrameMeta::set_source_stream_id
    - remote_side
    - CHECK
    - butil::IOBuf*::length
    - writable
    - id
    - butil::IOBuf*::cutn
    - brpc::Stream::WriteToHostSocket
    - clear
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_has_continuation
    - butil::IOBuf::clear
    - brpc::policy::PackStreamMessage
    - butil::IOBuf::length
    - stream_id
    - StreamFrameMeta::set_stream_id
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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:218,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - b
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 217
    functionDepth: 1
    functionLinenumber: 217
    functionLinenumberEnd: 219
    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:222,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 225
    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:230,1
    - Dst: ConnectMeta*::on_connect
      Src: /src/brpc/src/brpc/stream.cpp:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 236
    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:240,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/stream.cpp:240,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:241,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:243,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:244,1
    - Dst: ConnectMeta::ConnectMeta
      Src: /src/brpc/src/brpc/stream.cpp:250,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:254,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:257,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:257,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:258,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:262,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 2
    argNames:
    - ptr
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 238
    functionDepth: 7
    functionLinenumber: 238
    functionLinenumberEnd: 264
    functionName: brpc::Stream::Connect
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - ConnectMeta::ConnectMeta
    - brpc::Stream::RunOnConnect
    - berror
    - CHECK
    - LOG
    - bthread_mutex_lock
    - Socket*::id
    - bthread_mutex_unlock
    - bthread_start_urgent
    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:267,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 268
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:271,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:273,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:277,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:278,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:281,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:283,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:283,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:284,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:286,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:286,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:288,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:289,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:290,1
    - Dst: store
      Src: /src/brpc/src/brpc/stream.cpp:291,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:293,1
    - Dst: brpc::Stream::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:298,1
    - Dst: need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:301,1
    - Dst: load
      Src: /src/brpc/src/brpc/stream.cpp:302,1
    - Dst: brpc::Stream::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:304,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 31
    argCount: 1
    argNames:
    - remote_settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 270
    functionDepth: 7
    functionLinenumber: 270
    functionLinenumberEnd: 307
    functionName: brpc::Stream::SetConnected
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - load
    - brpc::Stream::StartIdleTimer
    - need_feedback
    - stream_id
    - bthread_mutex_lock
    - store
    - brpc::Stream::TriggerOnConnectIfNeed
    - MergeFrom
    - CHECK
    - IsInitialized
    - brpc::Stream::SendFeedback
    - id
    - bthread_mutex_unlock
    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:311,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:315,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/stream.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:318,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:318,1
    - Dst: brpc::Stream::RunOnConnect
      Src: /src/brpc/src/brpc/stream.cpp:319,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:323,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 309
    functionDepth: 5
    functionLinenumber: 309
    functionLinenumberEnd: 324
    functionName: brpc::Stream::TriggerOnConnectIfNeed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - ConnectMeta::ConnectMeta
    - brpc::Stream::RunOnConnect
    - berror
    - LOG
    - bthread_mutex_unlock
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void Stream::TriggerOnConnectIfNeed()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/stream.cpp:333,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:341,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/stream.cpp:344,1
    - Dst: Write
      Src: /src/brpc/src/brpc/stream.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:351,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:351,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:352,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - data
    - options
    argTypes:
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 360
    functionName: brpc::Stream::AppendIfNotFull
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::IOBuf::length
    - berror
    - LOG
    - std::unique_lock::unlock
    - Write
    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:363,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/stream.cpp:365,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:366,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:381,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:381,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:381,1
    - Dst: bthread_id_list_swap
      Src: /src/brpc/src/brpc/stream.cpp:394,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:396,1
    - Dst: bthread_id_list_reset
      Src: /src/brpc/src/brpc/stream.cpp:399,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/stream.cpp:400,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 33
    argCount: 1
    argNames:
    - new_remote_consumed
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 362
    functionDepth: 7
    functionLinenumber: 362
    functionLinenumberEnd: 401
    functionName: brpc::Stream::SetRemoteConsumed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - bthread_id_list_swap
    - bthread_id_list_destroy
    - bthread_id_list_reset
    - CHECK
    - LOG
    - bthread_id_list_init
    - bthread_mutex_lock
    - id
    - bthread_mutex_unlock
    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:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 403
    functionDepth: 2
    functionLinenumber: 403
    functionLinenumberEnd: 408
    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:414,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:422,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:423,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:423,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:424,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:427,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/stream.cpp:429,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: 430
      start: 410
    functionDepth: 6
    functionLinenumber: 410
    functionLinenumberEnd: 430
    functionName: brpc::Stream::TriggerOnWritable
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 1
    functionsReached:
    - berror
    - brpc::Stream::RunOnWritable
    - LOG
    - bthread_id_unlock_and_destroy
    - bthread_timer_del
    - bthread_start_background
    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:433,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/stream.cpp:434,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 432
    functionDepth: 1
    functionLinenumber: 432
    functionLinenumberEnd: 435
    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:439,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:441,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/stream.cpp:446,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:448,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:450,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/stream.cpp:456,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:459,1
    - Dst: reinterpret_cast<void*>
      Src: /src/brpc/src/brpc/stream.cpp:461,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: berror
      Src: /src/brpc/src/brpc/stream.cpp:463,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:464,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:464,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:467,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:470,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:471,1
    - Dst: brpc::Stream::TriggerOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:471,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/src/brpc/stream.cpp:474,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:475,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/stream.cpp:477,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/stream.cpp:477,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: 478
      start: 437
    functionDepth: 7
    functionLinenumber: 437
    functionLinenumberEnd: 478
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - WritableMeta::WritableMeta
    - bthread_mutex_unlock
    - berror
    - bthread_timer_add
    - bthread_mutex_lock
    - brpc::Stream::RunOnWritable
    - CHECK
    - LOG
    - bthread_id_unlock
    - bthread_id_lock
    - bthread_id_list_add
    - CHECK_EQ
    - id
    - reinterpret_cast<void*>
    - bthread_id_create
    - brpc::Stream::TriggerOnWritable
    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:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - arg
    - due_time
    argTypes:
    - void*
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 483
      start: 480
    functionDepth: 1
    functionLinenumber: 480
    functionLinenumberEnd: 483
    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: 487
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 487
    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:492,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/stream.cpp:494,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - due_time
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 497
      start: 489
    functionDepth: 5
    functionLinenumber: 489
    functionLinenumberEnd: 497
    functionName: brpc::Stream::Wait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 4
    functionsReached:
    - brpc::Stream::Wait
    - bthread_id_join
    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:501,1
    - Dst: frame_type
      Src: /src/brpc/src/brpc/stream.cpp:505,1
    - Dst: brpc::Stream::SetRemoteConsumed
      Src: /src/brpc/src/brpc/stream.cpp:507,1
    - Dst: feedback
      Src: /src/brpc/src/brpc/stream.cpp:507,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:508,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/stream.cpp:508,1
    - Dst: append
      Src: /src/brpc/src/brpc/stream.cpp:512,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/stream.cpp:513,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:515,1
    - Dst: swap
      Src: /src/brpc/src/brpc/stream.cpp:516,1
    - Dst: has_continuation
      Src: /src/brpc/src/brpc/stream.cpp:518,1
    - Dst: execution_queue_execute
      Src: /src/brpc/src/brpc/stream.cpp:521,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:523,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:525,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:530,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:531,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:534,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:536,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 41
    argCount: 3
    argNames:
    - ' fm'
    - buf
    - sock
    argTypes:
    - StreamFrameMeta
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 499
    functionDepth: 8
    functionLinenumber: 499
    functionLinenumberEnd: 543
    functionName: brpc::Stream::OnReceived
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - feedback
    - brpc::Stream::Close
    - id
    - brpc::Stream::SetRemoteConsumed
    - butil::IOBuf*::clear
    - has_continuation
    - CHECK
    - execution_queue_execute
    - frame_type
    - append
    - swap
    - brpc::Stream::SetHostSocket
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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: 553
      start: 547
    functionDepth: 0
    functionLinenumber: 547
    functionLinenumberEnd: 553
    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:554,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 554
    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:557,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:558,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 555
    functionDepth: 0
    functionLinenumber: 555
    functionLinenumberEnd: 564
    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:567,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/stream.cpp:570,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 565
    functionDepth: 1
    functionLinenumber: 565
    functionLinenumberEnd: 572
    functionName: brpc::MessageBatcher::push
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - brpc::MessageBatcher::flush
    - butil::IOBuf*::length
    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: 573
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 573
    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: 13
    BranchProfiles: []
    Callsites:
    - Dst: Stream*::StopIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:584,1
    - Dst: is_queue_stopped
      Src: /src/brpc/src/brpc/stream.cpp:585,1
    - Dst: DereferenceSocket
      Src: /src/brpc/src/brpc/stream.cpp:589,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/stream.cpp:596,1
    - Dst: Stream*::_options::handler::on_failed
      Src: /src/brpc/src/brpc/stream.cpp:602,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:602,1
    - Dst: Stream*::_options::handler::on_closed
      Src: /src/brpc/src/brpc/stream.cpp:604,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:604,1
    - Dst: Stream*::HandleRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:618,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:620,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:625,1
    - Dst: Stream*::_options::handler::on_idle_timeout
      Src: /src/brpc/src/brpc/stream.cpp:626,1
    - Dst: Stream*::id
      Src: /src/brpc/src/brpc/stream.cpp:626,1
    - Dst: flush
      Src: /src/brpc/src/brpc/stream.cpp:629,1
    - Dst: total_length
      Src: /src/brpc/src/brpc/stream.cpp:631,1
    - Dst: Stream*::_connected::load
      Src: /src/brpc/src/brpc/stream.cpp:634,1
    - Dst: Stream*::_remote_settings::need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:635,1
    - Dst: Stream*::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:637,1
    - Dst: Stream*::_atomic_local_consumed::fetch_add
      Src: /src/brpc/src/brpc/stream.cpp:642,1
    - Dst: Stream*::_connected::load
      Src: /src/brpc/src/brpc/stream.cpp:643,1
    - Dst: Stream*::_remote_settings::need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:643,1
    - Dst: Stream*::SendFeedback
      Src: /src/brpc/src/brpc/stream.cpp:644,1
    - Dst: Stream*::StartIdleTimer
      Src: /src/brpc/src/brpc/stream.cpp:649,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 51
    argCount: 2
    argNames:
    - meta
    - ' iter'
    argTypes:
    - void*
    - bthread::TaskIterator<butil::IOBuf*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 582
    functionDepth: 1
    functionLinenumber: 582
    functionLinenumberEnd: 651
    functionName: brpc::Stream::Consume
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - Stream*::StopIdleTimer
    - BAIDU_SCOPED_LOCK
    - Stream*::id
    - Stream*::_options::handler::on_closed
    - Stream*::SendFeedback
    - flush
    - Stream*::_connected::load
    - Stream*::HandleRpcResponse
    - Stream*::_options::handler::on_idle_timeout
    - Stream*::_remote_settings::need_feedback
    - Stream*::_atomic_local_consumed::fetch_add
    - Stream*::StartIdleTimer
    - push
    - DereferenceSocket
    - total_length
    - Stream*::_options::handler::on_failed
    - is_queue_stopped
    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:618,1
    - Dst: push
      Src: /src/brpc/src/brpc/stream.cpp:620,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - messages_in_batch
    argTypes:
    - s
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 623
    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:655,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:656,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/stream.cpp:656,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:657,1
    - Dst: StreamFrameMeta::mutable_feedback
      Src: /src/brpc/src/brpc/stream.cpp:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/stream.cpp:659,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/stream.cpp:660,1
    - Dst: brpc::Stream::WriteToHostSocket
      Src: /src/brpc/src/brpc/stream.cpp:661,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - _consumed_bytes
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 662
      start: 653
    functionDepth: 2
    functionLinenumber: 653
    functionLinenumberEnd: 662
    functionName: brpc::Stream::SendFeedback
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::PackStreamMessage
    - stream_id
    - StreamFrameMeta::mutable_feedback
    - brpc::Stream::WriteToHostSocket
    - StreamFrameMeta::set_stream_id
    - StreamFrameMeta::set_frame_type
    - butil::IOBuf::IOBuf
    - StreamFrameMeta::set_source_stream_id
    - id
    linkageType: ''
    returnType: void
    signature: void Stream::SendFeedback(int64_t _consumed_bytes)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::call_once
      Src: /src/brpc/src/brpc/stream.cpp:665,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:667,1
    - Dst: SocketUniquePtr::AddStream
      Src: /src/brpc/src/brpc/stream.cpp:669,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:669,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:670,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:670,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/stream.cpp:673,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 664
    functionDepth: 1
    functionLinenumber: 664
    functionLinenumberEnd: 676
    functionName: brpc::Stream::SetHostSocket
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::AddStream
    - std::call_once
    - SocketUniquePtr::release
    - CHECK
    - 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:679,1
    - Dst: id
      Src: /src/brpc/src/brpc/stream.cpp:679,1
    - Dst: StreamSettings*::set_need_feedback
      Src: /src/brpc/src/brpc/stream.cpp:680,1
    - Dst: StreamSettings*::set_writable
      Src: /src/brpc/src/brpc/stream.cpp:681,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - settings
    argTypes:
    - StreamSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 682
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 682
    functionName: brpc::Stream::FillSettings
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - StreamSettings*::set_stream_id
    - id
    - StreamSettings*::set_writable
    - 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:686,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 684
    functionDepth: 2
    functionLinenumber: 684
    functionLinenumberEnd: 687
    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:693,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/stream.cpp:694,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/stream.cpp:696,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/stream.cpp:698,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 689
    functionDepth: 3
    functionLinenumber: 689
    functionLinenumberEnd: 699
    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:706,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 701
    functionDepth: 2
    functionLinenumber: 701
    functionLinenumberEnd: 708
    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:711,1
    - Dst: bthread_mutex_lock
      Src: /src/brpc/src/brpc/stream.cpp:712,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:714,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:721,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/stream.cpp:722,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:723,1
    - Dst: bthread_mutex_unlock
      Src: /src/brpc/src/brpc/stream.cpp:726,1
    - Dst: brpc::Stream::TriggerOnConnectIfNeed
      Src: /src/brpc/src/brpc/stream.cpp:731,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 710
    functionDepth: 7
    functionLinenumber: 710
    functionLinenumberEnd: 732
    functionName: brpc::Stream::Close
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 3
    functionsReached:
    - va_start
    - brpc::Stream::TriggerOnConnectIfNeed
    - va_end
    - butil::string_vappendf
    - bthread_mutex_lock
    - brpc::Stream::SetFailed
    - bthread_mutex_unlock
    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:736,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:740,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/stream.cpp:742,1
    - Dst: Stream*::Close
      Src: /src/brpc/src/brpc/stream.cpp:743,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:744,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - id
    - error_code
    - reason_fmt
    argTypes:
    - StreamId
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 746
      start: 734
    functionDepth: 1
    functionLinenumber: 734
    functionLinenumberEnd: 746
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 7
    functionsReached:
    - SocketUniquePtr::conn
    - va_start
    - Stream*::Close
    - va_end
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    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:750,1
    - Dst: size
      Src: /src/brpc/src/brpc/stream.cpp:751,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:752,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/stream.cpp:754,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' ids'
    - error_code
    - reason_fmt
    argTypes:
    - StreamIds
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 748
    functionDepth: 1
    functionLinenumber: 748
    functionLinenumberEnd: 756
    functionName: brpc::Stream::SetFailed
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 8
    functionsReached:
    - va_start
    - size
    - brpc::Stream::SetFailed
    - 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:759,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/stream.cpp:759,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:760,1
    - Dst: brpc::policy::ParseRpcMessage
      Src: /src/brpc/src/brpc/stream.cpp:762,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/stream.cpp:763,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:764,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:765,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/stream.cpp:768,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/stream.cpp:770,1
    - Dst: brpc::Stream::Close
      Src: /src/brpc/src/brpc/stream.cpp:771,1
    - Dst: PostponeEOF
      Src: /src/brpc/src/brpc/stream.cpp:774,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/stream.cpp:775,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:776,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/stream.cpp:777,1
    - Dst: brpc::ProcessRpcResponse
      Src: /src/brpc/src/brpc/stream.cpp:779,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 1
    argNames:
    - response_buffer
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 758
    functionDepth: 8
    functionLinenumber: 758
    functionLinenumberEnd: 780
    functionName: brpc::Stream::HandleRpcResponse
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 0
    functionsReached:
    - brpc::Stream::Close
    - butil::gettimeofday_us
    - CHECK
    - PostponeEOF
    - ReAddress
    - brpc::policy::ParseRpcMessage
    - IsInitialized
    - ParseResult::message
    - brpc::ProcessRpcResponse
    - ParseResult::is_ok
    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:785,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:788,1
    - Dst: Stream*::AppendIfNotFull
      Src: /src/brpc/src/brpc/stream.cpp:789,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - stream_id
    - message
    - options
    argTypes:
    - StreamId
    - butil::IOBuf
    - StreamWriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 794
      start: 782
    functionDepth: 1
    functionLinenumber: 782
    functionLinenumberEnd: 794
    functionName: brpc::StreamWrite
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 11
    functionsReached:
    - SocketUniquePtr::conn
    - brpc::SetTrackMeAddress
    - Stream*::AppendIfNotFull
    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:799,1
    - Dst: Stream::WritableMeta::WritableMeta
      Src: /src/brpc/src/brpc/stream.cpp:800,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/stream.cpp:810,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/stream.cpp:811,1
    - Dst: brpc::Stream::RunOnWritable
      Src: /src/brpc/src/brpc/stream.cpp:812,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:816,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:817,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - stream_id
    - due_time
    - arg
    argTypes:
    - StreamId
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 818
      start: 796
    functionDepth: 4
    functionLinenumber: 796
    functionLinenumberEnd: 818
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::conn
    - PLOG
    - brpc::Stream::RunOnWritable
    - brpc::SetTrackMeAddress
    - Stream*::Wait
    - bthread_start_background
    - Stream::WritableMeta::WritableMeta
    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:822,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/stream.cpp:825,1
    - Dst: Stream*::Wait
      Src: /src/brpc/src/brpc/stream.cpp:826,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - stream_id
    - due_time
    argTypes:
    - StreamId
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 827
    functionName: brpc::StreamWait
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::conn
    - brpc::SetTrackMeAddress
    - Stream*::Wait
    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:830,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 831
      start: 829
    functionDepth: 2
    functionLinenumber: 829
    functionLinenumberEnd: 831
    functionName: brpc::StreamClose
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 10
    functionsReached:
    - brpc::Stream::SetFailed
    linkageType: ''
    returnType: int
    signature: int StreamClose(StreamId stream_id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:836,1
    - Dst: brpc::StreamCreate
      Src: /src/brpc/src/brpc/stream.cpp:840,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - request_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 833
    functionDepth: 1
    functionLinenumber: 833
    functionLinenumberEnd: 846
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 6
    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:850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:851,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:854,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:855,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:865,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:867,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:868,1
    - Dst: _request_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:871,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:872,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: 875
      start: 848
    functionDepth: 5
    functionLinenumber: 848
    functionLinenumberEnd: 875
    functionName: brpc::StreamCreate
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 6
    functionsReached:
    - _request_streams::empty
    - _request_streams::push_back
    - LOG
    - brpc::empty
    - brpc::Stream::Create
    - brpc::Stream::SetFailed
    - push_back
    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:880,1
    - Dst: brpc::StreamAccept
      Src: /src/brpc/src/brpc/stream.cpp:884,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/stream.cpp:888,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:889,1
    - Dst: Controller::_response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:891,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:892,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 3
    argNames:
    - response_stream
    - cntl
    - options
    argTypes:
    - StreamId*
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 897
      start: 877
    functionDepth: 2
    functionLinenumber: 877
    functionLinenumberEnd: 897
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 4
    functionsReached:
    - StreamIds::size
    - brpc::Stream::SetFailed
    - LOG
    - brpc::StreamAccept
    - Controller::_response_streams::clear
    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:901,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:902,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/stream.cpp:906,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:907,1
    - Dst: has_remote_stream
      Src: /src/brpc/src/brpc/stream.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:911,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:919,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:920,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:921,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:925,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:926,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:927,1
    - Dst: StreamSettings::MergeFrom
      Src: /src/brpc/src/brpc/stream.cpp:929,1
    - Dst: StreamSettings::clear_extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:931,1
    - Dst: _remote_stream_settings::extra_stream_ids_size
      Src: /src/brpc/src/brpc/stream.cpp:932,1
    - Dst: StreamSettings::set_stream_id
      Src: /src/brpc/src/brpc/stream.cpp:933,1
    - Dst: _remote_stream_settings::extra_stream_ids
      Src: /src/brpc/src/brpc/stream.cpp:933,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/stream.cpp:935,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/stream.cpp:936,1
    - Dst: _response_streams::clear
      Src: /src/brpc/src/brpc/stream.cpp:937,1
    - Dst: clear
      Src: /src/brpc/src/brpc/stream.cpp:938,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/stream.cpp:939,1
    - Dst: _response_streams::push_back
      Src: /src/brpc/src/brpc/stream.cpp:942,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/stream.cpp:943,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 40
    argCount: 3
    argNames:
    - ' response_streams'
    - ' cntl'
    - options
    argTypes:
    - StreamIds
    - Controller
    - StreamOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 948
      start: 899
    functionDepth: 5
    functionLinenumber: 899
    functionLinenumberEnd: 948
    functionName: brpc::StreamAccept
    functionSourceFile: /src/brpc/src/brpc/stream.cpp
    functionUses: 4
    functionsReached:
    - StreamSettings::set_stream_id
    - clear
    - has_remote_stream
    - _response_streams::push_back
    - StreamSettings::clear_extra_stream_ids
    - _response_streams::clear
    - LOG
    - StreamSettings::MergeFrom
    - brpc::empty
    - _remote_stream_settings::extra_stream_ids_size
    - brpc::Stream::Create
    - _response_streams::empty
    - _remote_stream_settings::extra_stream_ids
    - brpc::Stream::SetFailed
    - push_back
    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:128,1
    - Dst: brpc::SharedLoadBalancer::SelectServer
      Src: /src/brpc/src/brpc/load_balancer.h:130,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - LoadBalancer::SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 131
    functionName: brpc::SharedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::ExposeLB
    - brpc::SharedLoadBalancer::SelectServer
    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:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - LoadBalancer::CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 133
    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:136,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: brpc::SharedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - brpc::SharedLoadBalancer::AddServer
    - fetch_add
    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:143,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::SharedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - fetch_sub
    - brpc::SharedLoadBalancer::RemoveServer
    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:151,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: brpc::SharedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - fetch_add
    - brpc::SharedLoadBalancer::AddServersInBatch
    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:159,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: brpc::SharedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 1
    functionsReached:
    - fetch_sub
    - brpc::SharedLoadBalancer::RemoveServersInBatch
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    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:128,1
    - Dst: brpc::SharedLoadBalancer::SelectServer
      Src: /src/brpc/src/brpc/load_balancer.h:130,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - LoadBalancer::SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 131
    functionName: brpc::SharedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::ExposeLB
    - brpc::SharedLoadBalancer::SelectServer
    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:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - LoadBalancer::CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 133
    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:136,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:137,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: brpc::SharedLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - brpc::SharedLoadBalancer::AddServer
    - fetch_add
    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:143,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:144,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' server'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::SharedLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - fetch_sub
    - brpc::SharedLoadBalancer::RemoveServer
    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:151,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.h:153,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 150
    functionDepth: 1
    functionLinenumber: 150
    functionLinenumberEnd: 156
    functionName: brpc::SharedLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - fetch_add
    - brpc::SharedLoadBalancer::AddServersInBatch
    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:159,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/load_balancer.h:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 164
    functionName: brpc::SharedLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/load_balancer.h
    functionUses: 2
    functionsReached:
    - fetch_sub
    - brpc::SharedLoadBalancer::RemoveServersInBatch
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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:188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 187
    functionDepth: 1
    functionLinenumber: 187
    functionLinenumberEnd: 189
    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
    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::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    linkageType: ''
    returnType: void
    signature: void NsheadService::NsheadService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/nshead_service.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - NsheadServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: brpc::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    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: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    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:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    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:49,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/nshead_service.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:54,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/nshead_service.cpp:55,1
    - Dst: data
      Src: /src/brpc/src/brpc/nshead_service.cpp:55,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:55,1
    - Dst: std::string::push_back
      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: brpc::NsheadService::Expose
      Src: /src/brpc/src/brpc/nshead_service.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 59
    functionName: brpc::NsheadService::Expose
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 1
    functionsReached:
    - brpc::NsheadService::Expose
    - std::string::append
    - std::string::push_back
    - butil::class_name_str
    - std::string::reserve
    - data
    - size
    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
    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::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    linkageType: ''
    returnType: void
    signature: void NsheadService::NsheadService()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/nshead_service.cpp:35,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - NsheadServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 37
    functionName: brpc::NsheadService::NsheadService
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    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: 42
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 42
    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:45,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 46
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 46
    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:49,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/nshead_service.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:54,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/nshead_service.cpp:55,1
    - Dst: data
      Src: /src/brpc/src/brpc/nshead_service.cpp:55,1
    - Dst: size
      Src: /src/brpc/src/brpc/nshead_service.cpp:55,1
    - Dst: std::string::push_back
      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: brpc::NsheadService::Expose
      Src: /src/brpc/src/brpc/nshead_service.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 48
    functionDepth: 1
    functionLinenumber: 48
    functionLinenumberEnd: 59
    functionName: brpc::NsheadService::Expose
    functionSourceFile: /src/brpc/src/brpc/nshead_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::NsheadService::Expose
    - std::string::append
    - std::string::push_back
    - butil::class_name_str
    - std::string::reserve
    - data
    - size
    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
    - RELEASE_ASSERT
    - LessThanByName
    - RELEASE_ASSERT_VERBOSE
    - 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: static_cast<unsigned char>
      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:
    - ARRAY_SIZE
    - ::toupper
    - static_cast<unsigned char>
    - strcasecmp
    - pthread_once
    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
    - RELEASE_ASSERT
    - LessThanByName
    - RELEASE_ASSERT_VERBOSE
    - 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: static_cast<unsigned char>
      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:
    - ARRAY_SIZE
    - ::toupper
    - static_cast<unsigned char>
    - strcasecmp
    - pthread_once
    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
    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::ThriftService::ThriftService
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    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: 32
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 32
    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:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 36
    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:43,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: data
      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::push_back
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:47,1
    - Dst: brpc::ThriftService::Expose
      Src: /src/brpc/src/brpc/thrift_service.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ThriftService::Expose
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 1
    functionsReached:
    - std::string::append
    - std::string::push_back
    - brpc::ThriftService::Expose
    - butil::class_name_str
    - std::string::reserve
    - data
    - size
    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
    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::ThriftService::ThriftService
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 0
    functionsReached:
    - MethodStatus::MethodStatus
    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: 32
      start: 29
    functionDepth: 0
    functionLinenumber: 29
    functionLinenumberEnd: 32
    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:35,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 36
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 36
    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:43,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: size
      Src: /src/brpc/src/brpc/thrift_service.cpp:44,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:45,1
    - Dst: data
      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::push_back
      Src: /src/brpc/src/brpc/thrift_service.cpp:46,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/thrift_service.cpp:47,1
    - Dst: brpc::ThriftService::Expose
      Src: /src/brpc/src/brpc/thrift_service.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - ' prefix'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ThriftService::Expose
    functionSourceFile: /src/brpc/src/brpc/thrift_service.cpp
    functionUses: 2
    functionsReached:
    - std::string::append
    - std::string::push_back
    - brpc::ThriftService::Expose
    - butil::class_name_str
    - std::string::reserve
    - data
    - size
    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: 19
    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
    - QuerySplitter::value
    - clear
    - QuerySplitter::key
    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: 13
    functionsReached:
    - brpc::URI::Clear
    - is_valid_char
    - assign
    - set_error
    - is_all_spaces
    - 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: 2
    functionsReached:
    - std::string*::assign
    - brpc::is_all_spaces
    - brpc::SplitHostAndPort
    - LOG
    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:
    - std::string*::append
    - std::string*::push_back
    - brpc::URI::QueryEnd
    - empty
    - 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*::reserve
    - brpc::URI::AppendQueryString
    - std::string*::clear
    - std::string*::push_back
    - empty
    - size
    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:
    - c_str
    - SplitHostAndPort
    - size
    - 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
    - empty
    - key_and_value
    - push_back
    - resize
    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
    - brpc::QueryRemover::key
    - data
    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:
    - size
    - brpc::QueryRemover::key_and_value
    - empty
    - append
    - data
    - push_back
    - brpc::QueryRemover::key
    - resize
    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:
    - std::string*::append
    - std::string*::push_back
    - brpc::size
    - data
    - std::string*::empty
    - butil::back_char
    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: 19
    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
    - QuerySplitter::value
    - clear
    - QuerySplitter::key
    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: 13
    functionsReached:
    - brpc::URI::Clear
    - is_valid_char
    - assign
    - set_error
    - is_all_spaces
    - 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: 2
    functionsReached:
    - std::string*::assign
    - brpc::is_all_spaces
    - brpc::SplitHostAndPort
    - LOG
    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:
    - std::string*::append
    - std::string*::push_back
    - brpc::URI::QueryEnd
    - empty
    - 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*::reserve
    - brpc::URI::AppendQueryString
    - std::string*::clear
    - std::string*::push_back
    - empty
    - size
    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:
    - c_str
    - SplitHostAndPort
    - size
    - 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
    - empty
    - key_and_value
    - push_back
    - resize
    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
    - brpc::QueryRemover::key
    - data
    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:
    - size
    - brpc::QueryRemover::key_and_value
    - empty
    - append
    - data
    - push_back
    - brpc::QueryRemover::key
    - resize
    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:
    - std::string*::append
    - std::string*::push_back
    - brpc::size
    - data
    - std::string*::empty
    - butil::back_char
    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:
    - static_cast<PeriodicTask*>
    - PeriodicTask*::OnDestroyingTask
    - PeriodicTask*::OnTriggeringTask
    - brpc::PeriodicTaskManager::StartTaskAt
    linkageType: ''
    returnType: void
    signature: void * PeriodicTaskThread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/periodic_task.cpp:42,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/periodic_task.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:46,1
    - Dst: static_cast<PeriodicTask*>
      Src: /src/brpc/src/brpc/periodic_task.cpp:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 4
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: brpc::RunPeriodicTaskThread
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached:
    - static_cast<PeriodicTask*>
    - bthread_start_background
    - bthread_attr_set_name
    - LOG
    linkageType: ''
    returnType: void
    signature: void RunPeriodicTaskThread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:54,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/periodic_task.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:61,1
    - Dst: PeriodicTask*::OnDestroyingTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - task
    - ' abstime'
    argTypes:
    - PeriodicTask*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 52
    functionDepth: 3
    functionLinenumber: 52
    functionLinenumberEnd: 65
    functionName: brpc::PeriodicTaskManager::StartTaskAt
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 1
    functionsReached:
    - bthread_timer_add
    - PeriodicTask*::OnDestroyingTask
    - LOG
    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:
    - static_cast<PeriodicTask*>
    - PeriodicTask*::OnDestroyingTask
    - PeriodicTask*::OnTriggeringTask
    - brpc::PeriodicTaskManager::StartTaskAt
    linkageType: ''
    returnType: void
    signature: void * PeriodicTaskThread(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/periodic_task.cpp:42,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/periodic_task.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:46,1
    - Dst: static_cast<PeriodicTask*>
      Src: /src/brpc/src/brpc/periodic_task.cpp:47,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 39
    functionDepth: 4
    functionLinenumber: 39
    functionLinenumberEnd: 50
    functionName: brpc::RunPeriodicTaskThread
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 0
    functionsReached:
    - static_cast<PeriodicTask*>
    - bthread_start_background
    - bthread_attr_set_name
    - LOG
    linkageType: ''
    returnType: void
    signature: void RunPeriodicTaskThread(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:54,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/periodic_task.cpp:58,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/periodic_task.cpp:61,1
    - Dst: PeriodicTask*::OnDestroyingTask
      Src: /src/brpc/src/brpc/periodic_task.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - task
    - ' abstime'
    argTypes:
    - PeriodicTask*
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 52
    functionDepth: 3
    functionLinenumber: 52
    functionLinenumberEnd: 65
    functionName: brpc::PeriodicTaskManager::StartTaskAt
    functionSourceFile: /src/brpc/src/brpc/periodic_task.cpp
    functionUses: 2
    functionsReached:
    - bthread_timer_add
    - PeriodicTask*::OnDestroyingTask
    - LOG
    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
    - strlen
    - strncasecmp
    - brpc::size
    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: 0
    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
    - strlen
    - strncasecmp
    - brpc::size
    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: 0
    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:
    - std::string::append
    - std::string::push_back
    - butil::class_name_str
    - std::string::reserve
    - data
    - size
    - brpc::BaiduMasterService::Expose
    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:
    - std::string::append
    - std::string::push_back
    - butil::class_name_str
    - std::string::reserve
    - data
    - size
    - brpc::BaiduMasterService::Expose
    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: 1
    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: 0
    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: 4
    functionsReached:
    - malloc
    - ExcludedServers::ExcludedServers
    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: 4
    functionsReached:
    - free
    - ExcludedServers*::~ExcludedServers
    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: 4
    functionsReached:
    - malloc
    - ExcludedServers::ExcludedServers
    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: 4
    functionsReached:
    - free
    - ExcludedServers*::~ExcludedServers
    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:
    - begin
    - std::setw
    - end
    - std::ostringstream::fill
    - std::ostringstream::str
    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:
    - brpc::hex_to_int
    - begin
    - std::ostringstream::str
    - end
    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*::data
    - CHECK
    - std::string*::size
    - strtol
    - 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:
    - begin
    - std::setw
    - end
    - std::ostringstream::fill
    - std::ostringstream::str
    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:
    - brpc::hex_to_int
    - begin
    - std::ostringstream::str
    - end
    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*::data
    - CHECK
    - std::string*::size
    - strtol
    - std::string*::empty
    linkageType: ''
    returnType: int64_t
    signature: int64_t ConvertGrpcTimeoutToUS(const std::string* grpc_timeout)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SetTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:105,1
    - Dst: shared_from_this
      Src: /src/brpc/src/brpc/span.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::Span::AsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - shared_from_this
    - SetTlsParentSpan
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    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: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    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:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: brpc::Span::set_ending_tid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ending_tid(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    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: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    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: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    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: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    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: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    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: 134
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 134
    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: 136
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 136
    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: 138
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 138
    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: 140
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 140
    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: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: brpc::Span::is_active
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_active() const
  - 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: brpc::Span::local_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::weak_ptr<Span>
    signature: std::weak_ptr<Span> local_parent() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:153,1
    - Dst: auto::is_active
      Src: /src/brpc/src/brpc/span.h:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 158
    functionName: brpc::Span::tls_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 2
    functionsReached:
    - auto::is_active
    - GetTlsParentSpan
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> tls_parent()
  - 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: 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: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    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: 162
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 162
    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: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    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: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    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: 165
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 165
    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: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: brpc::Span::ending_tid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t ending_tid() 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: '& 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: 168
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 168
    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: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    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: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    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: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    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: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    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: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    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: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    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: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    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: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    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: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    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: 178
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 178
    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: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    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:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.h:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 194
    functionName: brpc::Span::info
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: std::string
    signature: std::string info() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:209,1
    - Dst: std::shared_ptr::get
      Src: /src/brpc/src/brpc/span.h:210,1
    - Dst: ClearTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:211,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: brpc::Span::EndAsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - ClearTlsParentSpan
    - std::shared_ptr::get
    - GetTlsParentSpan
    linkageType: ''
    returnType: void
    signature: void EndAsParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 259
    functionName: brpc::SpanContainer::SpanContainer
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanContainer(const std::shared_ptr<Span>& span)
  - 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: ~SpanContainer()
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SpanContainer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 269
    functionName: '& span() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> & span() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 296
    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:327,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - is_upstream_traced
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 324
    functionDepth: 2
    functionLinenumber: 324
    functionLinenumberEnd: 328
    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: SetTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:105,1
    - Dst: shared_from_this
      Src: /src/brpc/src/brpc/span.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::Span::AsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - shared_from_this
    - SetTlsParentSpan
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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: 122
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 122
    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: 123
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 123
    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:
    - tid
    argTypes:
    - bthread_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 124
    functionName: brpc::Span::set_ending_tid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_ending_tid(bthread_t tid)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' pt'
    argTypes:
    - butil::EndPoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 125
    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: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    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: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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: 128
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 128
    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: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    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: 130
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 130
    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: 132
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 132
    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: 134
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 134
    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: 136
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 136
    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: 138
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 138
    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: 140
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 140
    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: 142
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 142
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 149
    functionName: brpc::Span::is_active
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_active() const
  - 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: brpc::Span::local_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::weak_ptr<Span>
    signature: std::weak_ptr<Span> local_parent() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:153,1
    - Dst: auto::is_active
      Src: /src/brpc/src/brpc/span.h:154,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 158
    functionName: brpc::Span::tls_parent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 2
    functionsReached:
    - auto::is_active
    - GetTlsParentSpan
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> tls_parent()
  - 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: 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: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    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: 162
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 162
    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: 163
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 163
    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: 164
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 164
    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: 165
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 165
    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: 166
      start: 166
    functionDepth: 0
    functionLinenumber: 166
    functionLinenumberEnd: 166
    functionName: brpc::Span::ending_tid
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bthread_t
    signature: bthread_t ending_tid() 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: '& 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: 168
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 168
    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: 169
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 169
    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: 170
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 170
    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: 171
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 171
    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: 172
      start: 172
    functionDepth: 0
    functionLinenumber: 172
    functionLinenumberEnd: 172
    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: 173
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 173
    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: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    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: 175
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 175
    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: 176
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 176
    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: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    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: 178
      start: 178
    functionDepth: 0
    functionLinenumber: 178
    functionLinenumberEnd: 178
    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: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    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:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.h:192,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 191
    functionDepth: 1
    functionLinenumber: 191
    functionLinenumberEnd: 194
    functionName: brpc::Span::info
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    linkageType: ''
    returnType: std::string
    signature: std::string info() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:209,1
    - Dst: std::shared_ptr::get
      Src: /src/brpc/src/brpc/span.h:210,1
    - Dst: ClearTlsParentSpan
      Src: /src/brpc/src/brpc/span.h:211,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: brpc::Span::EndAsParent
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached:
    - ClearTlsParentSpan
    - std::shared_ptr::get
    - GetTlsParentSpan
    linkageType: ''
    returnType: void
    signature: void EndAsParent()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 259
    functionName: brpc::SpanContainer::SpanContainer
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanContainer(const std::shared_ptr<Span>& span)
  - 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: ~SpanContainer()
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~SpanContainer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 269
    functionDepth: 0
    functionLinenumber: 269
    functionLinenumberEnd: 269
    functionName: '& span() const'
    functionSourceFile: /src/brpc/src/brpc/span.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> & span() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 296
    functionDepth: 0
    functionLinenumber: 296
    functionLinenumberEnd: 296
    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:327,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 1
    argNames:
    - is_upstream_traced
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 324
    functionDepth: 2
    functionLinenumber: 324
    functionLinenumberEnd: 328
    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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - cntl
    argTypes:
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: brpc::ChecksumIn
    functionSourceFile: /src/brpc/src/brpc/checksum.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ChecksumIn(const butil::IOBuf* buf, Controller* cntl,\n               const
      butil::IOBuf* attachment = NULL)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - buf
    - cntl
    argTypes:
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 30
    functionName: brpc::ChecksumIn
    functionSourceFile: /src/brpc/src/brpc/checksum.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void ChecksumIn(const butil::IOBuf* buf, Controller* cntl,\n               const
      butil::IOBuf* attachment = NULL)"
  - 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<butil::EndPoint>
    - butil::DefaultHasher<std::string>
    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:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - socket_mode
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - SocketMode
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 95
    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,\n                    SocketMode
      socket_mode,\n                    const HealthCheckOption& hc_option)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:100,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: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    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,\n                    const
      std::shared_ptr<SocketSSLContext>& ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 107
    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)
  - 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: ~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:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - socket_mode
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - SocketMode
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 183
    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,\n               SocketMode socket_mode,\n
      \              const HealthCheckOption& hc_option)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:188,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: 189
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 189
    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,\n               const
      std::shared_ptr<SocketSSLContext>& ssl_ctx)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 194
    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)
  - 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: '& 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<butil::EndPoint>
    - butil::DefaultHasher<std::string>
    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:94,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - socket_mode
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - SocketMode
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 95
    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,\n                    const
      std::shared_ptr<SocketSSLContext>& ssl_ctx,\n                    SocketMode
      socket_mode,\n                    const HealthCheckOption& hc_option)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMapInsert
      Src: /src/brpc/src/brpc/socket_map.h:100,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: 101
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 101
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 13
    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:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 107
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 14
    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: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    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:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 5
    argNames:
    - ' key'
    - id
    - ' ssl_ctx'
    - socket_mode
    - ' hc_option'
    argTypes:
    - SocketMapKey
    - SocketId*
    - std::shared_ptr<SocketSSLContext>
    - SocketMode
    - HealthCheckOption
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 173
    functionDepth: 0
    functionLinenumber: 173
    functionLinenumberEnd: 183
    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,\n               const
      std::shared_ptr<SocketSSLContext>& ssl_ctx,\n               SocketMode socket_mode,\n
      \              const HealthCheckOption& hc_option)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::Insert
      Src: /src/brpc/src/brpc/socket_map.h:188,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: 189
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 189
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 5
    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:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 190
    functionDepth: 0
    functionLinenumber: 190
    functionLinenumberEnd: 194
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.h
    functionUses: 6
    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: 201
      start: 201
    functionDepth: 0
    functionLinenumber: 201
    functionLinenumberEnd: 201
    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: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - UNLIMITED
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:36,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 42
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - UNLIMITED
    - 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: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    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:50,1
    - Dst: std::strlen
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:51,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:51,1
    - Dst: butil::strncasecmp
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:54,1
    - Dst: data
      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
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 2
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 2
    functionsReached:
    - butil::strncasecmp
    - std::strlen
    - brpc::size
    - DCHECK
    - 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:60,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 66
    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:70,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:73,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - CopyToString
    - ResetMaxConcurrency
    - butil::StringToInt
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:83,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:86,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 92
    functionName: AdaptiveMaxConcurrency::operator=(int max_concurrency)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - UNLIMITED
    - ResetMaxConcurrency
    - butil::string_printf
    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:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 101
    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:
    - Dst: CONSTANT
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:105,1
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 111
    functionName: '& AdaptiveMaxConcurrency::type() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - UNLIMITED
    - CONSTANT
    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:115,1
    - Dst: value
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' adaptive_concurrency'
    - ' concurrency'
    argTypes:
    - AdaptiveMaxConcurrency
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 117
    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:
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - UNLIMITED
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::AdaptiveMaxConcurrency()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:36,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 42
    functionName: brpc::AdaptiveMaxConcurrency::AdaptiveMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 1
    functionsReached:
    - UNLIMITED
    - 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: 46
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 46
    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:50,1
    - Dst: std::strlen
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:51,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:51,1
    - Dst: butil::strncasecmp
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:54,1
    - Dst: data
      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
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' s1'
    - s2
    argTypes:
    - butil::StringPiece
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 48
    functionDepth: 2
    functionLinenumber: 48
    functionLinenumberEnd: 55
    functionName: brpc::CompareStringPieceWithoutCase
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 2
    functionsReached:
    - butil::strncasecmp
    - std::strlen
    - brpc::size
    - DCHECK
    - 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:60,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:63,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 66
    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:70,1
    - Dst: CopyToString
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:73,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:77,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 79
    functionName: AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - CopyToString
    - ResetMaxConcurrency
    - butil::StringToInt
    linkageType: ''
    returnType: void
    signature: void AdaptiveMaxConcurrency::operator=(const butil::StringPiece& value)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:83,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:86,1
    - Dst: ResetMaxConcurrency
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:90,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 92
    functionName: AdaptiveMaxConcurrency::operator=(int max_concurrency)
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - UNLIMITED
    - ResetMaxConcurrency
    - butil::string_printf
    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:99,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - ' value'
    argTypes:
    - TimeoutConcurrencyConf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 101
    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:
    - Dst: CONSTANT
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:105,1
    - Dst: UNLIMITED
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:107,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 111
    functionName: '& AdaptiveMaxConcurrency::type() const'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.cpp
    functionUses: 0
    functionsReached:
    - UNLIMITED
    - CONSTANT
    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:115,1
    - Dst: value
      Src: /src/brpc/src/brpc/adaptive_max_concurrency.cpp:116,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' adaptive_concurrency'
    - ' concurrency'
    argTypes:
    - AdaptiveMaxConcurrency
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 117
    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: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    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: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    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: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    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: 81
      start: 81
    functionDepth: 0
    functionLinenumber: 81
    functionLinenumberEnd: 81
    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
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/stream_impl.h:118,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/stream_impl.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 139
    functionName: brpc::SocketConnection
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    - __format__
    - butil::atomic::atomic
    - Stream
    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
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/stream_impl.h:118,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/stream_impl.h:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 139
    functionName: brpc::SocketConnection
    functionSourceFile: /src/brpc/src/brpc/stream_impl.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    - __format__
    - butil::atomic::atomic
    - Stream
    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:
    - BAIDU_SCOPED_LOCK
    - LOG
    - brpc::support_client
    - valid::load
    - valid::store
    - brpc::support_server
    - brpc::get_protocol_map
    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:
    - valid::load
    - LOG
    - brpc::get_protocol_map
    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>*::clear
    - valid::load
    - std::vector<Protocol>*::push_back
    - brpc::get_protocol_map
    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:
    - valid::load
    - std::vector<std::pair<ProtocolType, Protocol> >*::emplace_back
    - std::vector<std::pair<ProtocolType, Protocol> >*::clear
    - brpc::get_protocol_map
    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
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    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
    - strlen
    - strncasecmp
    - brpc::size
    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:
    - brpc::CompareStringPieceWithoutCase
    - LOG
    - brpc::GlobalInitializeOrDie
    - valid::load
    - std::ostringstream::str
    - static_cast<ProtocolType>
    - brpc::get_protocol_map
    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::Message*::ParseFromCodedStream
    - google::protobuf::io::CodedInputStream::SetTotalBytesLimit
    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
    - data
    - brpc::size
    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*::ErrorText
    - Controller*::ErrorCode
    - 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:
    - BAIDU_SCOPED_LOCK
    - LOG
    - brpc::support_client
    - valid::load
    - valid::store
    - brpc::support_server
    - brpc::get_protocol_map
    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:
    - valid::load
    - LOG
    - brpc::get_protocol_map
    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>*::clear
    - valid::load
    - std::vector<Protocol>*::push_back
    - brpc::get_protocol_map
    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:
    - valid::load
    - std::vector<std::pair<ProtocolType, Protocol> >*::emplace_back
    - std::vector<std::pair<ProtocolType, Protocol> >*::clear
    - brpc::get_protocol_map
    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
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    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
    - strlen
    - strncasecmp
    - brpc::size
    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:
    - brpc::CompareStringPieceWithoutCase
    - LOG
    - brpc::GlobalInitializeOrDie
    - valid::load
    - std::ostringstream::str
    - static_cast<ProtocolType>
    - brpc::get_protocol_map
    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::Message*::ParseFromCodedStream
    - google::protobuf::io::CodedInputStream::SetTotalBytesLimit
    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
    - data
    - brpc::size
    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*::ErrorText
    - Controller*::ErrorCode
    - 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: 88
    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: 88
    functionsReached:
    - brpc::RedisRequest::MergeFrom
    - brpc::RedisRequest::SharedCtor
    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:
    - static_cast<int>
    - size
    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: 78
    functionsReached:
    - butil::Status::ok
    - CHECK
    - RedisCommandNoFormat
    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: 10
    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:
    - va_start
    - va_end
    - CHECK
    - butil::Status::ok
    - RedisCommandFormatV
    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:
    - RedisCommandFormatV
    - CHECK
    - 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::clear
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - butil::IOBuf::cut_until
    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: 84
    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: 84
    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:
    - clear
    - Reset
    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
    - DCHECK_EQ
    - RedisReply::RedisReply
    - CopyFromDifferentArena
    - CopyFromSameArena
    - CHECK_NE
    - reply
    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:
    - brpc::RedisResponse::Swap
    - 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
    - size
    - LOG
    - RedisReply::RedisReply
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::ConsumePartialIOBuf
    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: 1
    argNames:
    - rs
    argTypes:
    - RedisService*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 377
    functionName: brpc::RedisConnContext::RedisConnContext
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::RedisConnContext(const RedisService* rs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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:383,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 386
    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:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Destroyable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 388
    functionDepth: 2
    functionLinenumber: 388
    functionLinenumberEnd: 393
    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: 88
    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: 88
    functionsReached:
    - brpc::RedisRequest::MergeFrom
    - brpc::RedisRequest::SharedCtor
    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:
    - static_cast<int>
    - size
    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: 78
    functionsReached:
    - butil::Status::ok
    - CHECK
    - RedisCommandNoFormat
    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: 10
    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:
    - va_start
    - va_end
    - CHECK
    - butil::Status::ok
    - RedisCommandFormatV
    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:
    - RedisCommandFormatV
    - CHECK
    - 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::clear
    - butil::IOBuf::empty
    - butil::IOBuf::IOBuf
    - butil::IOBuf::cut_until
    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: 84
    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: 84
    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:
    - clear
    - Reset
    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
    - DCHECK_EQ
    - RedisReply::RedisReply
    - CopyFromDifferentArena
    - CopyFromSameArena
    - CHECK_NE
    - reply
    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:
    - brpc::RedisResponse::Swap
    - 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
    - size
    - LOG
    - RedisReply::RedisReply
    - brpc::RedisResponse::reply_size
    - brpc::RedisResponse::ConsumePartialIOBuf
    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: 1
    argNames:
    - rs
    argTypes:
    - RedisService*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 377
      start: 374
    functionDepth: 0
    functionLinenumber: 374
    functionLinenumberEnd: 377
    functionName: brpc::RedisConnContext::RedisConnContext
    functionSourceFile: /src/brpc/src/brpc/redis.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisConnContext::RedisConnContext(const RedisService* rs)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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:383,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 386
    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:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Destroyable*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 388
    functionDepth: 2
    functionLinenumber: 388
    functionLinenumberEnd: 393
    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:
    - PartitionChannelOptions::response_merger::get
    - AddChannel
    - brpc::PartitionChannelBase::Init
    - LOG
    - SubChannel::SubChannel
    - brpc::ParallelChannel::Init
    - PartitionChannelOptions::call_mapper::get
    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
    - LOG
    - tmp::reserve
    - ParseFromTag
    - size
    - tmp::capacity
    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::PartitionServersIntoTemps
    - tmp::empty
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::partition_count
    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::PartitionServersIntoTemps
    - tmp::empty
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::partition_count
    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: 1
    functionLinenumber: 198
    functionLinenumberEnd: 209
    functionName: PartitionChannel::~PartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - reset
    - RemoveWatcher
    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:
    - PartitionChannelBase::PartitionChannelBase
    - brpc::PartitionChannel::Init
    - LOG
    - GetNamingServiceThread
    - AddWatcher
    - GlobalInitializeOrDie
    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:
    - Controller*::SetFailed
    - static_cast<Controller*>
    - brpc::PartitionChannel::CallMethod
    - google::protobuf::Closure*::Run
    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:
    - CHECK_EQ
    - begin
    - AddChannel
    - SubPartitionChannel*::tmp::reserve
    - end
    - SubPartitionChannel*::tmp::push_back
    - SubPartitionChannel::SubPartitionChannel
    - LOG
    - PartChanMap::const_iterator::second::tmp::clear
    - SubPartitionChannel*::partition_count
    - SubPartitionChannel*::Init
    - ParseFromTag
    - seek
    - c_str
    - size
    - SubPartitionChannel*::tmp::capacity
    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:
    - begin
    - end
    - PartChanMap::const_iterator::second::tmp::empty
    - PartChanMap::const_iterator::second::AddServersInBatch
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    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:
    - begin
    - SubPartitionChannel*::tmp::empty
    - std::vector::push_back
    - end
    - SubPartitionChannel*::RemoveServersInBatch
    - SubPartitionChannel*::partition_count
    - RemoveAndDestroyChannel
    - std::vector::size
    - erase
    - CHECK_EQ
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    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: 1
    functionLinenumber: 427
    functionLinenumberEnd: 438
    functionName: DynamicPartitionChannel::~DynamicPartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - reset
    - RemoveWatcher
    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:
    - LOG
    - GetNamingServiceThread
    - AddWatcher
    - brpc::DynamicPartitionChannel::Init
    - GlobalInitializeOrDie
    - Partitioner::Partitioner
    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:
    - PartitionChannelOptions::response_merger::get
    - AddChannel
    - brpc::PartitionChannelBase::Init
    - LOG
    - SubChannel::SubChannel
    - brpc::ParallelChannel::Init
    - PartitionChannelOptions::call_mapper::get
    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
    - LOG
    - tmp::reserve
    - ParseFromTag
    - size
    - tmp::capacity
    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::PartitionServersIntoTemps
    - tmp::empty
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::partition_count
    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::PartitionServersIntoTemps
    - tmp::empty
    - brpc::PartitionChannelBase::lb
    - brpc::PartitionChannelBase::partition_count
    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: 1
    functionLinenumber: 198
    functionLinenumberEnd: 209
    functionName: PartitionChannel::~PartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - reset
    - RemoveWatcher
    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:
    - PartitionChannelBase::PartitionChannelBase
    - brpc::PartitionChannel::Init
    - LOG
    - GetNamingServiceThread
    - AddWatcher
    - GlobalInitializeOrDie
    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:
    - Controller*::SetFailed
    - static_cast<Controller*>
    - brpc::PartitionChannel::CallMethod
    - google::protobuf::Closure*::Run
    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:
    - CHECK_EQ
    - begin
    - AddChannel
    - SubPartitionChannel*::tmp::reserve
    - end
    - SubPartitionChannel*::tmp::push_back
    - SubPartitionChannel::SubPartitionChannel
    - LOG
    - PartChanMap::const_iterator::second::tmp::clear
    - SubPartitionChannel*::partition_count
    - SubPartitionChannel*::Init
    - ParseFromTag
    - seek
    - c_str
    - size
    - SubPartitionChannel*::tmp::capacity
    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:
    - begin
    - end
    - PartChanMap::const_iterator::second::tmp::empty
    - PartChanMap::const_iterator::second::AddServersInBatch
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    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:
    - begin
    - SubPartitionChannel*::tmp::empty
    - std::vector::push_back
    - end
    - SubPartitionChannel*::RemoveServersInBatch
    - SubPartitionChannel*::partition_count
    - RemoveAndDestroyChannel
    - std::vector::size
    - erase
    - CHECK_EQ
    - brpc::DynamicPartitionChannel::Partitioner::PartitionServersIntoTemps
    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: 1
    functionLinenumber: 427
    functionLinenumberEnd: 438
    functionName: DynamicPartitionChannel::~DynamicPartitionChannel()
    functionSourceFile: /src/brpc/src/brpc/partition_channel.cpp
    functionUses: 0
    functionsReached:
    - reset
    - RemoveWatcher
    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:
    - LOG
    - GetNamingServiceThread
    - AddWatcher
    - brpc::DynamicPartitionChannel::Init
    - GlobalInitializeOrDie
    - Partitioner::Partitioner
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 52
    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:55,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 60
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - Socket*::health_check_count
    - LOG
    - brpc::schan::SubChannel::CheckHealth
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 65
    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:69,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    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: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    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:79,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:79,1
    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: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - user
    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: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    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: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    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: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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:140,1
    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: ~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:166,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:166,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:167,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - end
    - clear
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    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:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:186,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:191,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:203,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:213,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:220,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:222,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 3
    argNames:
    - sub_channel
    - ' subopt'
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::SubChannelOptions
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 232
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::ReleaseHCRelatedReference
    - find
    - BAIDU_SCOPED_LOCK
    - end
    - Socket::Create
    - ServerId
    - SocketUniquePtr::get
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - AddServer
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                const
      SelectiveChannel::SubChannelOptions& subopt,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:239,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:243,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:247,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - ' handle'
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 252
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - erase
    - CHECK_EQ
    - RemoveServer
    - SocketUniquePtr::ReleaseAdditionalReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(const SelectiveChannel::ChannelHandle&
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 263
    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:266,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:267,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:268,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:269,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 275
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelToIdMap::const_iterator::second::Failed
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::CheckHealth
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:279,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:281,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:284,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:285,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:286,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:289,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 291
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - 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: 5
    argNames:
    - cntl
    - request
    - response
    - ' lb'
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - butil::intrusive_ptr<SharedLoadBalancer>
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 309
    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               const
      butil::intrusive_ptr<SharedLoadBalancer>& lb,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: get
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:316,1
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: ChannelBalancer*::SelectChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:332,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:334,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:340,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:346,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:351,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_protocol
      Src: /src/brpc/src/brpc/selective_channel.cpp:357,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:362,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 365
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_code
    - brpc::schan::Sender::PopFree
    - request_attachment
    - SetFailed
    - Controller*::set_log_id
    - ChannelBalancer::SelectOut::fake_sock::id
    - CHECK
    - request_compress_type
    - current_id
    - timeout_ms
    - Controller*::set_request_compress_type
    - Controller*::http_request
    - request_code
    - Controller*::set_type_of_service
    - get
    - log_id
    - Controller*::request_attachment
    - http_request
    - ChannelBalancer::SelectOut::channel
    - static_cast<ChannelBalancer*>
    - has_request_code
    - berror
    - Controller*::set_connection_type
    - request_protocol
    - ChannelBalancer*::SelectChannel
    - connection_type
    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:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:373,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:383,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:392,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:395,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:401,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:406,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 407
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - Controller*::_response::GetReflection
    - berror
    - Controller*::set_connection_type
    - Failed
    - LOG
    - PushFree
    - Controller*::ErrorCode
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - response_attachment
    - Controller*::SetFailed
    - Controller*::response_attachment
    - ErrorCode
    - connection_type
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:413,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:416,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:421,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 409
    functionDepth: 5
    functionLinenumber: 409
    functionLinenumberEnd: 426
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    - sub_done::_cntl::call_id
    - call_id
    - bthread_id_unlock
    - brpc::schan::Sender::Clear
    - CHECK_EQ
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:439,1
    - Dst: reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:441,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 428
    functionDepth: 6
    functionLinenumber: 428
    functionLinenumberEnd: 446
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - Resource
    - brpc::schan::Sender::Run
    - call_id
    - bthread_id_unlock_and_destroy
    - reset
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:452,1
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:458,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:459,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:463,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:464,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:468,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 476
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - Resource::response::Clear
    - Resource
    - SubDone::SubDone
    - CHECK
    - New
    - Reset
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:482,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 490
    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:497,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 505
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 52
    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:55,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 60
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - Socket*::health_check_count
    - LOG
    - brpc::schan::SubChannel::CheckHealth
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 65
    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:69,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    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: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    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:79,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:79,1
    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: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - user
    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: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    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: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    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: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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:140,1
    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: ~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:166,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:166,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:167,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - end
    - clear
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    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:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:186,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:191,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:203,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:213,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:220,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:222,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 3
    argNames:
    - sub_channel
    - ' subopt'
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::SubChannelOptions
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 232
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::ReleaseHCRelatedReference
    - find
    - BAIDU_SCOPED_LOCK
    - end
    - Socket::Create
    - ServerId
    - SocketUniquePtr::get
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - AddServer
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                const
      SelectiveChannel::SubChannelOptions& subopt,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:239,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:243,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:247,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - ' handle'
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 252
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - erase
    - CHECK_EQ
    - RemoveServer
    - SocketUniquePtr::ReleaseAdditionalReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(const SelectiveChannel::ChannelHandle&
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 263
    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:266,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:267,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:268,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:269,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 275
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelToIdMap::const_iterator::second::Failed
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::CheckHealth
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:279,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:281,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:284,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:285,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:286,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:289,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 291
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - 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: 5
    argNames:
    - cntl
    - request
    - response
    - ' lb'
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - butil::intrusive_ptr<SharedLoadBalancer>
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 309
    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               const
      butil::intrusive_ptr<SharedLoadBalancer>& lb,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: get
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:316,1
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: ChannelBalancer*::SelectChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:332,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:334,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:340,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:346,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:351,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_protocol
      Src: /src/brpc/src/brpc/selective_channel.cpp:357,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:362,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 311
    functionDepth: 2
    functionLinenumber: 311
    functionLinenumberEnd: 365
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_code
    - brpc::schan::Sender::PopFree
    - request_attachment
    - SetFailed
    - Controller*::set_log_id
    - ChannelBalancer::SelectOut::fake_sock::id
    - CHECK
    - request_compress_type
    - current_id
    - timeout_ms
    - Controller*::set_request_compress_type
    - Controller*::http_request
    - request_code
    - Controller*::set_type_of_service
    - get
    - log_id
    - Controller*::request_attachment
    - http_request
    - ChannelBalancer::SelectOut::channel
    - static_cast<ChannelBalancer*>
    - has_request_code
    - berror
    - Controller*::set_connection_type
    - request_protocol
    - ChannelBalancer*::SelectChannel
    - connection_type
    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:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:373,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:383,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:392,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:395,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:401,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:406,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 407
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - Controller*::_response::GetReflection
    - berror
    - Controller*::set_connection_type
    - Failed
    - LOG
    - PushFree
    - Controller*::ErrorCode
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - response_attachment
    - Controller*::SetFailed
    - Controller*::response_attachment
    - ErrorCode
    - connection_type
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:413,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:416,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:421,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 409
    functionDepth: 5
    functionLinenumber: 409
    functionLinenumberEnd: 426
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - bthread_id_error
    - sub_done::_cntl::call_id
    - call_id
    - bthread_id_unlock
    - brpc::schan::Sender::Clear
    - CHECK_EQ
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:439,1
    - Dst: reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:441,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 428
    functionDepth: 6
    functionLinenumber: 428
    functionLinenumberEnd: 446
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - Resource
    - brpc::schan::Sender::Run
    - call_id
    - bthread_id_unlock_and_destroy
    - reset
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:452,1
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:458,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:459,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:463,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:464,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:468,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 476
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - Resource::response::Clear
    - Resource
    - SubDone::SubDone
    - CHECK
    - New
    - Reset
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:482,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 490
    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:497,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 505
    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:511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sender
    - index
    argTypes:
    - RPCSender*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 512
    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: 516
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 516
    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: 518
      start: 518
    functionDepth: 0
    functionLinenumber: 518
    functionLinenumberEnd: 518
    functionName: brpc::SelectiveChannel::SelectiveChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 30
    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: 520
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 520
    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:524,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:525,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:526,1
    - Dst: schan::ChannelBalancer::ChannelBalancer
      Src: /src/brpc/src/brpc/selective_channel.cpp:529,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:531,1
    - Dst: schan::ChannelBalancer*::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:535,1
    - Dst: _lb::reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:539,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - lb_name
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 550
    functionName: brpc::SelectiveChannel::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 26
    functionsReached:
    - schan::ChannelBalancer*::Init
    - LOG
    - _lb::reset
    - brpc::SelectiveChannel::initialized
    - GlobalInitializeOrDie
    - schan::ChannelBalancer::ChannelBalancer
    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: 554
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 554
    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:560,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:562,1
    - Dst: schan::ChannelBalancer*::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:565,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - sub_channel
    - ' option'
    - handle
    argTypes:
    - ChannelBase*
    - SubChannelOptions
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 566
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 24
    functionsReached:
    - _lb::get
    - schan::ChannelBalancer*::AddChannel
    - static_cast<schan::ChannelBalancer*>
    - LOG
    linkageType: ''
    returnType: int
    signature: "int SelectiveChannel::AddChannel(ChannelBase* sub_channel,\n                                 const
      SubChannelOptions& option,\n                                 ChannelHandle*
      handle)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:570,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:570,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:572,1
    - Dst: schan::ChannelBalancer*::RemoveAndDestroyChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' handle'
    argTypes:
    - ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 576
    functionName: brpc::SelectiveChannel::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - _lb::get
    - schan::ChannelBalancer*::RemoveAndDestroyChannel
    - static_cast<schan::ChannelBalancer*>
    - LOG
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::RemoveAndDestroyChannel(const ChannelHandle&
      handle)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:584,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:585,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:586,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:591,1
    - Dst: schan::Sender::Sender
      Src: /src/brpc/src/brpc/selective_channel.cpp:596,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/selective_channel.cpp:598,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:599,1
    - Dst: brpc::SelectiveChannel::CallMethod
      Src: /src/brpc/src/brpc/selective_channel.cpp:600,1
    - Dst: Join
      Src: /src/brpc/src/brpc/selective_channel.cpp:602,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/selective_channel.cpp:603,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/selective_channel.cpp:603,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    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: 605
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 605
    functionName: brpc::SelectiveChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 1
    functionsReached:
    - static_cast<Controller*>
    - google::protobuf::Closure*::Run
    - butil::gettimeofday_us
    - Controller*::call_id
    - Join
    - Controller*::add_flag
    - Controller*::OnRPCEnd
    - brpc::SelectiveChannel::initialized
    - schan::Sender::Sender
    - 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:609,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:609,1
    - Dst: schan::ChannelBalancer*::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:611,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 614
    functionName: brpc::SelectiveChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - schan::ChannelBalancer*::CheckHealth
    - _lb::get
    - static_cast<schan::ChannelBalancer*>
    linkageType: ''
    returnType: int
    signature: int SelectiveChannel::CheckHealth()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _lb::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:620,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 625
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 52
    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:55,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 60
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - Socket*::health_check_count
    - LOG
    - brpc::schan::SubChannel::CheckHealth
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 65
    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:69,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    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: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    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:79,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:79,1
    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: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - user
    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: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    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: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    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: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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:140,1
    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: ~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:166,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:166,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:167,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - end
    - clear
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    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:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:186,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:191,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:203,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:213,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:220,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:222,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 3
    argNames:
    - sub_channel
    - ' subopt'
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::SubChannelOptions
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 232
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::ReleaseHCRelatedReference
    - find
    - BAIDU_SCOPED_LOCK
    - end
    - Socket::Create
    - ServerId
    - SocketUniquePtr::get
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - AddServer
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                const
      SelectiveChannel::SubChannelOptions& subopt,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:239,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:243,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:247,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - ' handle'
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 252
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - erase
    - CHECK_EQ
    - RemoveServer
    - SocketUniquePtr::ReleaseAdditionalReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(const SelectiveChannel::ChannelHandle&
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 263
    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:266,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:267,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:268,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:269,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 275
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelToIdMap::const_iterator::second::Failed
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::CheckHealth
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:279,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:281,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:284,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:285,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:286,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:289,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 291
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - 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: 5
    argNames:
    - cntl
    - request
    - response
    - ' lb'
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - butil::intrusive_ptr<SharedLoadBalancer>
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 309
    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               const
      butil::intrusive_ptr<SharedLoadBalancer>& lb,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: get
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:316,1
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: ChannelBalancer*::SelectChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:332,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:334,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:340,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:346,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:351,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_protocol
      Src: /src/brpc/src/brpc/selective_channel.cpp:357,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:362,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 311
    functionDepth: 2
    functionLinenumber: 311
    functionLinenumberEnd: 365
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_code
    - brpc::schan::Sender::PopFree
    - request_attachment
    - SetFailed
    - Controller*::set_log_id
    - ChannelBalancer::SelectOut::fake_sock::id
    - CHECK
    - request_compress_type
    - current_id
    - timeout_ms
    - Controller*::set_request_compress_type
    - Controller*::http_request
    - request_code
    - Controller*::set_type_of_service
    - get
    - log_id
    - Controller*::request_attachment
    - http_request
    - ChannelBalancer::SelectOut::channel
    - static_cast<ChannelBalancer*>
    - has_request_code
    - berror
    - Controller*::set_connection_type
    - request_protocol
    - ChannelBalancer*::SelectChannel
    - connection_type
    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:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:373,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:383,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:392,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:395,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:401,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:406,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 407
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - Controller*::_response::GetReflection
    - berror
    - Controller*::set_connection_type
    - Failed
    - LOG
    - PushFree
    - Controller*::ErrorCode
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - response_attachment
    - Controller*::SetFailed
    - Controller*::response_attachment
    - ErrorCode
    - connection_type
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:413,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:416,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:421,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 409
    functionDepth: 5
    functionLinenumber: 409
    functionLinenumberEnd: 426
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - bthread_id_error
    - sub_done::_cntl::call_id
    - call_id
    - bthread_id_unlock
    - brpc::schan::Sender::Clear
    - CHECK_EQ
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:439,1
    - Dst: reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:441,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 428
    functionDepth: 6
    functionLinenumber: 428
    functionLinenumberEnd: 446
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 5
    functionsReached:
    - Resource
    - brpc::schan::Sender::Run
    - call_id
    - bthread_id_unlock_and_destroy
    - reset
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:452,1
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:458,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:459,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:463,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:464,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:468,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 476
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - Resource::response::Clear
    - Resource
    - SubDone::SubDone
    - CHECK
    - New
    - Reset
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:482,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 490
    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:497,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 505
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 52
    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:55,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:56,1
    - Dst: brpc::schan::SubChannel::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 60
    functionName: brpc::schan::SubChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 4
    functionsReached:
    - Socket*::health_check_count
    - LOG
    - brpc::schan::SubChannel::CheckHealth
    linkageType: ''
    returnType: int
    signature: int CheckHealth(Socket* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:63,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 65
    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:69,1
    - Dst: Weight
      Src: /src/brpc/src/brpc/selective_channel.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - u
    argTypes:
    - SocketUser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    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: 76
      start: 76
    functionDepth: 0
    functionLinenumber: 76
    functionLinenumberEnd: 76
    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:79,1
    - Dst: user
      Src: /src/brpc/src/brpc/selective_channel.cpp:79,1
    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: brpc::schan::ChannelBalancer::channel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - user
    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: 86
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 86
    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: 107
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 107
    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: 120
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 120
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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:140,1
    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: ~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:166,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:166,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:167,1
    - Dst: ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:170,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 171
    functionName: ChannelBalancer::~ChannelBalancer()
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - ChannelToIdMap::iterator::second::ReleaseAdditionalReference
    - end
    - clear
    - ChannelToIdMap::iterator::second::ReleaseHCRelatedReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::~ChannelBalancer()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SharedLoadBalancer::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:174,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - lb_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 173
    functionDepth: 1
    functionLinenumber: 173
    functionLinenumberEnd: 175
    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:181,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:184,1
    - Dst: find
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:185,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:186,1
    - Dst: SubChannel::SubChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:191,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/selective_channel.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:203,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:209,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/selective_channel.cpp:212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:213,1
    - Dst: AddServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:217,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:218,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:220,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:222,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:226,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 3
    argNames:
    - sub_channel
    - ' subopt'
    - handle
    argTypes:
    - ChannelBase*
    - SelectiveChannel::SubChannelOptions
    - SelectiveChannel::ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 232
    functionName: brpc::schan::ChannelBalancer::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::ReleaseHCRelatedReference
    - find
    - BAIDU_SCOPED_LOCK
    - end
    - Socket::Create
    - ServerId
    - SocketUniquePtr::get
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - AddServer
    - SocketUniquePtr::SetFailed
    - SubChannel::SubChannel
    linkageType: ''
    returnType: int
    signature: "int ChannelBalancer::AddChannel(ChannelBase* sub_channel,\n                                const
      SelectiveChannel::SubChannelOptions& subopt,\n                                SelectiveChannel::ChannelHandle*
      handle)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: RemoveServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: ServerId
      Src: /src/brpc/src/brpc/selective_channel.cpp:235,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/selective_channel.cpp:239,1
    - Dst: static_cast<SubChannel*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/selective_channel.cpp:241,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:243,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: erase
      Src: /src/brpc/src/brpc/selective_channel.cpp:244,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:247,1
    - Dst: SocketUniquePtr::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/selective_channel.cpp:250,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - ' handle'
    argTypes:
    - SelectiveChannel::ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 252
    functionName: brpc::schan::ChannelBalancer::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SubChannel*>
    - SocketUniquePtr::ReleaseHCRelatedReference
    - ServerId
    - BAIDU_SCOPED_LOCK
    - SocketUniquePtr::user
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - erase
    - CHECK_EQ
    - RemoveServer
    - SocketUniquePtr::ReleaseAdditionalReference
    linkageType: ''
    returnType: void
    signature: void ChannelBalancer::RemoveAndDestroyChannel(const SelectiveChannel::ChannelHandle&
      handle)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/selective_channel.cpp:257,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - LoadBalancer::SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 254
    functionDepth: 0
    functionLinenumber: 254
    functionLinenumberEnd: 263
    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:266,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:267,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:268,1
    - Dst: ChannelToIdMap::const_iterator::second::Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:269,1
    - Dst: ChannelToIdMap::const_iterator::first::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:270,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 275
    functionName: brpc::schan::ChannelBalancer::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - ChannelToIdMap::const_iterator::second::Failed
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::CheckHealth
    linkageType: ''
    returnType: int
    signature: int ChannelBalancer::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/selective_channel.cpp:279,1
    - Dst: size
      Src: /src/brpc/src/brpc/selective_channel.cpp:281,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:284,1
    - Dst: end
      Src: /src/brpc/src/brpc/selective_channel.cpp:285,1
    - Dst: begin
      Src: /src/brpc/src/brpc/selective_channel.cpp:286,1
    - Dst: ChannelToIdMap::const_iterator::first::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:289,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 291
    functionName: brpc::schan::ChannelBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - ChannelToIdMap::const_iterator::first::Describe
    - 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: 5
    argNames:
    - cntl
    - request
    - response
    - ' lb'
    - user_done
    argTypes:
    - Controller*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - butil::intrusive_ptr<SharedLoadBalancer>
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 295
    functionDepth: 0
    functionLinenumber: 295
    functionLinenumberEnd: 309
    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               const
      butil::intrusive_ptr<SharedLoadBalancer>& lb,\n               google::protobuf::Closure*
      user_done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: get
      Src: /src/brpc/src/brpc/selective_channel.cpp:314,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:316,1
    - Dst: has_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:322,1
    - Dst: ChannelBalancer*::SelectChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:326,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:328,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:332,1
    - Dst: brpc::schan::Sender::PopFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:334,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:336,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:337,1
    - Dst: current_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:340,1
    - Dst: ChannelBalancer::SelectOut::fake_sock::id
      Src: /src/brpc/src/brpc/selective_channel.cpp:341,1
    - Dst: timeout_ms
      Src: /src/brpc/src/brpc/selective_channel.cpp:346,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:350,1
    - Dst: Controller*::set_type_of_service
      Src: /src/brpc/src/brpc/selective_channel.cpp:351,1
    - Dst: Controller*::set_request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: request_compress_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:352,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:353,1
    - Dst: Controller*::set_request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: request_code
      Src: /src/brpc/src/brpc/selective_channel.cpp:354,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:356,1
    - Dst: request_protocol
      Src: /src/brpc/src/brpc/selective_channel.cpp:357,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/selective_channel.cpp:359,1
    - Dst: ChannelBalancer::SelectOut::channel
      Src: /src/brpc/src/brpc/selective_channel.cpp:362,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 311
    functionDepth: 2
    functionLinenumber: 311
    functionLinenumberEnd: 365
    functionName: brpc::schan::Sender::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::set_request_code
    - brpc::schan::Sender::PopFree
    - request_attachment
    - SetFailed
    - Controller*::set_log_id
    - ChannelBalancer::SelectOut::fake_sock::id
    - CHECK
    - request_compress_type
    - current_id
    - timeout_ms
    - Controller*::set_request_compress_type
    - Controller*::http_request
    - request_code
    - Controller*::set_type_of_service
    - get
    - log_id
    - Controller*::request_attachment
    - http_request
    - ChannelBalancer::SelectOut::channel
    - static_cast<ChannelBalancer*>
    - has_request_code
    - berror
    - Controller*::set_connection_type
    - request_protocol
    - ChannelBalancer*::SelectChannel
    - connection_type
    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:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:373,1
    - Dst: berror
      Src: /src/brpc/src/brpc/selective_channel.cpp:374,1
    - Dst: PushFree
      Src: /src/brpc/src/brpc/selective_channel.cpp:380,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:383,1
    - Dst: Controller*::set_connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/selective_channel.cpp:389,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/selective_channel.cpp:390,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/selective_channel.cpp:392,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:393,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:395,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:397,1
    - Dst: Controller*::_response::GetReflection
      Src: /src/brpc/src/brpc/selective_channel.cpp:401,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/selective_channel.cpp:406,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 407
    functionName: brpc::schan::SubDone::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - Controller*::_response::GetReflection
    - berror
    - Controller*::set_connection_type
    - Failed
    - LOG
    - PushFree
    - Controller*::ErrorCode
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - response_attachment
    - Controller*::SetFailed
    - Controller*::response_attachment
    - ErrorCode
    - connection_type
    linkageType: ''
    returnType: void
    signature: void SubDone::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/selective_channel.cpp:413,1
    - Dst: sub_done::_cntl::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:416,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:418,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/selective_channel.cpp:419,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/selective_channel.cpp:421,1
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:424,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 426
      start: 409
    functionDepth: 5
    functionLinenumber: 409
    functionLinenumberEnd: 426
    functionName: brpc::schan::Sender::Run
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 3
    functionsReached:
    - bthread_id_error
    - sub_done::_cntl::call_id
    - call_id
    - bthread_id_unlock
    - brpc::schan::Sender::Clear
    - CHECK_EQ
    - ErrorCode
    linkageType: ''
    returnType: void
    signature: void Sender::Run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:437,1
    - Dst: call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:439,1
    - Dst: reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:441,1
    - Dst: brpc::schan::Sender::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:443,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/selective_channel.cpp:445,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 428
    functionDepth: 6
    functionLinenumber: 428
    functionLinenumberEnd: 446
    functionName: brpc::schan::Sender::Clear
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 7
    functionsReached:
    - Resource
    - brpc::schan::Sender::Run
    - call_id
    - bthread_id_unlock_and_destroy
    - reset
    linkageType: ''
    returnType: void
    signature: void Sender::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:452,1
    - Dst: New
      Src: /src/brpc/src/brpc/selective_channel.cpp:458,1
    - Dst: SubDone::SubDone
      Src: /src/brpc/src/brpc/selective_channel.cpp:459,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:463,1
    - Dst: Resource
      Src: /src/brpc/src/brpc/selective_channel.cpp:464,1
    - Dst: Resource::response::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:468,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 448
    functionDepth: 1
    functionLinenumber: 448
    functionLinenumberEnd: 476
    functionName: brpc::schan::Sender::PopFree
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 4
    functionsReached:
    - Resource::response::Clear
    - Resource
    - SubDone::SubDone
    - CHECK
    - New
    - Reset
    linkageType: ''
    returnType: Resource
    signature: Resource Sender::PopFree()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::schan::Sender::Clear
      Src: /src/brpc/src/brpc/selective_channel.cpp:482,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/selective_channel.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' r'
    argTypes:
    - Resource
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 478
    functionDepth: 1
    functionLinenumber: 478
    functionLinenumberEnd: 490
    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:497,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 492
    functionDepth: 0
    functionLinenumber: 492
    functionLinenumberEnd: 505
    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:511,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sender
    - index
    argTypes:
    - RPCSender*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 509
    functionDepth: 0
    functionLinenumber: 509
    functionLinenumberEnd: 512
    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: 516
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 516
    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: 518
      start: 518
    functionDepth: 0
    functionLinenumber: 518
    functionLinenumberEnd: 518
    functionName: brpc::SelectiveChannel::SelectiveChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 30
    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: 520
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 520
    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:524,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:525,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:526,1
    - Dst: schan::ChannelBalancer::ChannelBalancer
      Src: /src/brpc/src/brpc/selective_channel.cpp:529,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:531,1
    - Dst: schan::ChannelBalancer*::Init
      Src: /src/brpc/src/brpc/selective_channel.cpp:534,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:535,1
    - Dst: _lb::reset
      Src: /src/brpc/src/brpc/selective_channel.cpp:539,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - lb_name
    - options
    argTypes:
    - char*
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 550
      start: 522
    functionDepth: 1
    functionLinenumber: 522
    functionLinenumberEnd: 550
    functionName: brpc::SelectiveChannel::Init
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 26
    functionsReached:
    - schan::ChannelBalancer*::Init
    - LOG
    - _lb::reset
    - brpc::SelectiveChannel::initialized
    - GlobalInitializeOrDie
    - schan::ChannelBalancer::ChannelBalancer
    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: 554
      start: 552
    functionDepth: 0
    functionLinenumber: 552
    functionLinenumberEnd: 554
    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:560,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:562,1
    - Dst: schan::ChannelBalancer*::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:565,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - sub_channel
    - ' option'
    - handle
    argTypes:
    - ChannelBase*
    - SubChannelOptions
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 566
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 566
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 24
    functionsReached:
    - _lb::get
    - schan::ChannelBalancer*::AddChannel
    - static_cast<schan::ChannelBalancer*>
    - LOG
    linkageType: ''
    returnType: int
    signature: "int SelectiveChannel::AddChannel(ChannelBase* sub_channel,\n                                 const
      SubChannelOptions& option,\n                                 ChannelHandle*
      handle)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<schan::ChannelBalancer*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:570,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:570,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/selective_channel.cpp:572,1
    - Dst: schan::ChannelBalancer*::RemoveAndDestroyChannel
      Src: /src/brpc/src/brpc/selective_channel.cpp:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' handle'
    argTypes:
    - ChannelHandle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 576
    functionName: brpc::SelectiveChannel::RemoveAndDestroyChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - _lb::get
    - schan::ChannelBalancer*::RemoveAndDestroyChannel
    - static_cast<schan::ChannelBalancer*>
    - LOG
    linkageType: ''
    returnType: void
    signature: void SelectiveChannel::RemoveAndDestroyChannel(const ChannelHandle&
      handle)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/selective_channel.cpp:584,1
    - Dst: brpc::SelectiveChannel::initialized
      Src: /src/brpc/src/brpc/selective_channel.cpp:585,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/selective_channel.cpp:586,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/selective_channel.cpp:591,1
    - Dst: schan::Sender::Sender
      Src: /src/brpc/src/brpc/selective_channel.cpp:596,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/selective_channel.cpp:598,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/selective_channel.cpp:599,1
    - Dst: brpc::SelectiveChannel::CallMethod
      Src: /src/brpc/src/brpc/selective_channel.cpp:600,1
    - Dst: Join
      Src: /src/brpc/src/brpc/selective_channel.cpp:602,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/selective_channel.cpp:603,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/selective_channel.cpp:603,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    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: 605
      start: 578
    functionDepth: 1
    functionLinenumber: 578
    functionLinenumberEnd: 605
    functionName: brpc::SelectiveChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 2
    functionsReached:
    - static_cast<Controller*>
    - google::protobuf::Closure*::Run
    - butil::gettimeofday_us
    - Controller*::call_id
    - Join
    - Controller*::add_flag
    - Controller*::OnRPCEnd
    - brpc::SelectiveChannel::initialized
    - schan::Sender::Sender
    - 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:609,1
    - Dst: _lb::get
      Src: /src/brpc/src/brpc/selective_channel.cpp:609,1
    - Dst: schan::ChannelBalancer*::CheckHealth
      Src: /src/brpc/src/brpc/selective_channel.cpp:611,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 607
    functionDepth: 1
    functionLinenumber: 607
    functionLinenumberEnd: 614
    functionName: brpc::SelectiveChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/selective_channel.cpp
    functionUses: 0
    functionsReached:
    - schan::ChannelBalancer*::CheckHealth
    - _lb::get
    - static_cast<schan::ChannelBalancer*>
    linkageType: ''
    returnType: int
    signature: int SelectiveChannel::CheckHealth()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _lb::Describe
      Src: /src/brpc/src/brpc/selective_channel.cpp:620,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 625
      start: 616
    functionDepth: 0
    functionLinenumber: 616
    functionLinenumberEnd: 625
    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: 3
    argNames:
    - max_backup_ratio
    - window_size_seconds
    - update_interval_seconds
    argTypes:
    - double
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 44
    functionName: brpc::BackupRateLimiter::BackupRateLimiter
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BackupRateLimiter(double max_backup_ratio,\n                      int
      window_size_seconds,\n                      int update_interval_seconds)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:52,1
    - Dst: load
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:53,1
    - Dst: load
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:54,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:57,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:59,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:60,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:64,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:65,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:68,1
    - Dst: store
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:77,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 88
    functionName: brpc::BackupRateLimiter::ShouldAllow
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached:
    - load
    - static_cast<double>
    - get_value
    - compare_exchange_strong
    - store
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: bool
    signature: bool ShouldAllow() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::BackupRateLimiter::OnRPCEnd
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnRPCEnd(const Controller* /*controller*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - backup_request_ms
    - max_backup_ratio
    - window_size_seconds
    - update_interval_seconds
    argTypes:
    - int32_t
    - double
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 123
    functionName: brpc::RateLimitedBackupPolicy::RateLimitedBackupPolicy
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RateLimitedBackupPolicy(int32_t backup_request_ms,\n                            double
      max_backup_ratio,\n                            int window_size_seconds,\n                            int
      update_interval_seconds)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: brpc::RateLimitedBackupPolicy::GetBackupRequestMs
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBackupRequestMs(const Controller* /*controller*/) const
      override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShouldAllow
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 131
    functionName: brpc::RateLimitedBackupPolicy::DoBackup
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached:
    - ShouldAllow
    linkageType: ''
    returnType: bool
    signature: bool DoBackup(const Controller* /*controller*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RateLimitedBackupPolicy::OnRPCEnd
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::RateLimitedBackupPolicy::OnRPCEnd
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 1
    functionsReached:
    - brpc::RateLimitedBackupPolicy::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void OnRPCEnd(const Controller* controller) override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:165,1
    - Dst: RateLimitedBackupPolicy::RateLimitedBackupPolicy
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - RateLimitedBackupPolicyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 175
    functionName: brpc::CreateRateLimitedBackupPolicy
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 14
    functionsReached:
    - RateLimitedBackupPolicy::RateLimitedBackupPolicy
    - LOG
    linkageType: ''
    returnType: BackupRequestPolicy
    signature: "BackupRequestPolicy * CreateRateLimitedBackupPolicy(\n    const RateLimitedBackupPolicyOptions&
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - max_backup_ratio
    - window_size_seconds
    - update_interval_seconds
    argTypes:
    - double
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 44
    functionName: brpc::BackupRateLimiter::BackupRateLimiter
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void BackupRateLimiter(double max_backup_ratio,\n                      int
      window_size_seconds,\n                      int update_interval_seconds)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:52,1
    - Dst: load
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:53,1
    - Dst: load
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:54,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:57,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:59,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:60,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:64,1
    - Dst: get_value
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:65,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:68,1
    - Dst: store
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:77,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 51
    functionDepth: 1
    functionLinenumber: 51
    functionLinenumberEnd: 88
    functionName: brpc::BackupRateLimiter::ShouldAllow
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached:
    - load
    - static_cast<double>
    - get_value
    - compare_exchange_strong
    - store
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: bool
    signature: bool ShouldAllow() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::BackupRateLimiter::OnRPCEnd
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void OnRPCEnd(const Controller* /*controller*/)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 4
    argNames:
    - backup_request_ms
    - max_backup_ratio
    - window_size_seconds
    - update_interval_seconds
    argTypes:
    - int32_t
    - double
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 123
    functionName: brpc::RateLimitedBackupPolicy::RateLimitedBackupPolicy
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: "void RateLimitedBackupPolicy(int32_t backup_request_ms,\n                            double
      max_backup_ratio,\n                            int window_size_seconds,\n                            int
      update_interval_seconds)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 127
      start: 125
    functionDepth: 0
    functionLinenumber: 125
    functionLinenumberEnd: 127
    functionName: brpc::RateLimitedBackupPolicy::GetBackupRequestMs
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int32_t
    signature: int32_t GetBackupRequestMs(const Controller* /*controller*/) const
      override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ShouldAllow
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:130,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 131
    functionName: brpc::RateLimitedBackupPolicy::DoBackup
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 0
    functionsReached:
    - ShouldAllow
    linkageType: ''
    returnType: bool
    signature: bool DoBackup(const Controller* /*controller*/) const override
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RateLimitedBackupPolicy::OnRPCEnd
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:134,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - controller
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 135
    functionName: brpc::RateLimitedBackupPolicy::OnRPCEnd
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 2
    functionsReached:
    - brpc::RateLimitedBackupPolicy::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void OnRPCEnd(const Controller* controller) override
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:165,1
    - Dst: RateLimitedBackupPolicy::RateLimitedBackupPolicy
      Src: /src/brpc/src/brpc/backup_request_policy.cpp:172,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - RateLimitedBackupPolicyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 175
    functionName: brpc::CreateRateLimitedBackupPolicy
    functionSourceFile: /src/brpc/src/brpc/backup_request_policy.cpp
    functionUses: 14
    functionsReached:
    - RateLimitedBackupPolicy::RateLimitedBackupPolicy
    - LOG
    linkageType: ''
    returnType: BackupRequestPolicy
    signature: "BackupRequestPolicy * CreateRateLimitedBackupPolicy(\n    const RateLimitedBackupPolicyOptions&
      options)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    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:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 183
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 45
    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: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    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: 210
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 210
    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: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    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: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: brpc::Controller::retried_count
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 10
    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:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: brpc::Controller::has_backup_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 6
    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:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    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: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    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: 250
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 250
    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: 257
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 257
    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: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    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: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    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: 267
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 267
    functionName: brpc::Controller::set_request_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_checksum_type(ChecksumType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - with_attachment
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 283
    functionName: brpc::Controller::set_request_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 4
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_request_checksum_attachment(bool with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - request_code
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 289
    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:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 290
    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: 291
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 291
    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:296,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 299
    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: 300
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 300
    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: 305
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 305
    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:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 312
    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: 314
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 314
    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:318,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 321
    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: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    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: 327
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 327
    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: 329
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 329
    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: 331
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 331
    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: 353
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 353
    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:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 364
    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: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: 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:369,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 369
    functionDepth: 1
    functionLinenumber: 369
    functionLinenumberEnd: 369
    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:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 383
    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:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 389
    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:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 393
    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:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 394
    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:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 398
    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:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 399
    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:403,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 1
    functionLinenumber: 403
    functionLinenumberEnd: 403
    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: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: 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:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 410
    functionDepth: 1
    functionLinenumber: 410
    functionLinenumberEnd: 410
    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:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 411
    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:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 422
    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:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 425
    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:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 435
    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:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 436
    functionDepth: 1
    functionLinenumber: 436
    functionLinenumberEnd: 436
    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: 461
      start: 461
    functionDepth: 0
    functionLinenumber: 461
    functionLinenumberEnd: 461
    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:472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 475
    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: 476
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 476
    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: 481
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 481
    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: 485
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 485
    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:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - manage_or_not
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 491
    functionDepth: 1
    functionLinenumber: 491
    functionLinenumberEnd: 492
    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:495,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 495
    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: 504
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 504
    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: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    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: 510
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 510
    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::set_flag
      Src: /src/brpc/src/brpc/controller.h:517,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - with_attachment
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 516
    functionDepth: 1
    functionLinenumber: 516
    functionLinenumberEnd: 518
    functionName: brpc::Controller::set_response_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_response_checksum_attachment(bool with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 532
      start: 532
    functionDepth: 1
    functionLinenumber: 532
    functionLinenumberEnd: 532
    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:536,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 536
    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: 540
      start: 540
    functionDepth: 0
    functionLinenumber: 540
    functionLinenumberEnd: 540
    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: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::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: 559
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 559
    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: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    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: 568
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 568
    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:573,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.h:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 575
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 45
    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: 598
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 598
    functionName: brpc::Controller::ErrorCode
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 134
    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: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    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:602,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 602
    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: 603
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 603
    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: 604
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 604
    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: 605
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 605
    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: 606
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 606
    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: 607
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 607
    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: 608
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 608
    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::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 609
    functionName: brpc::Controller::request_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool request_checksum_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 610
    functionName: brpc::Controller::response_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool response_checksum_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::DefaultHttpHeader
      Src: /src/brpc/src/brpc/controller.h:612,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 612
      start: 611
    functionDepth: 1
    functionLinenumber: 611
    functionLinenumberEnd: 612
    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:615,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 615
    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: 617
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 617
    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: 618
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 618
    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: 630
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 630
    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:631,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 631
    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: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: 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: 639
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 639
    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: 648
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 648
    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: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    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: 655
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 655
    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: 656
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 656
    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: 658
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 658
    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: 665
      start: 665
    functionDepth: 0
    functionLinenumber: 665
    functionLinenumberEnd: 665
    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: 671
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 671
    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: 677
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 677
    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: 680
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 680
    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: 684
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 684
    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: 687
      start: 685
    functionDepth: 0
    functionLinenumber: 685
    functionLinenumberEnd: 687
    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: 1
    argNames:
    - received_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 694
    functionName: brpc::Controller::set_rpc_received_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_rpc_received_us(int64_t received_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 698
    functionName: brpc::Controller::get_rpc_received_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_rpc_received_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 773
    functionDepth: 0
    functionLinenumber: 773
    functionLinenumberEnd: 773
    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: 778
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 778
    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: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_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: 787
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 787
    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:796,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 796
    functionDepth: 0
    functionLinenumber: 796
    functionLinenumberEnd: 796
    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: 821
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 821
    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: 829
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 829
    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: 837
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 837
    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: 838
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 838
    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:840,1
    - Dst: brpc::Controller::clear_flag
      Src: /src/brpc/src/brpc/controller.h:840,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - f
    - t
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 840
      start: 839
    functionDepth: 1
    functionLinenumber: 839
    functionLinenumberEnd: 840
    functionName: brpc::Controller::set_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached:
    - brpc::Controller::clear_flag
    - brpc::Controller::add_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: 841
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 841
    functionName: brpc::Controller::has_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 17
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_flag(uint32_t f) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::clear_flag
      Src: /src/brpc/src/brpc/controller.h:846,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:848,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:850,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - action
    argTypes:
    - BindSockAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 845
    functionDepth: 1
    functionLinenumber: 845
    functionLinenumberEnd: 852
    functionName: brpc::Controller::set_bind_sock_action
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::clear_flag
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void set_bind_sock_action(BindSockAction action)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:854,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:857,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 853
    functionDepth: 1
    functionLinenumber: 853
    functionLinenumberEnd: 861
    functionName: brpc::Controller::bind_sock_action
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: BindSockAction
    signature: BindSockAction bind_sock_action() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:863,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 863
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 863
    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:864,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 864
    functionDepth: 1
    functionLinenumber: 864
    functionLinenumberEnd: 864
    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:867,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 868
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 868
    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:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:870,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 870
      start: 870
    functionDepth: 1
    functionLinenumber: 870
    functionLinenumberEnd: 870
    functionName: brpc::Controller::is_ending_rpc
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_ending_rpc() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 872
    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: 873
      start: 873
    functionDepth: 0
    functionLinenumber: 873
    functionLinenumberEnd: 873
    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: 179
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 179
    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:182,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 183
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 46
    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: 203
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 203
    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: 210
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 210
    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: 224
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 224
    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: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    functionName: brpc::Controller::retried_count
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 10
    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:230,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 230
    functionDepth: 1
    functionLinenumber: 230
    functionLinenumberEnd: 230
    functionName: brpc::Controller::has_backup_request
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 6
    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:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    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: 243
      start: 243
    functionDepth: 0
    functionLinenumber: 243
    functionLinenumberEnd: 243
    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: 250
      start: 250
    functionDepth: 0
    functionLinenumber: 250
    functionLinenumberEnd: 250
    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: 257
      start: 257
    functionDepth: 0
    functionLinenumber: 257
    functionLinenumberEnd: 257
    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: 261
      start: 261
    functionDepth: 0
    functionLinenumber: 261
    functionLinenumberEnd: 261
    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: 264
      start: 264
    functionDepth: 0
    functionLinenumber: 264
    functionLinenumberEnd: 264
    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: 267
      start: 267
    functionDepth: 0
    functionLinenumber: 267
    functionLinenumberEnd: 267
    functionName: brpc::Controller::set_request_checksum_type
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_request_checksum_type(ChecksumType t)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.h:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - with_attachment
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 2
    functionLinenumber: 281
    functionLinenumberEnd: 283
    functionName: brpc::Controller::set_request_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 4
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_request_checksum_attachment(bool with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:287,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - request_code
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 286
    functionDepth: 1
    functionLinenumber: 286
    functionLinenumberEnd: 289
    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:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 290
    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: 291
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 291
    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:296,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 299
      start: 294
    functionDepth: 0
    functionLinenumber: 294
    functionLinenumberEnd: 299
    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: 300
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 300
    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: 305
      start: 301
    functionDepth: 0
    functionLinenumber: 301
    functionLinenumberEnd: 305
    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:309,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 307
    functionDepth: 0
    functionLinenumber: 307
    functionLinenumberEnd: 312
    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: 314
      start: 314
    functionDepth: 0
    functionLinenumber: 314
    functionLinenumberEnd: 314
    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:318,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 321
      start: 316
    functionDepth: 0
    functionLinenumber: 316
    functionLinenumberEnd: 321
    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: 323
      start: 323
    functionDepth: 0
    functionLinenumber: 323
    functionLinenumberEnd: 323
    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: 327
      start: 327
    functionDepth: 0
    functionLinenumber: 327
    functionLinenumberEnd: 327
    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: 329
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 329
    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: 331
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 331
    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: 353
      start: 353
    functionDepth: 0
    functionLinenumber: 353
    functionLinenumberEnd: 353
    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:364,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 364
    functionDepth: 1
    functionLinenumber: 364
    functionLinenumberEnd: 364
    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: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: 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:369,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 369
      start: 369
    functionDepth: 1
    functionLinenumber: 369
    functionLinenumberEnd: 369
    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:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 383
    functionDepth: 1
    functionLinenumber: 383
    functionLinenumberEnd: 383
    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:389,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 389
    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:393,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 393
    functionDepth: 2
    functionLinenumber: 393
    functionLinenumberEnd: 393
    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:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 394
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 394
    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:398,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 398
    functionDepth: 2
    functionLinenumber: 398
    functionLinenumberEnd: 398
    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:399,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 399
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 399
    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:403,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 403
    functionDepth: 2
    functionLinenumber: 403
    functionLinenumberEnd: 403
    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: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: 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:410,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 410
    functionDepth: 2
    functionLinenumber: 410
    functionLinenumberEnd: 410
    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:411,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 411
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 411
    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:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 422
    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:425,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 424
    functionDepth: 1
    functionLinenumber: 424
    functionLinenumberEnd: 425
    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:435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - f
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 435
    functionDepth: 2
    functionLinenumber: 435
    functionLinenumberEnd: 435
    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:436,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 436
      start: 436
    functionDepth: 1
    functionLinenumber: 436
    functionLinenumberEnd: 436
    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: 461
      start: 461
    functionDepth: 0
    functionLinenumber: 461
    functionLinenumberEnd: 461
    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:472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 470
    functionDepth: 0
    functionLinenumber: 470
    functionLinenumberEnd: 475
    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: 476
      start: 476
    functionDepth: 0
    functionLinenumber: 476
    functionLinenumberEnd: 476
    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: 481
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 481
    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: 485
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 485
    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:492,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - manage_or_not
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 491
    functionDepth: 2
    functionLinenumber: 491
    functionLinenumberEnd: 492
    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:495,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 494
    functionDepth: 1
    functionLinenumber: 494
    functionLinenumberEnd: 495
    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: 504
      start: 504
    functionDepth: 0
    functionLinenumber: 504
    functionLinenumberEnd: 504
    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: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    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: 510
      start: 510
    functionDepth: 0
    functionLinenumber: 510
    functionLinenumberEnd: 510
    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::set_flag
      Src: /src/brpc/src/brpc/controller.h:517,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - with_attachment
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 518
      start: 516
    functionDepth: 2
    functionLinenumber: 516
    functionLinenumberEnd: 518
    functionName: brpc::Controller::set_response_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_flag
    linkageType: ''
    returnType: void
    signature: void set_response_checksum_attachment(bool with_attachment)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 532
      start: 532
    functionDepth: 1
    functionLinenumber: 532
    functionLinenumberEnd: 532
    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:536,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 536
      start: 536
    functionDepth: 1
    functionLinenumber: 536
    functionLinenumberEnd: 536
    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: 540
      start: 540
    functionDepth: 0
    functionLinenumber: 540
    functionLinenumberEnd: 540
    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: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::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: 559
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 559
    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: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    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: 568
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 568
    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:573,1
    - Dst: brpc::Controller::ResetPods
      Src: /src/brpc/src/brpc/controller.h:574,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 575
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 575
    functionName: brpc::Controller::Reset
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 46
    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: 598
      start: 598
    functionDepth: 0
    functionLinenumber: 598
    functionLinenumberEnd: 598
    functionName: brpc::Controller::ErrorCode
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 134
    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: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    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:602,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 602
    functionDepth: 1
    functionLinenumber: 602
    functionLinenumberEnd: 602
    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: 603
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 603
    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: 604
      start: 604
    functionDepth: 0
    functionLinenumber: 604
    functionLinenumberEnd: 604
    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: 605
      start: 605
    functionDepth: 0
    functionLinenumber: 605
    functionLinenumberEnd: 605
    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: 606
      start: 606
    functionDepth: 0
    functionLinenumber: 606
    functionLinenumberEnd: 606
    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: 607
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 607
    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: 608
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 608
    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::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 609
    functionDepth: 1
    functionLinenumber: 609
    functionLinenumberEnd: 609
    functionName: brpc::Controller::request_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool request_checksum_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:610,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 610
    functionName: brpc::Controller::response_checksum_attachment
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool response_checksum_attachment() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: DefaultHttpHeader
      Src: /src/brpc/src/brpc/controller.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: '& 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:615,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 614
    functionDepth: 0
    functionLinenumber: 614
    functionLinenumberEnd: 615
    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: 617
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 617
    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: 618
      start: 618
    functionDepth: 0
    functionLinenumber: 618
    functionLinenumberEnd: 618
    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: 630
      start: 630
    functionDepth: 0
    functionLinenumber: 630
    functionLinenumberEnd: 630
    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:631,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 631
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 631
    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: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: 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: 639
      start: 639
    functionDepth: 0
    functionLinenumber: 639
    functionLinenumberEnd: 639
    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: 648
      start: 648
    functionDepth: 0
    functionLinenumber: 648
    functionLinenumberEnd: 648
    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: 649
      start: 649
    functionDepth: 0
    functionLinenumber: 649
    functionLinenumberEnd: 649
    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: 655
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 655
    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: 656
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 656
    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: 658
      start: 658
    functionDepth: 0
    functionLinenumber: 658
    functionLinenumberEnd: 658
    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: 665
      start: 665
    functionDepth: 0
    functionLinenumber: 665
    functionLinenumberEnd: 665
    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: 671
      start: 671
    functionDepth: 0
    functionLinenumber: 671
    functionLinenumberEnd: 671
    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: 677
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 677
    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: 680
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 680
    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: 684
      start: 682
    functionDepth: 0
    functionLinenumber: 682
    functionLinenumberEnd: 684
    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: 687
      start: 685
    functionDepth: 0
    functionLinenumber: 685
    functionLinenumberEnd: 687
    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: 1
    argNames:
    - received_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 694
    functionName: brpc::Controller::set_rpc_received_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_rpc_received_us(int64_t received_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 698
    functionDepth: 0
    functionLinenumber: 698
    functionLinenumberEnd: 698
    functionName: brpc::Controller::get_rpc_received_us
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int64_t
    signature: int64_t get_rpc_received_us() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 773
      start: 773
    functionDepth: 0
    functionLinenumber: 773
    functionLinenumberEnd: 773
    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: 778
      start: 775
    functionDepth: 0
    functionLinenumber: 775
    functionLinenumberEnd: 778
    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: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_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: 787
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 787
    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:796,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 796
    functionDepth: 0
    functionLinenumber: 796
    functionLinenumberEnd: 796
    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: 821
      start: 821
    functionDepth: 0
    functionLinenumber: 821
    functionLinenumberEnd: 821
    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: 829
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 829
    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: 837
      start: 837
    functionDepth: 0
    functionLinenumber: 837
    functionLinenumberEnd: 837
    functionName: brpc::Controller::add_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 13
    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: 838
      start: 838
    functionDepth: 0
    functionLinenumber: 838
    functionLinenumberEnd: 838
    functionName: brpc::Controller::clear_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 2
    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:840,1
    - Dst: brpc::Controller::clear_flag
      Src: /src/brpc/src/brpc/controller.h:840,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - f
    - t
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 840
      start: 839
    functionDepth: 1
    functionLinenumber: 839
    functionLinenumberEnd: 840
    functionName: brpc::Controller::set_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 16
    functionsReached:
    - brpc::Controller::clear_flag
    - brpc::Controller::add_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: 841
      start: 841
    functionDepth: 0
    functionLinenumber: 841
    functionLinenumberEnd: 841
    functionName: brpc::Controller::has_flag
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 38
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool has_flag(uint32_t f) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::clear_flag
      Src: /src/brpc/src/brpc/controller.h:846,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:848,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:850,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - action
    argTypes:
    - BindSockAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 852
      start: 845
    functionDepth: 1
    functionLinenumber: 845
    functionLinenumberEnd: 852
    functionName: brpc::Controller::set_bind_sock_action
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::clear_flag
    - brpc::Controller::add_flag
    linkageType: ''
    returnType: void
    signature: void set_bind_sock_action(BindSockAction action)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:854,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:857,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 853
    functionDepth: 1
    functionLinenumber: 853
    functionLinenumberEnd: 861
    functionName: brpc::Controller::bind_sock_action
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: BindSockAction
    signature: BindSockAction bind_sock_action() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.h:863,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 863
      start: 863
    functionDepth: 1
    functionLinenumber: 863
    functionLinenumberEnd: 863
    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:864,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 864
    functionDepth: 1
    functionLinenumber: 864
    functionLinenumberEnd: 864
    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:867,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 868
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 868
    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:
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.h:870,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 870
      start: 870
    functionDepth: 1
    functionLinenumber: 870
    functionLinenumberEnd: 870
    functionName: brpc::Controller::is_ending_rpc
    functionSourceFile: /src/brpc/src/brpc/controller.h
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_flag
    linkageType: ''
    returnType: bool
    signature: bool is_ending_rpc() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 872
      start: 872
    functionDepth: 0
    functionLinenumber: 872
    functionLinenumberEnd: 872
    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: 873
      start: 873
    functionDepth: 0
    functionLinenumber: 873
    functionLinenumberEnd: 873
    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: 1058
      start: 1057
    functionDepth: 0
    functionLinenumber: 1057
    functionLinenumberEnd: 1058
    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: 1059
      start: 1058
    functionDepth: 0
    functionLinenumber: 1058
    functionLinenumberEnd: 1059
    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: 1060
      start: 1059
    functionDepth: 0
    functionLinenumber: 1059
    functionLinenumberEnd: 1060
    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: 1061
      start: 1060
    functionDepth: 0
    functionLinenumber: 1060
    functionLinenumberEnd: 1061
    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: 1062
      start: 1061
    functionDepth: 0
    functionLinenumber: 1061
    functionLinenumberEnd: 1062
    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: 1063
      start: 1062
    functionDepth: 0
    functionLinenumber: 1062
    functionLinenumberEnd: 1063
    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: 10
    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: 10
    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:109,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: 110
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 110
    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: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.h:115,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - channel_index
    - channel_count
    - main_cntl
    - sub_cntl
    argTypes:
    - int
    - int
    - Controller*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 116
    functionName: brpc::CallMapper::MapController
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - Controller*::request_attachment
    linkageType: ''
    returnType: void
    signature: "void MapController(int channel_index/*starting from 0*/, int channel_count,\n
      \                              const Controller* main_cntl, Controller* sub_cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Bad
      Src: /src/brpc/src/brpc/parallel_channel.h:125,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: 126
      start: 121
    functionDepth: 2
    functionLinenumber: 121
    functionLinenumberEnd: 126
    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: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    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:134,1
    - Dst: Req*::New
      Src: /src/brpc/src/brpc/parallel_channel.h:135,1
    - Dst: Req*::MergeFrom
      Src: /src/brpc/src/brpc/parallel_channel.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req_base
    argTypes:
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: brpc::Clone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - Req*::New
    - Req*::MergeFrom
    - dynamic_cast<const Req*>
    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: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    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:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 256
    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: 11
    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: 11
    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:109,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: 110
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 110
    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: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.h:115,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.h:115,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - channel_index
    - channel_count
    - main_cntl
    - sub_cntl
    argTypes:
    - int
    - int
    - Controller*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 116
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 116
    functionName: brpc::CallMapper::MapController
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - Controller*::request_attachment
    linkageType: ''
    returnType: void
    signature: "void MapController(int channel_index/*starting from 0*/, int channel_count,\n
      \                              const Controller* main_cntl, Controller* sub_cntl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Bad
      Src: /src/brpc/src/brpc/parallel_channel.h:125,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: 126
      start: 121
    functionDepth: 2
    functionLinenumber: 121
    functionLinenumberEnd: 126
    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: 129
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 129
    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:134,1
    - Dst: Req*::New
      Src: /src/brpc/src/brpc/parallel_channel.h:135,1
    - Dst: Req*::MergeFrom
      Src: /src/brpc/src/brpc/parallel_channel.h:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - req_base
    argTypes:
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 138
    functionName: brpc::Clone
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.h
    functionUses: 0
    functionsReached:
    - Req*::New
    - Req*::MergeFrom
    - dynamic_cast<const Req*>
    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: 161
      start: 161
    functionDepth: 0
    functionLinenumber: 161
    functionLinenumberEnd: 161
    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:256,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 256
    functionDepth: 0
    functionLinenumber: 256
    functionLinenumberEnd: 256
    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: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 74
    functionName: '& UNLIMITED()'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & UNLIMITED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: '& CONSTANT()'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & CONSTANT()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cl
    argTypes:
    - ConcurrencyLimiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    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:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' amc'
    argTypes:
    - std::ostream
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    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: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    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: 105
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 105
    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: 110
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 110
    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: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 71
    functionDepth: 0
    functionLinenumber: 71
    functionLinenumberEnd: 74
    functionName: '& UNLIMITED()'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & UNLIMITED()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    functionName: '& CONSTANT()'
    functionSourceFile: /src/brpc/src/brpc/adaptive_max_concurrency.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & CONSTANT()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cl
    argTypes:
    - ConcurrencyLimiter*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 80
    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:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' amc'
    argTypes:
    - std::ostream
    - AdaptiveMaxConcurrency
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 92
    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: 100
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 100
    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: 105
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 105
    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: 110
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 110
    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: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 228
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 228
    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: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: 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: 105
      start: 105
    functionDepth: 0
    functionLinenumber: 105
    functionLinenumberEnd: 105
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 228
      start: 228
    functionDepth: 0
    functionLinenumber: 228
    functionLinenumberEnd: 228
    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: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: 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: 217
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 217
    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: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    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: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    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: 369
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 369
    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: 393
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 393
    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: 438
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 438
    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: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    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: 546
      start: 546
    functionDepth: 0
    functionLinenumber: 546
    functionLinenumberEnd: 546
    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:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 549
    functionDepth: 1
    functionLinenumber: 549
    functionLinenumberEnd: 549
    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: 558
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 558
    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: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    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: 562
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 562
    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: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    functionName: brpc::Server::listen_address
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 17
    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: 569
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 569
    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: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    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: 573
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 573
    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:609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 610
    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: 617
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 617
    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:654,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 657
    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: 660
      start: 660
    functionDepth: 0
    functionLinenumber: 660
    functionLinenumberEnd: 660
    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:720,1
    - Dst: AdaptiveMaxConcurrency::UNLIMITED
      Src: /src/brpc/src/brpc/server.h:720,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.h:725,1
    - Dst: T*::_status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:728,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - service
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 731
    functionName: brpc::Server::SetServiceMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached:
    - T*::_status::SetConcurrencyLimiter
    - brpc::Server::CreateConcurrencyLimiter
    - LOG
    - AdaptiveMaxConcurrency::UNLIMITED
    - AdaptiveMaxConcurrency*::type
    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: 217
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 217
    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: 220
      start: 220
    functionDepth: 0
    functionLinenumber: 220
    functionLinenumberEnd: 220
    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: 221
      start: 221
    functionDepth: 0
    functionLinenumber: 221
    functionLinenumberEnd: 221
    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: 369
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 369
    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: 393
      start: 391
    functionDepth: 0
    functionLinenumber: 391
    functionLinenumberEnd: 393
    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: 438
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 438
    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: 543
      start: 543
    functionDepth: 0
    functionLinenumber: 543
    functionLinenumberEnd: 543
    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: 546
      start: 546
    functionDepth: 0
    functionLinenumber: 546
    functionLinenumberEnd: 546
    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:549,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 549
    functionDepth: 1
    functionLinenumber: 549
    functionLinenumberEnd: 549
    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: 558
      start: 557
    functionDepth: 0
    functionLinenumber: 557
    functionLinenumberEnd: 558
    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: 561
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 561
    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: 562
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 562
    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: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    functionName: brpc::Server::listen_address
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 17
    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: 569
      start: 569
    functionDepth: 0
    functionLinenumber: 569
    functionLinenumberEnd: 569
    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: 571
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 571
    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: 573
      start: 573
    functionDepth: 0
    functionLinenumber: 573
    functionLinenumberEnd: 573
    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:609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 610
    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: 617
      start: 615
    functionDepth: 0
    functionLinenumber: 615
    functionLinenumberEnd: 617
    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:654,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 653
    functionDepth: 0
    functionLinenumber: 653
    functionLinenumberEnd: 657
    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: 660
      start: 660
    functionDepth: 0
    functionLinenumber: 660
    functionLinenumberEnd: 660
    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:720,1
    - Dst: AdaptiveMaxConcurrency::UNLIMITED
      Src: /src/brpc/src/brpc/server.h:720,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.h:725,1
    - Dst: T*::_status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.h:728,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - service
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 731
    functionName: brpc::Server::SetServiceMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/server.h
    functionUses: 0
    functionsReached:
    - T*::_status::SetConcurrencyLimiter
    - brpc::Server::CreateConcurrencyLimiter
    - LOG
    - AdaptiveMaxConcurrency::UNLIMITED
    - AdaptiveMaxConcurrency*::type
    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:
    - Controller*::deadline_us
    - butil::gettimeofday_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:
    - Controller*::deadline_us
    - butil::gettimeofday_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:
    - Controller*::deadline_us
    - butil::gettimeofday_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:
    - Controller*::deadline_us
    - butil::gettimeofday_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:
    - init
    - reserve
    - 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:
    - clear
    - AddServer
    - push_back
    - size
    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:
    - clear
    - RemoveServer
    - push_back
    - size
    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:
    - init
    - reserve
    - 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:
    - clear
    - AddServer
    - push_back
    - size
    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:
    - clear
    - RemoveServer
    - push_back
    - size
    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: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    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:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    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:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    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: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - idx
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: brpc::EventDispatcher::set_priority_index
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_priority_index(int idx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/event_dispatcher.h:159,1
    - Dst: EventDataUniquePtr::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:163,1
    - Dst: EventDataUniquePtr::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:164,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: 165
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 165
    functionName: brpc::EventDispatcher::OnEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - EventDataUniquePtr::CallOutputEventCallback
    - brpc::SetTrackMeAddress
    - 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: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::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:176,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: 177
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 177
    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:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 211
    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:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 213
    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:219,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/event_dispatcher.h:223,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 217
    functionDepth: 5
    functionLinenumber: 217
    functionLinenumberEnd: 229
    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:233,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 236
    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:241,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 246
    functionName: brpc::IOEvent::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    linkageType: ''
    returnType: int
    signature: int AddConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:251,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:254,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 255
    functionName: brpc::IOEvent::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    linkageType: ''
    returnType: int
    signature: int RemoveConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:260,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 1
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: brpc::IOEvent::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    linkageType: ''
    returnType: int
    signature: int RegisterEvent(int fd, bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:270,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:273,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 275
    functionName: brpc::IOEvent::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    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: 279
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 279
    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: 282
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 282
    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:293,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: 294
      start: 286
    functionDepth: 2
    functionLinenumber: 286
    functionLinenumberEnd: 294
    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:304,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: 305
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 305
    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: 66
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 66
    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:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 73
    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:77,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - events
    - ' thread_attr'
    argTypes:
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 78
    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: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - idx
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 117
    functionDepth: 0
    functionLinenumber: 117
    functionLinenumberEnd: 117
    functionName: brpc::EventDispatcher::set_priority_index
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_priority_index(int idx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/event_dispatcher.h:159,1
    - Dst: EventDataUniquePtr::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:163,1
    - Dst: EventDataUniquePtr::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher.h:164,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: 165
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 165
    functionName: brpc::EventDispatcher::OnEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 2
    functionsReached:
    - EventDataUniquePtr::CallOutputEventCallback
    - brpc::SetTrackMeAddress
    - 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: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::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:176,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: 177
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 177
    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:211,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 211
    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:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 213
    functionDepth: 1
    functionLinenumber: 213
    functionLinenumberEnd: 213
    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:219,1
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/event_dispatcher.h:223,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 217
    functionDepth: 5
    functionLinenumber: 217
    functionLinenumberEnd: 229
    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:233,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 236
    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:241,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 239
    functionDepth: 1
    functionLinenumber: 239
    functionLinenumberEnd: 246
    functionName: brpc::IOEvent::AddConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    linkageType: ''
    returnType: int
    signature: int AddConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:251,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:254,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 249
    functionDepth: 1
    functionLinenumber: 249
    functionLinenumberEnd: 255
    functionName: brpc::IOEvent::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    linkageType: ''
    returnType: int
    signature: int RemoveConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:260,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 1
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: brpc::IOEvent::RegisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    linkageType: ''
    returnType: int
    signature: int RegisterEvent(int fd, bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.h:270,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.h:273,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - pollin
    argTypes:
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 268
    functionDepth: 1
    functionLinenumber: 268
    functionLinenumberEnd: 275
    functionName: brpc::IOEvent::UnregisterEvent
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.h
    functionUses: 0
    functionsReached:
    - GetGlobalEventDispatcher
    - LOG
    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: 279
      start: 277
    functionDepth: 0
    functionLinenumber: 277
    functionLinenumberEnd: 279
    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: 282
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 282
    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:293,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: 294
      start: 286
    functionDepth: 2
    functionLinenumber: 286
    functionLinenumberEnd: 294
    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:304,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: 305
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 305
    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
    - PLOG
    - butil::make_close_on_exec
    - kqueue
    - CHECK_EQ
    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
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::~EventDispatcher()
  - BBCount: 5
    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_attr_set_name
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:81,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:88,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:91,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:91,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 95
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - bthread_attr_set_name
    - LOG
    - berror
    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: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    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:106,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 110
    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:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 112
    functionDepth: 2
    functionLinenumber: 112
    functionLinenumberEnd: 117
    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:128,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:130,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:134,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:136,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 141
    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:146,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:147,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:151,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:153,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 156
    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:164,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 167
    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:181,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:182,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:183,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 186
    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:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    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:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:196,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:208,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:213,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:215,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:217,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:222,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:224,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:226,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 193
    functionDepth: 3
    functionLinenumber: 193
    functionLinenumberEnd: 230
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 1
    functionsReached:
    - ARRAY_SIZE
    - PLOG
    - butil::cpuwide_time_ns
    - kevent
    - brpc::EventDispatcher::CallInputEventCallback
    - brpc::EventDispatcher::CallOutputEventCallback
    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
    - PLOG
    - butil::make_close_on_exec
    - kqueue
    - CHECK_EQ
    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
    - Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::~EventDispatcher()
  - BBCount: 5
    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_attr_set_name
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:81,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:88,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:91,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:91,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 95
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - bthread_attr_set_name
    - LOG
    - berror
    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: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    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:106,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:108,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 110
    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:114,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 112
    functionDepth: 2
    functionLinenumber: 112
    functionLinenumberEnd: 117
    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:128,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:130,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:134,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:136,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 141
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 141
    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:146,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:147,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:151,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:153,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 143
    functionDepth: 0
    functionLinenumber: 143
    functionLinenumberEnd: 156
    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:164,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 167
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 167
    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:181,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:182,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:183,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 186
    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:189,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 191
    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:196,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:196,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:208,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:213,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:215,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:217,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:222,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:224,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp:226,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 193
    functionDepth: 3
    functionLinenumber: 193
    functionLinenumberEnd: 230
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_kqueue.cpp
    functionUses: 2
    functionsReached:
    - ARRAY_SIZE
    - PLOG
    - butil::cpuwide_time_ns
    - kevent
    - brpc::EventDispatcher::CallInputEventCallback
    - brpc::EventDispatcher::CallOutputEventCallback
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Run()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:32,1
    - Dst: ubring::UBShmEndpoint::UBShmEndpoint
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:34,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:37,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:38,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:39,1
    - Dst: std::make_shared<TcpTransport>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:52,1
    - Dst: brpc::UBShmTransport::Init
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:53,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - socket
    - options
    argTypes:
    - Socket*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 54
    functionName: brpc::UBShmTransport::Init
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 1
    functionsReached:
    - Socket*::SetFailed
    - ubring::UBShmEndpoint::UBShmEndpoint
    - PLOG
    - berror
    - std::make_shared<TcpTransport>
    - CHECK
    - brpc::UBShmTransport::Init
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::Init(Socket *socket, const SocketOptions &options)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: brpc::UBShmTransport::Release
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::Release()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::Reset
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: brpc::UBShmTransport::Reset
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 1
    functionsReached:
    - brpc::UBShmTransport::Reset
    linkageType: ''
    returnType: int
    signature: int UBShmTransport::Reset(int32_t expected_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<ubring::UBConnect>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: brpc::UBShmTransport::Connect
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<ubring::UBConnect>
    linkageType: ''
    returnType: std::shared_ptr<AppConnect>
    signature: std::shared_ptr<AppConnect> UBShmTransport::Connect()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:82,1
    - Dst: brpc::UBShmTransport::CutFromIOBuf
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: brpc::UBShmTransport::CutFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 1
    functionsReached:
    - brpc::UBShmTransport::CutFromIOBuf
    - brpc::UBShmTransport::CutFromIOBufList
    linkageType: ''
    returnType: int
    signature: int UBShmTransport::CutFromIOBuf(butil::IOBuf *buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:90,1
    - Dst: brpc::UBShmTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 93
    functionName: brpc::UBShmTransport::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::UBShmTransport::CutFromIOBufList
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBShmTransport::CutFromIOBufList(butil::IOBuf **buf, size_t
      ndata)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:100,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:101,1
    - Dst: IsWritable
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:102,1
    - Dst: PollerRegisterEpollOut
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:104,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:105,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:110,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:111,1
    - Dst: description
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:113,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:114,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:116,1
    - Dst: PollerUnRegisterEpollOut
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:124,1
    - Dst: brpc::UBShmTransport::WaitEpollOut
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:127,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - _epollout_butex
    - pollin
    - duetime
    argTypes:
    - butil::atomic<int>*
    - bool
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 95
    functionDepth: 4
    functionLinenumber: 95
    functionLinenumberEnd: 131
    functionName: brpc::UBShmTransport::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 1
    functionsReached:
    - SetFailed
    - brpc::UBShmTransport::WaitEpollOut
    - PLOG
    - bthread::butex_wait
    - berror
    - Failed
    - butil::atomic<int>*::load
    - IsWritable
    - CHECK
    - description
    - PollerUnRegisterEpollOut
    - PollerRegisterEpollOut
    linkageType: ''
    returnType: int
    signature: "int UBShmTransport::WaitEpollOut(butil::atomic<int> *_epollout_butex,\n
      \                                   bool pollin, const timespec duetime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:136,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:140,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:141,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:143,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:144,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:145,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 133
    functionDepth: 4
    functionLinenumber: 133
    functionLinenumberEnd: 147
    functionName: brpc::UBShmTransport::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - OnEdge
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::ProcessEvent(bthread_attr_t attr)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:154,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:160,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:171,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:172,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:173,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:175,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:179,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - ' input_msg'
    - num_bthread_created
    - last_msg
    argTypes:
    - InputMessageClosure
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 149
    functionDepth: 4
    functionLinenumber: 149
    functionLinenumberEnd: 181
    functionName: brpc::UBShmTransport::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - release
    - keytable_pool
    - bthread_attr_set_name
    - bthread_self_tag
    - ProcessInputMessage
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void UBShmTransport::QueueMessage(InputMessageClosure& input_msg,\n
      \                                int* num_bthread_created, bool last_msg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 183
    functionName: brpc::UBShmTransport::Debug
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::Debug(std::ostream &os)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::OptionsAvailableOverUB
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:187,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:187,1
    - Dst: brpc::ubring::GlobalUBInitializeOrDie
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:190,1
    - Dst: brpc::ubring::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:191,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:191,1
    - Dst: brpc::UBShmTransport::OptionsAvailableForUB
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:195,1
    - Dst: static_cast<const ChannelOptions *>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:195,1
    - Dst: brpc::ubring::GlobalUBInitializeOrDie
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:198,1
    - Dst: brpc::ubring::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:199,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:199,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - serverOrNot
    - _options
    argTypes:
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: brpc::UBShmTransport::ContextInitOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const ChannelOptions *>
    - brpc::UBShmTransport::OptionsAvailableForUB
    - brpc::ubring::InitPollingModeWithTag
    - bthread_self_tag
    - brpc::UBShmTransport::OptionsAvailableOverUB
    - brpc::ubring::GlobalUBInitializeOrDie
    - static_cast<const ServerOptions *>
    linkageType: ''
    returnType: int
    signature: int UBShmTransport::ContextInitOrDie(bool serverOrNot, const void*
      _options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:210,1
    - Dst: brpc::ubring::SupportedByUB
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:213,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:214,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 219
    functionName: brpc::UBShmTransport::OptionsAvailableForUB
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::SupportedByUB
    - ChannelOptions*::has_ssl_options
    - LOG
    - ChannelOptions*::protocol::name
    linkageType: ''
    returnType: bool
    signature: bool UBShmTransport::OptionsAvailableForUB(const ChannelOptions* opt)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:223,1
    - Dst: ServerOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:227,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:235,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 239
    functionName: brpc::UBShmTransport::OptionsAvailableOverUB
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 1
    functionsReached:
    - ServerOptions*::has_ssl_options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool UBShmTransport::OptionsAvailableOverUB(const ServerOptions* opt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:32,1
    - Dst: ubring::UBShmEndpoint::UBShmEndpoint
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:34,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:37,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:38,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:39,1
    - Dst: std::make_shared<TcpTransport>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:52,1
    - Dst: brpc::UBShmTransport::Init
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:53,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - socket
    - options
    argTypes:
    - Socket*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 31
    functionDepth: 1
    functionLinenumber: 31
    functionLinenumberEnd: 54
    functionName: brpc::UBShmTransport::Init
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - Socket*::SetFailed
    - ubring::UBShmEndpoint::UBShmEndpoint
    - PLOG
    - berror
    - std::make_shared<TcpTransport>
    - CHECK
    - brpc::UBShmTransport::Init
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::Init(Socket *socket, const SocketOptions &options)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: brpc::UBShmTransport::Release
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::Release()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::Reset
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 70
    functionName: brpc::UBShmTransport::Reset
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::UBShmTransport::Reset
    linkageType: ''
    returnType: int
    signature: int UBShmTransport::Reset(int32_t expected_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<ubring::UBConnect>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 77
    functionName: brpc::UBShmTransport::Connect
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<ubring::UBConnect>
    linkageType: ''
    returnType: std::shared_ptr<AppConnect>
    signature: std::shared_ptr<AppConnect> UBShmTransport::Connect()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:82,1
    - Dst: brpc::UBShmTransport::CutFromIOBuf
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 2
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: brpc::UBShmTransport::CutFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::UBShmTransport::CutFromIOBuf
    - brpc::UBShmTransport::CutFromIOBufList
    linkageType: ''
    returnType: int
    signature: int UBShmTransport::CutFromIOBuf(butil::IOBuf *buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:90,1
    - Dst: brpc::UBShmTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 93
    functionName: brpc::UBShmTransport::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 4
    functionsReached:
    - brpc::UBShmTransport::CutFromIOBufList
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBShmTransport::CutFromIOBufList(butil::IOBuf **buf, size_t
      ndata)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:100,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:101,1
    - Dst: IsWritable
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:102,1
    - Dst: PollerRegisterEpollOut
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:104,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:105,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:110,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:111,1
    - Dst: description
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:113,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:114,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:116,1
    - Dst: PollerUnRegisterEpollOut
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:124,1
    - Dst: brpc::UBShmTransport::WaitEpollOut
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:127,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - _epollout_butex
    - pollin
    - duetime
    argTypes:
    - butil::atomic<int>*
    - bool
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 95
    functionDepth: 4
    functionLinenumber: 95
    functionLinenumberEnd: 131
    functionName: brpc::UBShmTransport::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - SetFailed
    - brpc::UBShmTransport::WaitEpollOut
    - PLOG
    - bthread::butex_wait
    - berror
    - Failed
    - butil::atomic<int>*::load
    - IsWritable
    - CHECK
    - description
    - PollerUnRegisterEpollOut
    - PollerRegisterEpollOut
    linkageType: ''
    returnType: int
    signature: "int UBShmTransport::WaitEpollOut(butil::atomic<int> *_epollout_butex,\n
      \                                   bool pollin, const timespec duetime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:136,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:140,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:141,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:143,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:144,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:145,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 147
      start: 133
    functionDepth: 4
    functionLinenumber: 133
    functionLinenumberEnd: 147
    functionName: brpc::UBShmTransport::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_urgent
    - OnEdge
    - bthread_start_background
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::ProcessEvent(bthread_attr_t attr)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:154,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:160,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:171,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:172,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:173,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:175,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:179,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - ' input_msg'
    - num_bthread_created
    - last_msg
    argTypes:
    - InputMessageClosure
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 181
      start: 149
    functionDepth: 4
    functionLinenumber: 149
    functionLinenumberEnd: 181
    functionName: brpc::UBShmTransport::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - release
    - keytable_pool
    - bthread_attr_set_name
    - bthread_self_tag
    - ProcessInputMessage
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void UBShmTransport::QueueMessage(InputMessageClosure& input_msg,\n
      \                                int* num_bthread_created, bool last_msg)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 183
    functionName: brpc::UBShmTransport::Debug
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBShmTransport::Debug(std::ostream &os)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UBShmTransport::OptionsAvailableOverUB
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:187,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:187,1
    - Dst: brpc::ubring::GlobalUBInitializeOrDie
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:190,1
    - Dst: brpc::ubring::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:191,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:191,1
    - Dst: brpc::UBShmTransport::OptionsAvailableForUB
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:195,1
    - Dst: static_cast<const ChannelOptions *>
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:195,1
    - Dst: brpc::ubring::GlobalUBInitializeOrDie
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:198,1
    - Dst: brpc::ubring::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:199,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:199,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - serverOrNot
    - _options
    argTypes:
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 206
    functionName: brpc::UBShmTransport::ContextInitOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const ChannelOptions *>
    - brpc::UBShmTransport::OptionsAvailableForUB
    - brpc::ubring::InitPollingModeWithTag
    - bthread_self_tag
    - brpc::UBShmTransport::OptionsAvailableOverUB
    - brpc::ubring::GlobalUBInitializeOrDie
    - static_cast<const ServerOptions *>
    linkageType: ''
    returnType: int
    signature: int UBShmTransport::ContextInitOrDie(bool serverOrNot, const void*
      _options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:210,1
    - Dst: brpc::ubring::SupportedByUB
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:213,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:214,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 219
    functionName: brpc::UBShmTransport::OptionsAvailableForUB
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::SupportedByUB
    - ChannelOptions*::has_ssl_options
    - LOG
    - ChannelOptions*::protocol::name
    linkageType: ''
    returnType: bool
    signature: bool UBShmTransport::OptionsAvailableForUB(const ChannelOptions* opt)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:223,1
    - Dst: ServerOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:227,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm_transport.cpp:235,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 239
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 239
    functionName: brpc::UBShmTransport::OptionsAvailableOverUB
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.cpp
    functionUses: 2
    functionsReached:
    - ServerOptions*::has_ssl_options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool UBShmTransport::OptionsAvailableOverUB(const ServerOptions* opt)
  - 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:
    - SetFailed
    - remote_side
    - fd
    - butil::endpoint2str
    - exchange
    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:
    - std::atomic_thread_fence
    - fetch_sub
    - SetFailed
    - description
    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:
    - Destroy
    - static_cast<T*>
    - compare_exchange_strong
    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
    - BAIDU_SCOPED_LOCK
    - std::deque<PipelinedInfo>::deque<PipelinedInfo>
    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:
    - pop_front
    - 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:
    - BAIDU_SCOPED_LOCK
    - push_front
    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:
    - SetFailed
    - remote_side
    - fd
    - butil::endpoint2str
    - exchange
    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:
    - std::atomic_thread_fence
    - fetch_sub
    - SetFailed
    - description
    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:
    - Destroy
    - static_cast<T*>
    - compare_exchange_strong
    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
    - BAIDU_SCOPED_LOCK
    - std::deque<PipelinedInfo>::deque<PipelinedInfo>
    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:
    - pop_front
    - 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:
    - BAIDU_SCOPED_LOCK
    - push_front
    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: 52
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 52
    functionName: TRACEPRINTF
    functionSourceFile: /src/brpc/src/brpc/traceprintf.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TRACEPRINTF(fmt, args...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 8
    argNames:
    - (
    - span_ptr
    - ','
    - fmt
    - ','
    - args
    - '...'
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 62
    functionName: TRACEPRINTF_SPAN
    functionSourceFile: /src/brpc/src/brpc/traceprintf.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: TRACEPRINTF_SPAN(span_ptr, 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::empty
    - clear
    - butil::StringPiece::find
    - butil::StringPiece::size
    - butil::StringPiece::data
    - butil::StringPiece::substr
    - assign
    - butil::StringPiece::remove_suffix
    - StringToProtocolType
    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: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::AdaptiveProtocolType::name
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - c_str
    - ProtocolTypeToString
    - empty
    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: 0
    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::empty
    - clear
    - butil::StringPiece::find
    - butil::StringPiece::size
    - butil::StringPiece::data
    - butil::StringPiece::substr
    - assign
    - butil::StringPiece::remove_suffix
    - StringToProtocolType
    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: 0
    functionLinenumber: 78
    functionLinenumberEnd: 80
    functionName: brpc::AdaptiveProtocolType::name
    functionSourceFile: /src/brpc/src/brpc/adaptive_protocol_type.h
    functionUses: 2
    functionsReached:
    - c_str
    - ProtocolTypeToString
    - empty
    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: 0
    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: 45
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 45
    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: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    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: 57
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 57
    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: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    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: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: brpc::ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 50
    functionsReached: []
    linkageType: ''
    returnType: ParseError
    signature: ParseError error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseErrorToString
      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: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    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: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: 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: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    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:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 81
    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:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - user_desc
    argTypes:
    - ParseError
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 85
    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:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 88
    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: 45
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 45
    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: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    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: 57
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 57
    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: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    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: 63
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 63
    functionName: brpc::ParseResult::error
    functionSourceFile: /src/brpc/src/brpc/parse_result.h
    functionUses: 51
    functionsReached: []
    linkageType: ''
    returnType: ParseError
    signature: ParseError error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ParseErrorToString
      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: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    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: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: 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: 69
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 69
    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:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - err
    argTypes:
    - ParseError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 81
    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:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - err
    - user_desc
    argTypes:
    - ParseError
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 85
    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:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 1
    functionLinenumber: 86
    functionLinenumberEnd: 88
    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:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    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: 181
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 181
    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:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arena
    argTypes:
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 186
    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: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    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: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    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: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    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: 194
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 194
    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: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: brpc::RedisReply::is_array
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 6
    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:198,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:201,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 204
    functionName: brpc::RedisReply::integer
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::is_integer
    - CHECK
    - RedisReplyTypeToString
    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:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 212
    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:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 220
    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:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 224
    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:227,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:228,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 230
    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:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 234
    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:237,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:238,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    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:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 249
    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:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 253
    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:256,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:257,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 259
    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:262,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:269,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 272
    functionName: brpc::RedisReply::c_str
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - CHECK
    - RedisReplyTypeToString
    - brpc::RedisReply::is_string
    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:275,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:277,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:279,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:282,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:282,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:284,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 285
    functionName: brpc::RedisReply::data
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - RedisReplyTypeToString
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisReply::is_string
    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:288,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:295,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:295,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 298
    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: 302
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 302
    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:305,1
    - Dst: const_cast<const RedisReply*>
      Src: /src/brpc/src/brpc/redis_reply.h:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 307
    functionName: '& RedisReply::operator[](size_t index)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - const_cast<RedisReply&>
    - const_cast<const 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:310,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 315
    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: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
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 324
    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: 332
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 332
    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:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    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: 181
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 181
    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:185,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arena
    argTypes:
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 186
    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: 190
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 190
    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: 191
      start: 191
    functionDepth: 0
    functionLinenumber: 191
    functionLinenumberEnd: 191
    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: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    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: 194
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 194
    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: 195
      start: 195
    functionDepth: 0
    functionLinenumber: 195
    functionLinenumberEnd: 195
    functionName: brpc::RedisReply::is_array
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 6
    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:198,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:201,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:201,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 204
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 204
    functionName: brpc::RedisReply::integer
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - brpc::RedisReply::is_integer
    - CHECK
    - RedisReplyTypeToString
    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:208,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 206
    functionDepth: 0
    functionLinenumber: 206
    functionLinenumberEnd: 212
    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:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 214
    functionDepth: 0
    functionLinenumber: 214
    functionLinenumberEnd: 220
    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:223,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 224
    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:227,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:228,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:229,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 225
    functionDepth: 1
    functionLinenumber: 225
    functionLinenumberEnd: 230
    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:233,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 232
    functionDepth: 1
    functionLinenumber: 232
    functionLinenumberEnd: 234
    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:237,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:238,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:239,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 235
    functionDepth: 1
    functionLinenumber: 235
    functionLinenumberEnd: 240
    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:244,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - value
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 242
    functionDepth: 0
    functionLinenumber: 242
    functionLinenumberEnd: 249
    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:252,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 253
    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:256,1
    - Dst: brpc::RedisReply::FormatStringImpl
      Src: /src/brpc/src/brpc/redis_reply.h:257,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.h:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 259
    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:262,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:269,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:269,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 272
    functionName: brpc::RedisReply::c_str
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 2
    functionsReached:
    - CHECK
    - RedisReplyTypeToString
    - brpc::RedisReply::is_string
    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:275,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:277,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:279,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:282,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:282,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.h:284,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 285
    functionName: brpc::RedisReply::data
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - RedisReplyTypeToString
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::RedisReply::is_string
    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:288,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.h:295,1
    - Dst: RedisReplyTypeToString
      Src: /src/brpc/src/brpc/redis_reply.h:295,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 298
      start: 287
    functionDepth: 1
    functionLinenumber: 287
    functionLinenumberEnd: 298
    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: 302
      start: 300
    functionDepth: 0
    functionLinenumber: 300
    functionLinenumberEnd: 302
    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:305,1
    - Dst: const_cast<const RedisReply*>
      Src: /src/brpc/src/brpc/redis_reply.h:306,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 307
      start: 304
    functionDepth: 0
    functionLinenumber: 304
    functionLinenumberEnd: 307
    functionName: '& RedisReply::operator[](size_t index)'
    functionSourceFile: /src/brpc/src/brpc/redis_reply.h
    functionUses: 0
    functionsReached:
    - const_cast<RedisReply&>
    - const_cast<const 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:310,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 315
      start: 309
    functionDepth: 0
    functionLinenumber: 309
    functionLinenumberEnd: 315
    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: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
    - Dst: std::swap
      Src: /src/brpc/src/brpc/redis_reply.h:321,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 317
    functionDepth: 0
    functionLinenumber: 317
    functionLinenumberEnd: 324
    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: 332
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 332
    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:
    - Controller*::SaveClientSettings
    - malloc
    - is_skip
    - SubDone::SubDone
    - ParallelChannelDone::ParallelChannelDone
    - auto::sub_done
    - CHECK_EQ
    - BAIDU_UNLIKELY
    - auto::sub_done_map
    - allow_done_to_run_in_place
    - ApplyClientSettings
    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:
    - free
    - ParallelChannelDone*::sub_done
    - ParallelChannelDone*::~ParallelChannelDone
    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:
    - CHECK
    - ErrorCode
    - _error_text::clear
    - brpc::ParallelChannelDone::OnSubDoneRun
    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: 2
    functionLinenumber: 201
    functionLinenumberEnd: 206
    functionName: brpc::ParallelChannelDone::SaveThreadInfoOfCallsite
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_self
    - pthread_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: 2
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_self
    - pthread_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:
    - load
    - bthread_id_error
    - call_id
    - std::atomic_thread_fence
    - fetch_add
    - brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    - LOG
    - SubDone*::cntl::ErrorCode
    - brpc::ParallelChannelDone::OnComplete
    - fetch_or
    - SubDone*::cntl::call_id
    - is_done_allowed_to_run_in_place
    - bthread_start_background
    - brpc::ParallelChannelDone::sub_done
    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: 6
    functionLinenumber: 307
    functionLinenumberEnd: 400
    functionName: brpc::ParallelChannelDone::OnComplete
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - what
    - google::protobuf::Closure*::Run
    - butil::gettimeofday_us
    - SubDone*::merger::Merge
    - bthread_id_unlock_and_destroy
    - _error_text::clear
    - CHECK_EQ
    - OnRPCEnd
    - SetFailed
    - Controller*::ErrorCode
    - snprintf
    - Controller*::FailedInline
    - brpc::ParallelChannelDone::sub_done
    - _error_text::append
    - call_id
    - _response::MergeFrom
    - SubDone*::cntl::FailedInline
    - load
    - 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:
    - static_cast<ParallelChannelDone*>
    - brpc::ParallelChannelDone::Destroy
    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: 36
    functionsReached:
    - reserve
    - capacity
    - LOG
    - push_back
    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: 36
    functionsReached:
    - reserve
    - capacity
    - LOG
    - push_back
    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:
    - CHECK_EQ
    - begin
    - std::unique
    - size
    - pop_back
    - call_mapper::reset
    - back
    - end
    - SortByChannelPtr
    - clear
    - empty
    - EqualChannelPtr
    - std::sort
    - merger::reset
    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: 6
    functionLinenumber: 568
    functionLinenumberEnd: 578
    functionName: brpc::ParallelChannel::RunDoneAndDestroy
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - google::protobuf::Closure*::Run
    - Controller*::call_id
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void * ParallelChannel::RunDoneAndDestroy(void* arg)
  - BBCount: 31
    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:616,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:618,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:624,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:628,1
    - Dst: call_mapper::Map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:635,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:637,1
    - Dst: is_bad
      Src: /src/brpc/src/brpc/parallel_channel.cpp:639,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:640,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/src/brpc/parallel_channel.cpp:645,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:647,1
    - Dst: SubCall
      Src: /src/brpc/src/brpc/parallel_channel.cpp:650,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:654,1
    - Dst: brpc::ParallelChannelDone::Create
      Src: /src/brpc/src/brpc/parallel_channel.cpp:682,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:685,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:691,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:692,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/parallel_channel.cpp:700,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:702,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:703,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:705,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:706,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:708,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/parallel_channel.cpp:710,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:713,1
    - Dst: ParallelChannelDone*::SaveThreadInfoOfCallsite
      Src: /src/brpc/src/brpc/parallel_channel.cpp:719,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:720,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/parallel_channel.cpp:720,1
    - Dst: Controller*::SaveClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:726,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:729,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:730,1
    - Dst: call_mapper::MapController
      Src: /src/brpc/src/brpc/parallel_channel.cpp:732,1
    - Dst: ParallelChannelDone::SubDone*::cntl::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:735,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:735,1
    - Dst: ParallelChannelDone::SubDone*::cntl::ApplyClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:737,1
    - Dst: ParallelChannelDone::SubDone*::cntl::allow_done_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:738,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:742,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:743,1
    - Dst: chan::CallMethod
      Src: /src/brpc/src/brpc/parallel_channel.cpp:744,1
    - Dst: Join
      Src: /src/brpc/src/brpc/parallel_channel.cpp:753,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/parallel_channel.cpp:754,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:754,1
    - Dst: brpc::ParallelChannelDone::Destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:763,1
    - Dst: Controller*::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:766,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/parallel_channel.cpp:772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:776,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:778,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:780,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:780,1
    CyclomaticComplexity: 43
    EdgeCount: 43
    ICount: 149
    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: 781
      start: 580
    functionDepth: 6
    functionLinenumber: 580
    functionLinenumberEnd: 781
    functionName: brpc::ParallelChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SaveClientSettings
    - google::protobuf::Closure*::Run
    - brpc::ParallelChannelDone::Destroy
    - butil::gettimeofday_us
    - Controller*::call_id
    - ParallelChannelDone::SubDone*::cntl::request_attachment
    - DEFINE_SMALL_ARRAY
    - LOG
    - Controller*::OnRPCBegin
    - butil::microseconds_to_timespec
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - CHECK_EQ
    - Controller*::set_timeout_ms
    - google::protobuf::Message*::New
    - ParallelChannelDone::SubDone*::cntl::allow_done_to_run_in_place
    - LOG_IF
    - Controller*::set_used_by_rpc
    - Controller*::is_used_by_rpc
    - Controller*::timeout_ms
    - bthread_timer_add
    - Join
    - call_mapper::MapController
    - ParallelChannelDone::SubDone*::cntl::ApplyClientSettings
    - Controller*::FailedInline
    - size
    - static_cast<Controller*>
    - Controller*::request_attachment
    - is_skip
    - is_bad
    - Controller*::add_flag
    - Controller*::OnRPCEnd
    - chan::CallMethod
    - SubCall
    - call_mapper::Map
    - ParallelChannelDone*::sub_done
    - Controller*::is_done_allowed_to_run_in_place
    - ParallelChannelDone*::SaveThreadInfoOfCallsite
    - bthread_id_lock
    - Controller*::SetFailed
    - brpc::ParallelChannelDone::Create
    - bthread_start_background
    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:784,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:787,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:788,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:789,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 795
    functionName: brpc::ParallelChannel::Weight
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - chan::Weight
    - empty
    - size
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::Weight()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:798,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:801,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:810,1
    - Dst: chan::CheckHealth
      Src: /src/brpc/src/brpc/parallel_channel.cpp:811,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 817
    functionName: brpc::ParallelChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - chan::CheckHealth
    - empty
    - size
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:823,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:825,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 833
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 833
    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:
    - Controller*::SaveClientSettings
    - malloc
    - is_skip
    - SubDone::SubDone
    - ParallelChannelDone::ParallelChannelDone
    - auto::sub_done
    - CHECK_EQ
    - BAIDU_UNLIKELY
    - auto::sub_done_map
    - allow_done_to_run_in_place
    - ApplyClientSettings
    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:
    - free
    - ParallelChannelDone*::sub_done
    - ParallelChannelDone*::~ParallelChannelDone
    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:
    - CHECK
    - ErrorCode
    - _error_text::clear
    - brpc::ParallelChannelDone::OnSubDoneRun
    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: 2
    functionLinenumber: 201
    functionLinenumberEnd: 206
    functionName: brpc::ParallelChannelDone::SaveThreadInfoOfCallsite
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - bthread_self
    - pthread_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: 2
    functionLinenumber: 208
    functionLinenumberEnd: 213
    functionName: brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 1
    functionsReached:
    - bthread_self
    - pthread_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: 7
    functionLinenumber: 215
    functionLinenumberEnd: 305
    functionName: brpc::ParallelChannelDone::OnSubDoneRun
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached:
    - load
    - bthread_id_error
    - call_id
    - std::atomic_thread_fence
    - fetch_add
    - brpc::ParallelChannelDone::IsSameThreadAsCallMethod
    - LOG
    - SubDone*::cntl::ErrorCode
    - brpc::ParallelChannelDone::OnComplete
    - fetch_or
    - SubDone*::cntl::call_id
    - is_done_allowed_to_run_in_place
    - bthread_start_background
    - brpc::ParallelChannelDone::sub_done
    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: 6
    functionLinenumber: 307
    functionLinenumberEnd: 400
    functionName: brpc::ParallelChannelDone::OnComplete
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 2
    functionsReached:
    - what
    - google::protobuf::Closure*::Run
    - butil::gettimeofday_us
    - SubDone*::merger::Merge
    - bthread_id_unlock_and_destroy
    - _error_text::clear
    - CHECK_EQ
    - OnRPCEnd
    - SetFailed
    - Controller*::ErrorCode
    - snprintf
    - Controller*::FailedInline
    - brpc::ParallelChannelDone::sub_done
    - _error_text::append
    - call_id
    - _response::MergeFrom
    - SubDone*::cntl::FailedInline
    - load
    - 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:
    - static_cast<ParallelChannelDone*>
    - brpc::ParallelChannelDone::Destroy
    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: 36
    functionsReached:
    - reserve
    - capacity
    - LOG
    - push_back
    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: 36
    functionsReached:
    - reserve
    - capacity
    - LOG
    - push_back
    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:
    - CHECK_EQ
    - begin
    - std::unique
    - size
    - pop_back
    - call_mapper::reset
    - back
    - end
    - SortByChannelPtr
    - clear
    - empty
    - EqualChannelPtr
    - std::sort
    - merger::reset
    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: 6
    functionLinenumber: 568
    functionLinenumberEnd: 578
    functionName: brpc::ParallelChannel::RunDoneAndDestroy
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - google::protobuf::Closure*::Run
    - Controller*::call_id
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void * ParallelChannel::RunDoneAndDestroy(void* arg)
  - BBCount: 31
    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:616,1
    - Dst: Controller*::FailedInline
      Src: /src/brpc/src/brpc/parallel_channel.cpp:618,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:624,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:628,1
    - Dst: call_mapper::Map
      Src: /src/brpc/src/brpc/parallel_channel.cpp:635,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:637,1
    - Dst: is_bad
      Src: /src/brpc/src/brpc/parallel_channel.cpp:639,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:640,1
    - Dst: google::protobuf::Message*::New
      Src: /src/brpc/src/brpc/parallel_channel.cpp:645,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:647,1
    - Dst: SubCall
      Src: /src/brpc/src/brpc/parallel_channel.cpp:650,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:654,1
    - Dst: brpc::ParallelChannelDone::Create
      Src: /src/brpc/src/brpc/parallel_channel.cpp:682,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:685,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:691,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:692,1
    - Dst: Controller*::add_flag
      Src: /src/brpc/src/brpc/parallel_channel.cpp:700,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:702,1
    - Dst: Controller*::set_timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:703,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:705,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/parallel_channel.cpp:706,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/parallel_channel.cpp:708,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/parallel_channel.cpp:710,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/parallel_channel.cpp:713,1
    - Dst: ParallelChannelDone*::SaveThreadInfoOfCallsite
      Src: /src/brpc/src/brpc/parallel_channel.cpp:719,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:720,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/parallel_channel.cpp:720,1
    - Dst: Controller*::SaveClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:726,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:729,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:730,1
    - Dst: call_mapper::MapController
      Src: /src/brpc/src/brpc/parallel_channel.cpp:732,1
    - Dst: ParallelChannelDone::SubDone*::cntl::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:735,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/parallel_channel.cpp:735,1
    - Dst: ParallelChannelDone::SubDone*::cntl::ApplyClientSettings
      Src: /src/brpc/src/brpc/parallel_channel.cpp:737,1
    - Dst: ParallelChannelDone::SubDone*::cntl::allow_done_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:738,1
    - Dst: is_skip
      Src: /src/brpc/src/brpc/parallel_channel.cpp:742,1
    - Dst: ParallelChannelDone*::sub_done
      Src: /src/brpc/src/brpc/parallel_channel.cpp:743,1
    - Dst: chan::CallMethod
      Src: /src/brpc/src/brpc/parallel_channel.cpp:744,1
    - Dst: Join
      Src: /src/brpc/src/brpc/parallel_channel.cpp:753,1
    - Dst: Controller*::OnRPCEnd
      Src: /src/brpc/src/brpc/parallel_channel.cpp:754,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/parallel_channel.cpp:754,1
    - Dst: brpc::ParallelChannelDone::Destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:763,1
    - Dst: Controller*::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/parallel_channel.cpp:766,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/parallel_channel.cpp:772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/parallel_channel.cpp:776,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/parallel_channel.cpp:778,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/parallel_channel.cpp:780,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/parallel_channel.cpp:780,1
    CyclomaticComplexity: 43
    EdgeCount: 43
    ICount: 149
    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: 781
      start: 580
    functionDepth: 6
    functionLinenumber: 580
    functionLinenumberEnd: 781
    functionName: brpc::ParallelChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SaveClientSettings
    - google::protobuf::Closure*::Run
    - brpc::ParallelChannelDone::Destroy
    - butil::gettimeofday_us
    - Controller*::call_id
    - ParallelChannelDone::SubDone*::cntl::request_attachment
    - DEFINE_SMALL_ARRAY
    - LOG
    - Controller*::OnRPCBegin
    - butil::microseconds_to_timespec
    - bthread_id_unlock_and_destroy
    - bthread_id_unlock
    - CHECK_EQ
    - Controller*::set_timeout_ms
    - google::protobuf::Message*::New
    - ParallelChannelDone::SubDone*::cntl::allow_done_to_run_in_place
    - LOG_IF
    - Controller*::set_used_by_rpc
    - Controller*::is_used_by_rpc
    - Controller*::timeout_ms
    - bthread_timer_add
    - Join
    - call_mapper::MapController
    - ParallelChannelDone::SubDone*::cntl::ApplyClientSettings
    - Controller*::FailedInline
    - size
    - static_cast<Controller*>
    - Controller*::request_attachment
    - is_skip
    - is_bad
    - Controller*::add_flag
    - Controller*::OnRPCEnd
    - chan::CallMethod
    - SubCall
    - call_mapper::Map
    - ParallelChannelDone*::sub_done
    - Controller*::is_done_allowed_to_run_in_place
    - ParallelChannelDone*::SaveThreadInfoOfCallsite
    - bthread_id_lock
    - Controller*::SetFailed
    - brpc::ParallelChannelDone::Create
    - bthread_start_background
    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:784,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:787,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:788,1
    - Dst: chan::Weight
      Src: /src/brpc/src/brpc/parallel_channel.cpp:789,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 783
    functionDepth: 0
    functionLinenumber: 783
    functionLinenumberEnd: 795
    functionName: brpc::ParallelChannel::Weight
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - chan::Weight
    - empty
    - size
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::Weight()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/parallel_channel.cpp:798,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:801,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:810,1
    - Dst: chan::CheckHealth
      Src: /src/brpc/src/brpc/parallel_channel.cpp:811,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 817
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 817
    functionName: brpc::ParallelChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/parallel_channel.cpp
    functionUses: 0
    functionsReached:
    - chan::CheckHealth
    - empty
    - size
    linkageType: ''
    returnType: int
    signature: int ParallelChannel::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:823,1
    - Dst: size
      Src: /src/brpc/src/brpc/parallel_channel.cpp:825,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 833
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 833
    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: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - socket
    - ' options'
    argTypes:
    - Socket*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 34
    functionName: brpc::TcpTransport::Init
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TcpTransport::Init(Socket* socket, const SocketOptions& options)
  - 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::TcpTransport::Release
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TcpTransport::Release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::TcpTransport::Reset
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int TcpTransport::Reset(int32_t expected_nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/tcp_transport.cpp:43,1
    - Dst: fd
      Src: /src/brpc/src/brpc/tcp_transport.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: brpc::TcpTransport::CutFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::cut_into_file_descriptor
    - fd
    linkageType: ''
    returnType: int
    signature: int TcpTransport::CutFromIOBuf(butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::TcpTransport::Connect
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::shared_ptr<AppConnect>
    signature: std::shared_ptr<AppConnect> TcpTransport::Connect()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::cut_multiple_into_file_descriptor
      Src: /src/brpc/src/brpc/tcp_transport.cpp:51,1
    - Dst: fd
      Src: /src/brpc/src/brpc/tcp_transport.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - buf
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::TcpTransport::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - fd
    - butil::IOBuf::cut_multiple_into_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t TcpTransport::CutFromIOBufList(butil::IOBuf** buf, size_t ndata)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TcpTransport::WaitEpollOut
      Src: /src/brpc/src/brpc/tcp_transport.cpp:57,1
    - Dst: fd
      Src: /src/brpc/src/brpc/tcp_transport.cpp:57,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/tcp_transport.cpp:60,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/tcp_transport.cpp:61,1
    - Dst: description
      Src: /src/brpc/src/brpc/tcp_transport.cpp:62,1
    - Dst: berror
      Src: /src/brpc/src/brpc/tcp_transport.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - _epollout_butex
    - pollin
    - duetime
    argTypes:
    - butil::atomic<int>*
    - bool
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 66
    functionName: brpc::TcpTransport::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 1
    functionsReached:
    - SetFailed
    - PLOG
    - berror
    - brpc::TcpTransport::WaitEpollOut
    - fd
    - description
    linkageType: ''
    returnType: int
    signature: "int TcpTransport::WaitEpollOut(butil::atomic<int>* _epollout_butex,\n
      \                              bool pollin, timespec duetime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/tcp_transport.cpp:71,1
    - Dst: EventDispatcherUnsched
      Src: /src/brpc/src/brpc/tcp_transport.cpp:72,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/tcp_transport.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/tcp_transport.cpp:75,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/tcp_transport.cpp:76,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/tcp_transport.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/tcp_transport.cpp:79,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/tcp_transport.cpp:80,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 4
    functionLinenumber: 68
    functionLinenumberEnd: 82
    functionName: brpc::TcpTransport::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - LOG
    - OnEdge
    - EventDispatcherUnsched
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TcpTransport::ProcessEvent(bthread_attr_t attr)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/tcp_transport.cpp:85,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/tcp_transport.cpp:95,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/tcp_transport.cpp:96,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/tcp_transport.cpp:97,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/tcp_transport.cpp:98,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/tcp_transport.cpp:102,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' input_msg'
    - num_bthread_created
    argTypes:
    - InputMessageClosure
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 83
    functionDepth: 4
    functionLinenumber: 83
    functionLinenumberEnd: 104
    functionName: brpc::TcpTransport::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - release
    - keytable_pool
    - bthread_attr_set_name
    - bthread_self_tag
    - ProcessInputMessage
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void TcpTransport::QueueMessage(InputMessageClosure& input_msg,\n
      \                               int* num_bthread_created, bool)"
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - socket
    - ' options'
    argTypes:
    - Socket*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 27
    functionDepth: 0
    functionLinenumber: 27
    functionLinenumberEnd: 34
    functionName: brpc::TcpTransport::Init
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TcpTransport::Init(Socket* socket, const SocketOptions& options)
  - 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::TcpTransport::Release
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void TcpTransport::Release()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 40
    functionName: brpc::TcpTransport::Reset
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int TcpTransport::Reset(int32_t expected_nref)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/tcp_transport.cpp:43,1
    - Dst: fd
      Src: /src/brpc/src/brpc/tcp_transport.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 44
    functionName: brpc::TcpTransport::CutFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::cut_into_file_descriptor
    - fd
    linkageType: ''
    returnType: int
    signature: int TcpTransport::CutFromIOBuf(butil::IOBuf* buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::TcpTransport::Connect
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::shared_ptr<AppConnect>
    signature: std::shared_ptr<AppConnect> TcpTransport::Connect()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::cut_multiple_into_file_descriptor
      Src: /src/brpc/src/brpc/tcp_transport.cpp:51,1
    - Dst: fd
      Src: /src/brpc/src/brpc/tcp_transport.cpp:51,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - buf
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 52
    functionName: brpc::TcpTransport::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - fd
    - butil::IOBuf::cut_multiple_into_file_descriptor
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t TcpTransport::CutFromIOBufList(butil::IOBuf** buf, size_t ndata)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::TcpTransport::WaitEpollOut
      Src: /src/brpc/src/brpc/tcp_transport.cpp:57,1
    - Dst: fd
      Src: /src/brpc/src/brpc/tcp_transport.cpp:57,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/tcp_transport.cpp:60,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/tcp_transport.cpp:61,1
    - Dst: description
      Src: /src/brpc/src/brpc/tcp_transport.cpp:62,1
    - Dst: berror
      Src: /src/brpc/src/brpc/tcp_transport.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - _epollout_butex
    - pollin
    - duetime
    argTypes:
    - butil::atomic<int>*
    - bool
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 66
    functionName: brpc::TcpTransport::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 2
    functionsReached:
    - SetFailed
    - PLOG
    - berror
    - brpc::TcpTransport::WaitEpollOut
    - fd
    - description
    linkageType: ''
    returnType: int
    signature: "int TcpTransport::WaitEpollOut(butil::atomic<int>* _epollout_butex,\n
      \                              bool pollin, timespec duetime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/tcp_transport.cpp:71,1
    - Dst: EventDispatcherUnsched
      Src: /src/brpc/src/brpc/tcp_transport.cpp:72,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/tcp_transport.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/tcp_transport.cpp:75,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/tcp_transport.cpp:76,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/tcp_transport.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/tcp_transport.cpp:79,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/tcp_transport.cpp:80,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 4
    functionLinenumber: 68
    functionLinenumberEnd: 82
    functionName: brpc::TcpTransport::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - LOG
    - OnEdge
    - EventDispatcherUnsched
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void TcpTransport::ProcessEvent(bthread_attr_t attr)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/tcp_transport.cpp:85,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/tcp_transport.cpp:95,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/tcp_transport.cpp:96,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/tcp_transport.cpp:97,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/tcp_transport.cpp:98,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/tcp_transport.cpp:102,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 2
    argNames:
    - ' input_msg'
    - num_bthread_created
    argTypes:
    - InputMessageClosure
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 83
    functionDepth: 4
    functionLinenumber: 83
    functionLinenumberEnd: 104
    functionName: brpc::TcpTransport::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.cpp
    functionUses: 0
    functionsReached:
    - release
    - keytable_pool
    - bthread_attr_set_name
    - bthread_self_tag
    - ProcessInputMessage
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void TcpTransport::QueueMessage(InputMessageClosure& input_msg,\n
      \                               int* num_bthread_created, bool)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 26
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 26
    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: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: brpc::ChannelSSLOptions::ChannelSSLOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 7
    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: 40
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 40
    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: 26
      start: 23
    functionDepth: 0
    functionLinenumber: 23
    functionLinenumberEnd: 26
    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: 31
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 31
    functionName: brpc::ChannelSSLOptions::ChannelSSLOptions
    functionSourceFile: /src/brpc/src/brpc/ssl_options.cpp
    functionUses: 7
    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: 40
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 40
    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:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 33
    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:37,1
    - Dst: brpc::MemcacheRequest::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::MemcacheRequest::MemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheRequest::MergeFrom
    - brpc::MemcacheRequest::SharedCtor
    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: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    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: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: 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: 51
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 51
    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: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    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:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 60
    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:64,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/memcache.cpp:67,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:70,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/memcache.cpp:71,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:72,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/memcache.cpp:76,1
    - Dst: butil::IOBuf::fetch
      Src: /src/brpc/src/brpc/memcache.cpp:79,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:86,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/memcache.cpp:87,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:90,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 95
    functionName: brpc::MemcacheRequest::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf::fetch
    - butil::IOBuf::append
    - LOG
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - butil::IOBuf::empty
    - append
    - butil::IOBuf::size
    - ::google::protobuf::io::CodedInputStream*::Skip
    - butil::IOBuf::IOBuf
    - butil::IOBuf::pop_front
    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:99,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:105,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: brpc::MemcacheRequest::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - butil::IOBufAsZeroCopyInputStream::Next
    - 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:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 114
    functionName: brpc::MemcacheRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int>
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:117,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 120
    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: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    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:128,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:129,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 132
    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:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 139
    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:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 8
    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:148,1
    - Dst: brpc::MemcacheResponse::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 146
    functionDepth: 1
    functionLinenumber: 146
    functionLinenumberEnd: 150
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 8
    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: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    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:157,1
    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: 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: 161
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 161
    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: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    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: 168
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 168
    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:172,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:177,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:178,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 182
    functionName: brpc::MemcacheResponse::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedInputStream*::Skip
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - append
    - LOG
    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:186,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:192,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: brpc::MemcacheResponse::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - butil::IOBufAsZeroCopyInputStream::Next
    - 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:198,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 201
    functionName: brpc::MemcacheResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int>
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:204,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 209
    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: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::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:217,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 220
    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:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 222
    functionDepth: 2
    functionLinenumber: 222
    functionLinenumberEnd: 227
    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: 257
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 257
    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:266,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:266,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:270,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:270,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:274,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:277,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:277,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - command
    - ' key'
    argTypes:
    - uint8_t
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 282
    functionName: brpc::MemcacheRequest::GetOrDelete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet32
    - size
    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:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 284
    functionDepth: 2
    functionLinenumber: 284
    functionLinenumberEnd: 286
    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:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 2
    functionLinenumber: 288
    functionLinenumberEnd: 290
    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:318,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:320,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:322,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - timeout
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 333
    functionName: brpc::MemcacheRequest::Flush
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::HostToNet32
    - append
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Flush(uint32_t timeout)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:349,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:352,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:355,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:357,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:361,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:366,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:367,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:371,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:374,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:376,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:377,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:381,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:386,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:392,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:395,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:397,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:399,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:402,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:403,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:408,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: 410
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 410
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf*::clear
    - clear
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - 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:414,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/src/brpc/memcache.cpp:415,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:416,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: 420
      start: 412
    functionDepth: 1
    functionLinenumber: 412
    functionLinenumberEnd: 420
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - brpc::MemcacheResponse::PopGet
    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: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: 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:429,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 430
    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:459,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:459,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:463,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:463,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:463,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:465,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:466,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:466,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:467,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:470,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:470,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:470,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:473,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:473,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:473,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: 478
      start: 453
    functionDepth: 1
    functionLinenumber: 453
    functionLinenumberEnd: 478
    functionName: brpc::MemcacheRequest::Store
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:485,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:488,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:491,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:493,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:497,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:500,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:501,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:507,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:508,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:512,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:513,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:514,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:517,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:519,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/memcache.cpp:521,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 2
    argNames:
    - command
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 526
    functionName: brpc::MemcacheResponse::PopStore
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - clear
    - CHECK
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - 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:531,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: 532
      start: 528
    functionDepth: 2
    functionLinenumber: 528
    functionLinenumberEnd: 532
    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:537,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: 538
      start: 534
    functionDepth: 2
    functionLinenumber: 534
    functionLinenumberEnd: 538
    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:543,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: 544
      start: 540
    functionDepth: 2
    functionLinenumber: 540
    functionLinenumberEnd: 544
    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:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:550,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:553,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: 554
      start: 546
    functionDepth: 2
    functionLinenumber: 546
    functionLinenumberEnd: 554
    functionName: brpc::MemcacheRequest::Append
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::MemcacheRequest::Store
    - LOG
    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:559,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:560,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:563,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: 564
      start: 556
    functionDepth: 2
    functionLinenumber: 556
    functionLinenumberEnd: 564
    functionName: brpc::MemcacheRequest::Prepend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::MemcacheRequest::Store
    - LOG
    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:567,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 2
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: brpc::MemcacheResponse::PopSet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 4
    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:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 569
    functionDepth: 2
    functionLinenumber: 569
    functionLinenumberEnd: 571
    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:573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 572
    functionDepth: 2
    functionLinenumber: 572
    functionLinenumberEnd: 574
    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:576,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 575
    functionDepth: 2
    functionLinenumber: 575
    functionLinenumberEnd: 577
    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:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 578
    functionDepth: 2
    functionLinenumber: 578
    functionLinenumberEnd: 580
    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:616,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:616,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:620,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:620,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:622,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:622,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:622,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:623,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:626,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:626,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:626,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: 631
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 631
    functionName: brpc::MemcacheRequest::Counter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    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:635,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: 636
      start: 633
    functionDepth: 2
    functionLinenumber: 633
    functionLinenumberEnd: 636
    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:640,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: 641
      start: 638
    functionDepth: 2
    functionLinenumber: 638
    functionLinenumberEnd: 641
    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:656,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:659,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:662,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:664,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:668,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:672,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:673,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:676,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:680,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:682,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:683,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:688,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:692,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/memcache.cpp:693,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:697,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: 699
      start: 654
    functionDepth: 1
    functionLinenumber: 654
    functionLinenumberEnd: 699
    functionName: brpc::MemcacheResponse::PopCounter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - clear
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - butil::NetToHost64
    - size
    - 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:702,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 703
      start: 701
    functionDepth: 2
    functionLinenumber: 701
    functionLinenumberEnd: 703
    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:705,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 704
    functionDepth: 2
    functionLinenumber: 704
    functionLinenumberEnd: 706
    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:733,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:733,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:737,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:737,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:739,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:740,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:743,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:743,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:743,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' key'
    - exptime
    argTypes:
    - butil::StringPiece
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 729
    functionDepth: 1
    functionLinenumber: 729
    functionLinenumberEnd: 748
    functionName: brpc::MemcacheRequest::Touch
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet32
    - size
    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:765,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 770
    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:776,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:779,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:782,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:784,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:788,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:792,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:793,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:796,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:798,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:802,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:803,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:807,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:808,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:810,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - version
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 775
    functionDepth: 1
    functionLinenumber: 775
    functionLinenumberEnd: 812
    functionName: brpc::MemcacheResponse::PopVersion
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - clear
    - std::string*::clear
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - 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:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 33
      start: 30
    functionDepth: 1
    functionLinenumber: 30
    functionLinenumberEnd: 33
    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:37,1
    - Dst: brpc::MemcacheRequest::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:38,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 2
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::MemcacheRequest::MemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 6
    functionsReached:
    - brpc::MemcacheRequest::MergeFrom
    - brpc::MemcacheRequest::SharedCtor
    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: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    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: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: 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: 51
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 51
    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: 55
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 55
    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:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 60
    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:64,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/memcache.cpp:67,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:70,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/memcache.cpp:71,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:72,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/memcache.cpp:76,1
    - Dst: butil::IOBuf::fetch
      Src: /src/brpc/src/brpc/memcache.cpp:79,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:86,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/memcache.cpp:87,1
    - Dst: butil::IOBuf::pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:90,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:92,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 95
    functionName: brpc::MemcacheRequest::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf::fetch
    - butil::IOBuf::append
    - LOG
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - butil::IOBuf::empty
    - append
    - butil::IOBuf::size
    - ::google::protobuf::io::CodedInputStream*::Skip
    - butil::IOBuf::IOBuf
    - butil::IOBuf::pop_front
    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:99,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:105,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:106,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: brpc::MemcacheRequest::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - butil::IOBufAsZeroCopyInputStream::Next
    - 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:111,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 114
    functionName: brpc::MemcacheRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int>
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheRequest::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:117,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 120
      start: 116
    functionDepth: 1
    functionLinenumber: 116
    functionLinenumberEnd: 120
    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: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    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:128,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:129,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 132
    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:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 139
    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:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 1
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 8
    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:148,1
    - Dst: brpc::MemcacheResponse::MergeFrom
      Src: /src/brpc/src/brpc/memcache.cpp:149,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 146
    functionDepth: 2
    functionLinenumber: 146
    functionLinenumberEnd: 150
    functionName: brpc::MemcacheResponse::MemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 8
    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: 154
      start: 152
    functionDepth: 0
    functionLinenumber: 152
    functionLinenumberEnd: 154
    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:157,1
    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: 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: 161
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 161
    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: 165
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 165
    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: 168
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 168
    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:172,1
    - Dst: ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
      Src: /src/brpc/src/brpc/memcache.cpp:177,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:178,1
    - Dst: ::google::protobuf::io::CodedInputStream*::Skip
      Src: /src/brpc/src/brpc/memcache.cpp:179,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - input
    argTypes:
    - ::google::protobuf::io::CodedInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 182
    functionName: brpc::MemcacheResponse::MergePartialFromCodedStream
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedInputStream*::Skip
    - ::google::protobuf::io::CodedInputStream*::GetDirectBufferPointer
    - append
    - LOG
    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:186,1
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/memcache.cpp:192,1
    - Dst: ::google::protobuf::io::CodedOutputStream*::WriteRaw
      Src: /src/brpc/src/brpc/memcache.cpp:193,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - output
    argTypes:
    - ::google::protobuf::io::CodedOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 184
    functionDepth: 1
    functionLinenumber: 184
    functionLinenumberEnd: 195
    functionName: brpc::MemcacheResponse::SerializeWithCachedSizes
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - ::google::protobuf::io::CodedOutputStream*::WriteRaw
    - butil::IOBufAsZeroCopyInputStream::Next
    - 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:198,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 197
    functionDepth: 0
    functionLinenumber: 197
    functionLinenumberEnd: 201
    functionName: brpc::MemcacheResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - static_cast<int>
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MemcacheResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/memcache.cpp:204,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MemcacheResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 203
    functionDepth: 1
    functionLinenumber: 203
    functionLinenumberEnd: 209
    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: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::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:217,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/memcache.cpp:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - other
    argTypes:
    - MemcacheResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 215
    functionDepth: 1
    functionLinenumber: 215
    functionLinenumberEnd: 220
    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:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 222
    functionDepth: 2
    functionLinenumber: 222
    functionLinenumberEnd: 227
    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: 257
      start: 231
    functionDepth: 0
    functionLinenumber: 231
    functionLinenumberEnd: 257
    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:266,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:266,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:270,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:270,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:274,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:277,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:277,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:277,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - command
    - ' key'
    argTypes:
    - uint8_t
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 282
      start: 262
    functionDepth: 1
    functionLinenumber: 262
    functionLinenumberEnd: 282
    functionName: brpc::MemcacheRequest::GetOrDelete
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet32
    - size
    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:285,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 284
    functionDepth: 2
    functionLinenumber: 284
    functionLinenumberEnd: 286
    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:289,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 288
    functionDepth: 2
    functionLinenumber: 288
    functionLinenumberEnd: 290
    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:318,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:320,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:322,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - timeout
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 309
    functionDepth: 1
    functionLinenumber: 309
    functionLinenumberEnd: 333
    functionName: brpc::MemcacheRequest::Flush
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::HostToNet32
    - append
    linkageType: ''
    returnType: bool
    signature: bool MemcacheRequest::Flush(uint32_t timeout)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:349,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:352,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:355,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:357,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:361,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:366,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:367,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:371,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:374,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:376,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:377,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:381,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:386,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:392,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:395,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:397,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/memcache.cpp:399,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:402,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:403,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:408,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: 410
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 410
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 3
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf*::clear
    - clear
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - 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:414,1
    - Dst: brpc::MemcacheResponse::PopGet
      Src: /src/brpc/src/brpc/memcache.cpp:415,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:416,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: 420
      start: 412
    functionDepth: 1
    functionLinenumber: 412
    functionLinenumberEnd: 420
    functionName: brpc::MemcacheResponse::PopGet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - brpc::MemcacheResponse::PopGet
    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:426,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 425
    functionDepth: 2
    functionLinenumber: 425
    functionLinenumberEnd: 427
    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:429,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 428
    functionDepth: 2
    functionLinenumber: 428
    functionLinenumberEnd: 430
    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:459,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:459,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:463,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:463,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:463,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:465,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:466,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:466,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:467,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:470,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:470,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:470,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:473,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:473,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:473,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: 478
      start: 453
    functionDepth: 1
    functionLinenumber: 453
    functionLinenumberEnd: 478
    functionName: brpc::MemcacheRequest::Store
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 5
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:485,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:488,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:491,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:493,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:497,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:500,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:501,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:507,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:508,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:512,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:513,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:514,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:517,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:519,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/memcache.cpp:521,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:524,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 2
    argNames:
    - command
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 526
    functionName: brpc::MemcacheResponse::PopStore
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 9
    functionsReached:
    - clear
    - CHECK
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - 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:531,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: 532
      start: 528
    functionDepth: 2
    functionLinenumber: 528
    functionLinenumberEnd: 532
    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:537,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: 538
      start: 534
    functionDepth: 2
    functionLinenumber: 534
    functionLinenumberEnd: 538
    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:543,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: 544
      start: 540
    functionDepth: 2
    functionLinenumber: 540
    functionLinenumberEnd: 544
    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:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:550,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:553,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: 554
      start: 546
    functionDepth: 2
    functionLinenumber: 546
    functionLinenumberEnd: 554
    functionName: brpc::MemcacheRequest::Append
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::MemcacheRequest::Store
    - LOG
    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:559,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/memcache.cpp:560,1
    - Dst: brpc::MemcacheRequest::Store
      Src: /src/brpc/src/brpc/memcache.cpp:563,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: 564
      start: 556
    functionDepth: 2
    functionLinenumber: 556
    functionLinenumberEnd: 564
    functionName: brpc::MemcacheRequest::Prepend
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - empty
    - brpc::MemcacheRequest::Store
    - LOG
    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:567,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 568
      start: 566
    functionDepth: 2
    functionLinenumber: 566
    functionLinenumberEnd: 568
    functionName: brpc::MemcacheResponse::PopSet
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 4
    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:570,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 571
      start: 569
    functionDepth: 2
    functionLinenumber: 569
    functionLinenumberEnd: 571
    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:573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 572
    functionDepth: 2
    functionLinenumber: 572
    functionLinenumberEnd: 574
    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:576,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 575
    functionDepth: 2
    functionLinenumber: 575
    functionLinenumberEnd: 577
    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:579,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 578
    functionDepth: 2
    functionLinenumber: 578
    functionLinenumberEnd: 580
    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:616,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:616,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:620,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:620,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:622,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/memcache.cpp:622,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:622,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:623,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:626,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:626,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:626,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: 631
      start: 610
    functionDepth: 1
    functionLinenumber: 610
    functionLinenumberEnd: 631
    functionName: brpc::MemcacheRequest::Counter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    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:635,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: 636
      start: 633
    functionDepth: 2
    functionLinenumber: 633
    functionLinenumberEnd: 636
    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:640,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: 641
      start: 638
    functionDepth: 2
    functionLinenumber: 638
    functionLinenumberEnd: 641
    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:656,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:659,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:662,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:664,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:668,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:672,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:673,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:676,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:680,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:682,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:683,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:688,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:692,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/memcache.cpp:693,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:697,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: 699
      start: 654
    functionDepth: 1
    functionLinenumber: 654
    functionLinenumberEnd: 699
    functionName: brpc::MemcacheResponse::PopCounter
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - clear
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - butil::NetToHost64
    - size
    - 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:702,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 703
      start: 701
    functionDepth: 2
    functionLinenumber: 701
    functionLinenumberEnd: 703
    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:705,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - new_value
    - cas_value
    argTypes:
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 704
    functionDepth: 2
    functionLinenumber: 704
    functionLinenumberEnd: 706
    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:733,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:733,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:737,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:737,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/memcache.cpp:739,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:740,1
    - Dst: append
      Src: /src/brpc/src/brpc/memcache.cpp:743,1
    - Dst: data
      Src: /src/brpc/src/brpc/memcache.cpp:743,1
    - Dst: size
      Src: /src/brpc/src/brpc/memcache.cpp:743,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - ' key'
    - exptime
    argTypes:
    - butil::StringPiece
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 729
    functionDepth: 1
    functionLinenumber: 729
    functionLinenumberEnd: 748
    functionName: brpc::MemcacheRequest::Touch
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet32
    - size
    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:765,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 753
    functionDepth: 1
    functionLinenumber: 753
    functionLinenumberEnd: 770
    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:776,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:779,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/memcache.cpp:782,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:784,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:788,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:792,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/memcache.cpp:793,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/memcache.cpp:796,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/memcache.cpp:798,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:802,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:803,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/memcache.cpp:807,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/memcache.cpp:808,1
    - Dst: clear
      Src: /src/brpc/src/brpc/memcache.cpp:810,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 32
    argCount: 1
    argNames:
    - version
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 775
    functionDepth: 1
    functionLinenumber: 775
    functionLinenumberEnd: 812
    functionName: brpc::MemcacheResponse::PopVersion
    functionSourceFile: /src/brpc/src/brpc/memcache.cpp
    functionUses: 2
    functionsReached:
    - clear
    - std::string*::clear
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    - LOG_IF
    linkageType: ''
    returnType: bool
    signature: bool MemcacheResponse::PopVersion(std::string* version)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::ContextInitOrDie
      Src: /src/brpc/src/brpc/transport_factory.cpp:30,1
    - Dst: brpc::UBShmTransport::ContextInitOrDie
      Src: /src/brpc/src/brpc/transport_factory.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/transport_factory.cpp:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - mode
    - serverOrNot
    - _options
    argTypes:
    - SocketMode
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 3
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: brpc::TransportFactory::ContextInitOrDie
    functionSourceFile: /src/brpc/src/brpc/transport_factory.cpp
    functionUses: 2
    functionsReached:
    - brpc::UBShmTransport::ContextInitOrDie
    - brpc::RdmaTransport::ContextInitOrDie
    - LOG
    linkageType: ''
    returnType: int
    signature: int TransportFactory::ContextInitOrDie(SocketMode mode, bool serverOrNot,
      const void* _options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::ContextInitOrDie
      Src: /src/brpc/src/brpc/transport_factory.cpp:30,1
    - Dst: brpc::UBShmTransport::ContextInitOrDie
      Src: /src/brpc/src/brpc/transport_factory.cpp:35,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/transport_factory.cpp:39,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - mode
    - serverOrNot
    - _options
    argTypes:
    - SocketMode
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 24
    functionDepth: 3
    functionLinenumber: 24
    functionLinenumberEnd: 41
    functionName: brpc::TransportFactory::ContextInitOrDie
    functionSourceFile: /src/brpc/src/brpc/transport_factory.cpp
    functionUses: 2
    functionsReached:
    - brpc::UBShmTransport::ContextInitOrDie
    - brpc::RdmaTransport::ContextInitOrDie
    - LOG
    linkageType: ''
    returnType: int
    signature: int TransportFactory::ContextInitOrDie(SocketMode mode, bool serverOrNot,
      const void* _options)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr<TcpTransport>
      Src: /src/brpc/src/brpc/transport_factory.cpp:46,1
    - Dst: TcpTransport::TcpTransport
      Src: /src/brpc/src/brpc/transport_factory.cpp:46,1
    - Dst: std::unique_ptr<RdmaTransport>
      Src: /src/brpc/src/brpc/transport_factory.cpp:50,1
    - Dst: RdmaTransport::RdmaTransport
      Src: /src/brpc/src/brpc/transport_factory.cpp:50,1
    - Dst: std::unique_ptr<UBShmTransport>
      Src: /src/brpc/src/brpc/transport_factory.cpp:55,1
    - Dst: UBShmTransport::UBShmTransport
      Src: /src/brpc/src/brpc/transport_factory.cpp:55,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/transport_factory.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - mode
    argTypes:
    - SocketMode
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 61
    functionName: TransportFactory::CreateTransport
    functionSourceFile: /src/brpc/src/brpc/transport_factory.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr<RdmaTransport>
    - TcpTransport::TcpTransport
    - std::unique_ptr<TcpTransport>
    - RdmaTransport::RdmaTransport
    - UBShmTransport::UBShmTransport
    - LOG
    - std::unique_ptr<UBShmTransport>
    linkageType: ''
    returnType: std::unique_ptr<Transport>
    signature: std::unique_ptr<Transport> TransportFactory::CreateTransport(SocketMode
      mode)
  - 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::SelectiveChannel::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.h:78,1
    - Dst: SubChannelOptions
      Src: /src/brpc/src/brpc/selective_channel.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.h
    functionUses: 25
    functionsReached:
    - SubChannelOptions
    - brpc::SelectiveChannel::AddChannel
    linkageType: ''
    returnType: int
    signature: int AddChannel(ChannelBase* sub_channel, ChannelHandle* handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - sub_channel
    - ' tag'
    - handle
    argTypes:
    - ChannelBase*
    - std::string
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.h
    functionUses: 26
    functionsReached:
    - brpc::SelectiveChannel::AddChannel
    linkageType: ''
    returnType: int
    signature: int AddChannel(ChannelBase* sub_channel, const std::string& tag, ChannelHandle*
      handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.h:78,1
    - Dst: SubChannelOptions
      Src: /src/brpc/src/brpc/selective_channel.h:78,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - sub_channel
    - handle
    argTypes:
    - ChannelBase*
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 77
    functionDepth: 0
    functionLinenumber: 77
    functionLinenumberEnd: 79
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.h
    functionUses: 27
    functionsReached:
    - SubChannelOptions
    - brpc::SelectiveChannel::AddChannel
    linkageType: ''
    returnType: int
    signature: int AddChannel(ChannelBase* sub_channel, ChannelHandle* handle)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SelectiveChannel::AddChannel
      Src: /src/brpc/src/brpc/selective_channel.h:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - sub_channel
    - ' tag'
    - handle
    argTypes:
    - ChannelBase*
    - std::string
    - ChannelHandle*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 80
    functionDepth: 0
    functionLinenumber: 80
    functionLinenumberEnd: 84
    functionName: brpc::SelectiveChannel::AddChannel
    functionSourceFile: /src/brpc/src/brpc/selective_channel.h
    functionUses: 28
    functionsReached:
    - brpc::SelectiveChannel::AddChannel
    linkageType: ''
    returnType: int
    signature: int AddChannel(ChannelBase* sub_channel, const std::string& tag, ChannelHandle*
      handle)
  - 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::SharedCtor
    - brpc::NsheadMessage::MergeFrom
    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:
    - brpc::NsheadMessage::MergeFrom
    - LOG
    - CHECK_NE
    - dynamic_cast<const NsheadMessage*>
    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::SharedCtor
    - brpc::NsheadMessage::MergeFrom
    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:
    - brpc::NsheadMessage::MergeFrom
    - LOG
    - CHECK_NE
    - dynamic_cast<const NsheadMessage*>
    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::Clear
    - brpc::NonreflectableMessage::MergeFrom
    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::Clear
    - brpc::NonreflectableMessage::MergeFrom
    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:
    - ::google::protobuf::DynamicCastToGenerated<T>
    - brpc::ThriftFramedMessage::MergeFrom
    - brpc::NonreflectableMessage::MergeFrom
    - ::google::protobuf::internal::DynamicCastToGenerated<const 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: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::NonreflectableMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:172,1
    - Dst: brpc::NonreflectableMessage::ByteSizeLong
      Src: /src/brpc/src/brpc/nonreflectable_message.h: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::NonreflectableMessage::ByteSize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - static_cast<int>
    - brpc::NonreflectableMessage::ByteSizeLong
    linkageType: ''
    returnType: int
    signature: int ByteSize() const override
  - 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::NonreflectableMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 1
    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: 181
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 181
    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: 188
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 188
    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: 195
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 195
    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: 202
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 202
    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: 207
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 207
    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:215,1
    - Dst: reinterpret_cast<const ::google::protobuf::Reflection*>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 218
    functionName: brpc::NonreflectableMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const ::google::protobuf::Descriptor*>
    - reinterpret_cast<const ::google::protobuf::Reflection*>
    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: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: 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: 227
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 227
    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:242,1
    - Dst: ::google::protobuf::internal::MessageCreator
      Src: /src/brpc/src/brpc/nonreflectable_message.h:256,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:291,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 293
    functionName: brpc::NonreflectableMessage::NonreflectableMessageClassData
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - ::google::protobuf::internal::MessageCreator
    - default_instance
    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::Clear
    - brpc::NonreflectableMessage::MergeFrom
    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::Clear
    - brpc::NonreflectableMessage::MergeFrom
    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:
    - ::google::protobuf::DynamicCastToGenerated<T>
    - brpc::ThriftFramedMessage::MergeFrom
    - brpc::NonreflectableMessage::MergeFrom
    - ::google::protobuf::internal::DynamicCastToGenerated<const 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: 169
      start: 167
    functionDepth: 0
    functionLinenumber: 167
    functionLinenumberEnd: 169
    functionName: brpc::NonreflectableMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:172,1
    - Dst: brpc::NonreflectableMessage::ByteSizeLong
      Src: /src/brpc/src/brpc/nonreflectable_message.h: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::NonreflectableMessage::ByteSize
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - static_cast<int>
    - brpc::NonreflectableMessage::ByteSizeLong
    linkageType: ''
    returnType: int
    signature: int ByteSize() const override
  - 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::NonreflectableMessage::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 2
    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: 181
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 181
    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: 188
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 188
    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: 195
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 195
    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: 202
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 202
    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: 207
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 207
    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:215,1
    - Dst: reinterpret_cast<const ::google::protobuf::Reflection*>
      Src: /src/brpc/src/brpc/nonreflectable_message.h:216,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 212
    functionDepth: 0
    functionLinenumber: 212
    functionLinenumberEnd: 218
    functionName: brpc::NonreflectableMessage::GetMetadata
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const ::google::protobuf::Descriptor*>
    - reinterpret_cast<const ::google::protobuf::Reflection*>
    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: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: 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: 227
      start: 225
    functionDepth: 0
    functionLinenumber: 225
    functionLinenumberEnd: 227
    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:242,1
    - Dst: ::google::protobuf::internal::MessageCreator
      Src: /src/brpc/src/brpc/nonreflectable_message.h:256,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:291,1
    - Dst: default_instance
      Src: /src/brpc/src/brpc/nonreflectable_message.h:292,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 234
    functionDepth: 0
    functionLinenumber: 234
    functionLinenumberEnd: 293
    functionName: brpc::NonreflectableMessage::NonreflectableMessageClassData
    functionSourceFile: /src/brpc/src/brpc/nonreflectable_message.h
    functionUses: 0
    functionsReached:
    - ::google::protobuf::internal::MessageCreator
    - default_instance
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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: 19
    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:
    - butil::get_object<DefaultRpcPBMessages>
    - GetResponsePrototype
    - GetRequestPrototype
    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:
    - butil::get_object<DefaultRpcPBMessages>
    - GetResponsePrototype
    - GetRequestPrototype
    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: 1
    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: 1
    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: 1
    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: 1
    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: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/redis_command.cpp:36,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - ' buf'
    - max_scan_size
    argTypes:
    - butil::IOBuf
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 45
    functionName: FindCRLF
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - static_cast<char>
    linkageType: ''
    returnType: size_t
    signature: size_t FindCRLF(const butil::IOBuf& buf, size_t max_scan_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/redis_command.cpp:36,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 10
    argCount: 2
    argNames:
    - ' buf'
    - max_scan_size
    argTypes:
    - butil::IOBuf
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 45
    functionName: FindCRLF
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - static_cast<char>
    linkageType: ''
    returnType: size_t
    signature: size_t FindCRLF(const butil::IOBuf& buf, size_t max_scan_size)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - outbuf
    - d
    argTypes:
    - char*
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 64
    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:73,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - std::string
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 77
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - brpc::AppendDecimal
    - append
    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:81,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - butil::IOBuf
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - brpc::AppendDecimal
    - append
    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:88,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/redis_command.cpp:88,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:89,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:90,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/redis_command.cpp:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - out
    - compbuf
    - ncomp
    argTypes:
    - std::string*
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 3
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: brpc::FlushComponent
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::clear
    - 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:104,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:106,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:108,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:110,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:120,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:121,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:122,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:128,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:129,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:132,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:132,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:137,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:138,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:141,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:144,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:147,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:155,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:156,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:158,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:163,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:164,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:166,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:171,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:184,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:187,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:192,1
    - Dst: va_copy
      Src: /src/brpc/src/brpc/redis_command.cpp:196,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:199,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:205,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:213,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:223,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:233,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:243,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:244,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:251,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:252,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:258,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_command.cpp:260,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:262,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:268,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:278,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:280,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:281,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:285,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:286,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/redis_command.cpp:289,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:293,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:294,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:295,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 153
    argCount: 3
    argNames:
    - outbuf
    - fmt
    - ap
    argTypes:
    - butil::IOBuf*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 101
    functionDepth: 4
    functionLinenumber: 101
    functionLinenumberEnd: 296
    functionName: brpc::RedisCommandFormatV
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - strlen
    - std::string::back
    - butil::Status::OK
    - va_end
    - va_arg
    - std::string::append
    - std::min
    - brpc::AppendHeader
    - BuiltinServiceTest::TestStatus
    - LOG_IF
    - strchr
    - std::string::empty
    - memcpy
    - std::string::push_back
    - isdigit
    - std::string::pop_back
    - va_copy
    - vsnprintf
    - brpc::FlushComponent
    - butil::IOBuf*::append
    - std::string::reserve
    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:300,1
    - Dst: brpc::RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis_command.cpp:301,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - fmt
    argTypes:
    - butil::IOBuf*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 5
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: brpc::RedisCommandFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - brpc::RedisCommandFormatV
    - va_end
    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:309,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:311,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:313,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:315,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:318,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:319,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:319,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:319,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:322,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:323,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:324,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:330,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:331,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:334,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:334,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:340,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:343,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:346,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:349,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:354,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:354,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:356,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:356,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:356,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:357,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:358,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:361,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:365,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:366,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:367,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 47
    argCount: 2
    argNames:
    - outbuf
    - ' cmd'
    argTypes:
    - butil::IOBuf*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 306
    functionDepth: 4
    functionLinenumber: 306
    functionLinenumberEnd: 368
    functionName: brpc::RedisCommandNoFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - brpc::FlushComponent
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf*::append
    - std::string::empty
    - std::string::back
    - butil::Status::OK
    - std::min
    - std::string::push_back
    - brpc::size
    - std::string::pop_back
    - brpc::AppendHeader
    - data
    - std::string::reserve
    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:374,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:376,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:378,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:378,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:379,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:379,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:379,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:380,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:382,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: 383
      start: 370
    functionDepth: 3
    functionLinenumber: 370
    functionLinenumberEnd: 383
    functionName: brpc::RedisCommandByComponents
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - butil::Status::OK
    - brpc::size
    - brpc::AppendHeader
    - data
    - 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: 388
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 388
    functionName: brpc::RedisCommandParser::RedisCommandParser
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::RedisCommandParser()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:391,1
    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: 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: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::ConsumeImpl
      Src: /src/brpc/src/brpc/redis_command.cpp:399,1
    - Dst: std::vector<butil::StringPiece>*::swap
      Src: /src/brpc/src/brpc/redis_command.cpp:409,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/src/brpc/redis_command.cpp:410,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 3
    argNames:
    - ' buf'
    - args
    - arena
    argTypes:
    - butil::IOBuf
    - std::vector<butil::StringPiece>*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 412
    functionName: brpc::RedisCommandParser::Consume
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 9
    functionsReached:
    - std::vector<butil::StringPiece>*::swap
    - brpc::RedisCommandParser::ConsumeImpl
    - brpc::RedisCommandParser::Reset
    linkageType: ''
    returnType: ParseError
    signature: "ParseError RedisCommandParser::Consume(butil::IOBuf& buf,\n                                       std::vector<butil::StringPiece>*
      args,\n                                       butil::Arena* arena)"
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:417,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_command.cpp:417,1
    - Dst: std::isalpha
      Src: /src/brpc/src/brpc/redis_command.cpp:424,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:424,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:439,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/redis_command.cpp:440,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/redis_command.cpp:447,1
    - Dst: FindCRLF
      Src: /src/brpc/src/brpc/redis_command.cpp:448,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:450,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:454,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:456,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:462,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:468,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:474,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:477,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:481,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/redis_command.cpp:491,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:491,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:492,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:494,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:494,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:496,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:496,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:499,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:509,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:509,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:510,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:511,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:511,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:518,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:518,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:519,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:520,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:520,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:523,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:532,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:534,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_command.cpp:540,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:542,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:553,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:559,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:561,1
    - Dst: resize
      Src: /src/brpc/src/brpc/redis_command.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:572,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:583,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:588,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:592,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:596,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:600,1
    - Dst: set
      Src: /src/brpc/src/brpc/redis_command.cpp:602,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:606,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:606,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:610,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:612,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 155
    argCount: 3
    argNames:
    - ' buf'
    - arena
    - err
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    - ParseError*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 620
    functionName: brpc::RedisCommandParser::ConsumeImpl
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 1
    functionsReached:
    - set
    - static_cast<unsigned char>
    - LOG
    - static_cast<size_t>
    - pop_front
    - std::isalpha
    - fetch1
    - resize
    - strtoll
    - memcpy
    - butil::BasicStringPiece::BasicStringPiece
    - tolower
    - size
    - static_cast<char*>
    - static_cast<const char *>
    - copy_to
    - push_back
    - memcmp
    - butil::Arena*::allocate
    - cutn
    - static_cast<char *>
    - FindCRLF
    linkageType: ''
    returnType: RedisCommandConsumeState
    signature: "RedisCommandConsumeState RedisCommandParser::ConsumeImpl(butil::IOBuf&
      buf,\n                                                         butil::Arena*
      arena,\n                                                         ParseError*
      err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/redis_command.cpp:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 622
    functionDepth: 1
    functionLinenumber: 622
    functionLinenumberEnd: 627
    functionName: brpc::RedisCommandParser::Reset
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 5
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::Reset()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fast_memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:62,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - outbuf
    - d
    argTypes:
    - char*
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 64
    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:73,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:76,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - std::string
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 70
    functionDepth: 2
    functionLinenumber: 70
    functionLinenumberEnd: 77
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 4
    functionsReached:
    - brpc::AppendDecimal
    - append
    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:81,1
    - Dst: append
      Src: /src/brpc/src/brpc/redis_command.cpp:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - ' buf'
    - fc
    - value
    argTypes:
    - butil::IOBuf
    - char
    - unsigned long
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 78
    functionDepth: 2
    functionLinenumber: 78
    functionLinenumberEnd: 85
    functionName: brpc::AppendHeader
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 4
    functionsReached:
    - brpc::AppendDecimal
    - append
    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:88,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/redis_command.cpp:88,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:89,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:90,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/redis_command.cpp:91,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 3
    argNames:
    - out
    - compbuf
    - ncomp
    argTypes:
    - std::string*
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 87
    functionDepth: 3
    functionLinenumber: 87
    functionLinenumberEnd: 93
    functionName: brpc::FlushComponent
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - std::string*::append
    - std::string*::clear
    - 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:104,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:106,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:108,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:110,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:120,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:121,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:122,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:128,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:129,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:132,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:132,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:137,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:138,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:141,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:144,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:147,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:155,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/redis_command.cpp:156,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:158,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:163,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:164,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:166,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:171,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:184,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:187,1
    - Dst: isdigit
      Src: /src/brpc/src/brpc/redis_command.cpp:192,1
    - Dst: va_copy
      Src: /src/brpc/src/brpc/redis_command.cpp:196,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:199,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:205,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:213,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:223,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:233,1
    - Dst: strchr
      Src: /src/brpc/src/brpc/redis_command.cpp:243,1
    - Dst: va_arg
      Src: /src/brpc/src/brpc/redis_command.cpp:244,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:251,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:252,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:258,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_command.cpp:260,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/redis_command.cpp:262,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:268,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:278,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:280,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:281,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:285,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:286,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/redis_command.cpp:289,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:293,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:294,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:295,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 153
    argCount: 3
    argNames:
    - outbuf
    - fmt
    - ap
    argTypes:
    - butil::IOBuf*
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 101
    functionDepth: 4
    functionLinenumber: 101
    functionLinenumberEnd: 296
    functionName: brpc::RedisCommandFormatV
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 1
    functionsReached:
    - strlen
    - std::string::back
    - butil::Status::OK
    - va_end
    - va_arg
    - std::string::append
    - std::min
    - brpc::AppendHeader
    - BuiltinServiceTest::TestStatus
    - LOG_IF
    - strchr
    - std::string::empty
    - memcpy
    - std::string::push_back
    - isdigit
    - std::string::pop_back
    - va_copy
    - vsnprintf
    - brpc::FlushComponent
    - butil::IOBuf*::append
    - std::string::reserve
    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:300,1
    - Dst: brpc::RedisCommandFormatV
      Src: /src/brpc/src/brpc/redis_command.cpp:301,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_command.cpp:302,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - fmt
    argTypes:
    - butil::IOBuf*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 298
    functionDepth: 5
    functionLinenumber: 298
    functionLinenumberEnd: 304
    functionName: brpc::RedisCommandFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - brpc::RedisCommandFormatV
    - va_end
    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:309,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:311,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:313,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_command.cpp:315,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:318,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:319,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:319,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:319,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:322,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:323,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:324,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:330,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:331,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:334,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/redis_command.cpp:334,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/redis_command.cpp:339,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:340,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:343,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:346,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:349,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:354,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:354,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/redis_command.cpp:356,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:356,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:356,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/redis_command.cpp:357,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:358,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_command.cpp:361,1
    - Dst: brpc::FlushComponent
      Src: /src/brpc/src/brpc/redis_command.cpp:362,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:365,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:366,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:367,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 47
    argCount: 2
    argNames:
    - outbuf
    - ' cmd'
    argTypes:
    - butil::IOBuf*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 306
    functionDepth: 4
    functionLinenumber: 306
    functionLinenumberEnd: 368
    functionName: brpc::RedisCommandNoFormat
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - brpc::FlushComponent
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf*::append
    - std::string::empty
    - std::string::back
    - butil::Status::OK
    - std::min
    - std::string::push_back
    - brpc::size
    - std::string::pop_back
    - brpc::AppendHeader
    - data
    - std::string::reserve
    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:374,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:376,1
    - Dst: brpc::AppendHeader
      Src: /src/brpc/src/brpc/redis_command.cpp:378,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:378,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:379,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_command.cpp:379,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_command.cpp:379,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_command.cpp:380,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/redis_command.cpp:382,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: 383
      start: 370
    functionDepth: 3
    functionLinenumber: 370
    functionLinenumberEnd: 383
    functionName: brpc::RedisCommandByComponents
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - butil::Status::OK
    - brpc::size
    - brpc::AppendHeader
    - data
    - 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: 388
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 388
    functionName: brpc::RedisCommandParser::RedisCommandParser
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 9
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisCommandParser::RedisCommandParser()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:391,1
    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: 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: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisCommandParser::ConsumeImpl
      Src: /src/brpc/src/brpc/redis_command.cpp:399,1
    - Dst: std::vector<butil::StringPiece>*::swap
      Src: /src/brpc/src/brpc/redis_command.cpp:409,1
    - Dst: brpc::RedisCommandParser::Reset
      Src: /src/brpc/src/brpc/redis_command.cpp:410,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 3
    argNames:
    - ' buf'
    - args
    - arena
    argTypes:
    - butil::IOBuf
    - std::vector<butil::StringPiece>*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 394
    functionDepth: 2
    functionLinenumber: 394
    functionLinenumberEnd: 412
    functionName: brpc::RedisCommandParser::Consume
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 9
    functionsReached:
    - std::vector<butil::StringPiece>*::swap
    - brpc::RedisCommandParser::ConsumeImpl
    - brpc::RedisCommandParser::Reset
    linkageType: ''
    returnType: ParseError
    signature: "ParseError RedisCommandParser::Consume(butil::IOBuf& buf,\n                                       std::vector<butil::StringPiece>*
      args,\n                                       butil::Arena* arena)"
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:417,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_command.cpp:417,1
    - Dst: std::isalpha
      Src: /src/brpc/src/brpc/redis_command.cpp:424,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:424,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:439,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/redis_command.cpp:440,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/redis_command.cpp:447,1
    - Dst: FindCRLF
      Src: /src/brpc/src/brpc/redis_command.cpp:448,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:450,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:454,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:456,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:462,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:468,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:474,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:474,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:477,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:481,1
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/redis_command.cpp:491,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:491,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:492,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:494,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:494,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:496,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:496,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:499,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:509,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:509,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:510,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:511,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:511,1
    - Dst: static_cast<char *>
      Src: /src/brpc/src/brpc/redis_command.cpp:518,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:518,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_command.cpp:519,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_command.cpp:520,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:520,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:523,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_command.cpp:532,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_command.cpp:534,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_command.cpp:540,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:542,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:553,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:559,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:561,1
    - Dst: resize
      Src: /src/brpc/src/brpc/redis_command.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:572,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:578,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:583,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_command.cpp:588,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_command.cpp:592,1
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/redis_command.cpp:593,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:596,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:600,1
    - Dst: set
      Src: /src/brpc/src/brpc/redis_command.cpp:602,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/redis_command.cpp:606,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_command.cpp:606,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_command.cpp:610,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_command.cpp:612,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 155
    argCount: 3
    argNames:
    - ' buf'
    - arena
    - err
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    - ParseError*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 620
      start: 414
    functionDepth: 1
    functionLinenumber: 414
    functionLinenumberEnd: 620
    functionName: brpc::RedisCommandParser::ConsumeImpl
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 2
    functionsReached:
    - set
    - static_cast<unsigned char>
    - LOG
    - static_cast<size_t>
    - pop_front
    - std::isalpha
    - fetch1
    - resize
    - strtoll
    - memcpy
    - butil::BasicStringPiece::BasicStringPiece
    - tolower
    - size
    - static_cast<char*>
    - static_cast<const char *>
    - copy_to
    - push_back
    - memcmp
    - butil::Arena*::allocate
    - cutn
    - static_cast<char *>
    - FindCRLF
    linkageType: ''
    returnType: RedisCommandConsumeState
    signature: "RedisCommandConsumeState RedisCommandParser::ConsumeImpl(butil::IOBuf&
      buf,\n                                                         butil::Arena*
      arena,\n                                                         ParseError*
      err)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/redis_command.cpp:626,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 622
    functionDepth: 1
    functionLinenumber: 622
    functionLinenumberEnd: 627
    functionName: brpc::RedisCommandParser::Reset
    functionSourceFile: /src/brpc/src/brpc/redis_command.cpp
    functionUses: 6
    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_usleep
    - bthread_stopped
    - GetServers
    - std::vector::clear
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    - NamingServiceActions*::ResetServers
    - PLOG
    - bthread_self
    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_usleep
    - bthread_stopped
    - GetServers
    - std::vector::clear
    - brpc::PeriodicNamingService::GetNamingServiceAccessIntervalMs
    - NamingServiceActions*::ResetServers
    - PLOG
    - bthread_self
    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: 464
    functionsReached:
    - brpc::Controller::ResetPods
    - pthread_once
    - CHECK_EQ
    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: 464
    functionsReached:
    - brpc::Controller::ResetPods
    - pthread_once
    - CHECK_EQ
    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:
    - ResetNonPods
    - Count
    - LOG
    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: lock
      Src: /src/brpc/src/brpc/controller.cpp:186,1
    - 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: reset
      Src: /src/brpc/src/brpc/controller.cpp:189,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:190,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:191,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:192,1
    - Dst: _session_local_data_pool::Return
      Src: /src/brpc/src/brpc/controller.cpp:194,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:196,1
    - Dst: brpc::Controller::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:199,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/controller.cpp:200,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:200,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:203,1
    - Dst: DestroyParallelChannelDone
      Src: /src/brpc/src/brpc/controller.cpp:206,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:209,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:210,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/src/brpc/controller.cpp:211,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:212,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:217,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:218,1
    - Dst: MarkRPCAsDone
      Src: /src/brpc/src/brpc/controller.cpp:220,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/controller.cpp:220,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:221,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:224,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:229,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:230,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:232,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:235,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:236,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:239,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 185
    functionDepth: 2
    functionLinenumber: 185
    functionLinenumberEnd: 240
    functionName: brpc::Controller::ResetNonPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - bthread_id_error
    - brpc::Controller::has_progressive_reader
    - _session_local_data_pool::Return
    - brpc::Controller::Reset
    - CHECK_NE
    - brpc::ExcludedServers::Destroy
    - bthread_id_cancel
    - brpc::Controller::ReadProgressiveAttachmentBy
    - CHECK
    - pthread_once
    - butil::EndPoint
    - DestroyParallelChannelDone
    - clear
    - butil::cpuwide_time_us
    - brpc::Controller::Failed
    - brpc::Controller::is_used_by_rpc
    - lock
    - reset
    - MarkRPCAsDone
    - brpc::Span::Submit
    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:247,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:277,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:298,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 242
    functionDepth: 2
    functionLinenumber: 242
    functionLinenumberEnd: 304
    functionName: brpc::Controller::ResetPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - brpc::Controller::Reset
    - clear
    - brpc::Controller::set_pb_bytes_to_base64
    linkageType: ''
    returnType: void
    signature: void Controller::ResetPods()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller::Call*::sending_sock::release
      Src: /src/brpc/src/brpc/controller.cpp:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Controller::Call*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 322
    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:325,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 326
    functionName: Controller::Call::~Call()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - get
    - CHECK
    linkageType: ''
    returnType: void
    signature: void Controller::Call::~Call()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 337
    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:345,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 347
    functionName: brpc::Controller::set_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 28
    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:354,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 356
    functionName: brpc::Controller::set_backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 8
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_backup_request_ms(int64_t timeout_ms)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetBackupRequestMs
      Src: /src/brpc/src/brpc/controller.cpp:361,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:371,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 374
    functionName: brpc::Controller::backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - GetBackupRequestMs
    - LOG
    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:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - max_retry
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 385
    functionName: brpc::Controller::set_max_retry
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 12
    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:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 390
    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:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 395
    functionName: brpc::Controller::Failed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 303
    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: 399
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 399
    functionName: brpc::Controller::ErrorText
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 302
    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:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 401
    functionDepth: 1
    functionLinenumber: 401
    functionLinenumberEnd: 403
    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:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 409
    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:416,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:418,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/controller.cpp:420,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:421,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:421,1
    - Dst: MD5
      Src: /src/brpc/src/brpc/controller.cpp:423,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:425,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:426,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:428,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:430,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:431,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:431,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 412
    functionDepth: 2
    functionLinenumber: 412
    functionLinenumberEnd: 433
    functionName: brpc::Controller::AppendServerIdentiy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - MD5
    - butil::string_appendf
    - reserve
    - brpc::Controller::is_security_mode
    - listen_address
    - snprintf
    - butil::my_ip_cstr
    - push_back
    - size
    linkageType: ''
    returnType: void
    signature: void Controller::AppendServerIdentiy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:437,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:438,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:439,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/controller.cpp:441,1
    - Dst: brpc::ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/controller.cpp:442,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:442,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/controller.cpp:444,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:449,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:450,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:450,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 453
    functionName: brpc::UpdateResponseHeader
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller*::request_protocol
    - brpc::ErrorCodeToStatusCode
    - DCHECK
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - Controller*::response_attachment
    - Controller*::http_response
    - Controller*::server
    - Controller*::Failed
    linkageType: ''
    returnType: void
    signature: void UpdateResponseHeader(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:457,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:458,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:461,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:463,1
    - Dst: append
      Src: /src/brpc/src/brpc/controller.cpp:465,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:466,1
    - Dst: auto::set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:467,1
    - Dst: auto::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:468,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' reason'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 455
    functionDepth: 3
    functionLinenumber: 455
    functionLinenumberEnd: 471
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - brpc::Controller::AppendServerIdentiy
    - auto::Annotate
    - auto::set_error_code
    - append
    - empty
    - lock
    - UpdateResponseHeader
    - push_back
    linkageType: ''
    returnType: void
    signature: void Controller::SetFailed(const std::string& reason)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:475,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:479,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:480,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:483,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:485,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:487,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:489,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:492,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:493,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:494,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:495,1
    - Dst: auto::set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:496,1
    - Dst: auto::AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:497,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:497,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:499,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 473
    functionDepth: 3
    functionLinenumber: 473
    functionLinenumberEnd: 500
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - brpc::Controller::AppendServerIdentiy
    - va_start
    - va_end
    - CHECK
    - auto::set_error_code
    - auto::AnnotateCStr
    - empty
    - butil::string_vappendf
    - lock
    - UpdateResponseHeader
    - c_str
    - push_back
    - size
    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:506,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:507,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:508,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:511,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:513,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:515,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:517,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:520,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:521,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:522,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:523,1
    - Dst: auto::set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:524,1
    - Dst: auto::AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:525,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:525,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:527,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - reason_fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 502
    functionDepth: 3
    functionLinenumber: 502
    functionLinenumberEnd: 528
    functionName: brpc::Controller::CloseConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - brpc::Controller::AppendServerIdentiy
    - va_start
    - va_end
    - brpc::Controller::add_flag
    - auto::set_error_code
    - auto::AnnotateCStr
    - empty
    - butil::string_vappendf
    - lock
    - UpdateResponseHeader
    - c_str
    - push_back
    - size
    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:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 533
    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: 538
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 538
    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:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 543
    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: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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 545
    functionDepth: 6
    functionLinenumber: 545
    functionLinenumberEnd: 549
    functionName: brpc::RunOnCancelThread::Run
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - bthread_id_unlock_and_destroy
    - brpc::RunOnCancelThread::Run
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:560,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:561,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:561,1
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:568,1
    - Dst: RunOnCancelThread::RunOnCancelThread
      Src: /src/brpc/src/brpc/controller.cpp:567,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:570,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/controller.cpp:570,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: 572
      start: 556
    functionDepth: 6
    functionLinenumber: 556
    functionLinenumberEnd: 572
    functionName: brpc::Controller::RunOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<google::protobuf::Closure*>
    - RunOnCancelThread::RunOnCancelThread
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - bthread_start_urgent
    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:576,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:582,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:586,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/controller.cpp:590,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/controller.cpp:591,1
    - Dst: SocketUniquePtr::NotifyOnFailed
      Src: /src/brpc/src/brpc/controller.cpp:594,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/controller.cpp:595,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - callback
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 574
    functionDepth: 3
    functionLinenumber: 574
    functionLinenumberEnd: 596
    functionName: brpc::Controller::NotifyOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - ClosureGuard::release
    - SocketUniquePtr::NotifyOnFailed
    - PLOG
    - brpc::SetTrackMeAddress
    - LOG
    - bthread_id_create
    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:599,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 598
    functionDepth: 5
    functionLinenumber: 598
    functionLinenumberEnd: 600
    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:603,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 602
    functionDepth: 5
    functionLinenumber: 602
    functionLinenumberEnd: 604
    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:608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 609
    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: 24
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:615,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:616,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:617,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:622,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:628,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:629,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:629,1
    - Dst: brpc::Controller::is_ending_rpc
      Src: /src/brpc/src/brpc/controller.cpp:633,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:638,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:639,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:639,1
    - Dst: DoBackup
      Src: /src/brpc/src/brpc/controller.cpp:648,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:651,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:651,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:657,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/controller.cpp:658,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:660,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:664,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:667,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:669,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:670,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:672,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:676,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:679,1
    - Dst: Call::Call
      Src: /src/brpc/src/brpc/controller.cpp:680,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:682,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:686,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:687,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:687,1
    - Dst: DefaultRetryPolicy
      Src: /src/brpc/src/brpc/controller.cpp:689,1
    - Dst: auto::DoRetry
      Src: /src/brpc/src/brpc/controller.cpp:690,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:694,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:694,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:695,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:697,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:698,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:700,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:704,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:706,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/controller.cpp:712,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:714,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/controller.cpp:717,1
    - Dst: auto::GetBackoffTimeMs
      Src: /src/brpc/src/brpc/controller.cpp:718,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:720,1
    - Dst: auto::CanRetryBackoffInPthread
      Src: /src/brpc/src/brpc/controller.cpp:722,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/brpc/controller.cpp:723,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/controller.cpp:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:726,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:730,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:730,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:761,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:762,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/controller.cpp:769,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:771,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:772,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:773,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:777,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:778,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:780,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 108
    argCount: 3
    argNames:
    - ' info'
    - new_bthread
    - saved_error
    argTypes:
    - CompletionInfo
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 611
    functionDepth: 5
    functionLinenumber: 611
    functionLinenumberEnd: 782
    functionName: brpc::Controller::OnVersionedRPCReturned
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::SetFailed
    - butil::gettimeofday_us
    - auto::CanRetryBackoffInPthread
    - DefaultRetryPolicy
    - bthread::TaskGroup*::is_current_pthread_task
    - brpc::Controller::EndRPC
    - std::min
    - LOG
    - bthread_attr_set_name
    - butil::microseconds_to_timespec
    - bthread_id_unlock
    - brpc::Controller::IssueRPC
    - Clear
    - CHECK_EQ
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - Add
    - brpc::Controller::current_id
    - bthread_timer_add
    - CHECK
    - brpc::Controller::add_flag
    - DoBackup
    - response_attachment
    - auto::DoRetry
    - bthread_id_about_to_destroy
    - brpc::Controller::is_ending_rpc
    - brpc::Controller::timeout_ms
    - Call::Call
    - brpc::Controller::get_id
    - brpc::Controller::SingleServer
    - auto::GetBackoffTimeMs
    - bthread_usleep
    - brpc::Controller::FailedInline
    - brpc::Controller::has_flag
    - brpc::ExcludedServers::Create
    - bthread_start_background
    - OnComplete
    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:785,1
    - Dst: Controller*::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:786,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 788
    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: 798
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 798
    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: 23
    BranchProfiles: []
    Callsites:
    - Dst: DestroyStreamUserData
      Src: /src/brpc/src/brpc/controller.cpp:807,1
    - Dst: AddRecentError
      Src: /src/brpc/src/brpc/controller.cpp:813,1
    - Dst: FeedbackCircuitBreaker
      Src: /src/brpc/src/brpc/controller.cpp:817,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:818,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/controller.cpp:822,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:830,1
    - Dst: id
      Src: /src/brpc/src/brpc/controller.cpp:831,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:832,1
    - Dst: Controller*::_bind_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:845,1
    - Dst: release
      Src: /src/brpc/src/brpc/controller.cpp:845,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:848,1
    - Dst: ReturnToPool
      Src: /src/brpc/src/brpc/controller.cpp:853,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:857,1
    - Dst: Controller*::_bind_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:866,1
    - Dst: release
      Src: /src/brpc/src/brpc/controller.cpp:866,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:869,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:871,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:874,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:877,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:885,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:892,1
    - Dst: SocketUniquePtr::SetLogOff
      Src: /src/brpc/src/brpc/controller.cpp:894,1
    - Dst: Controller*::_lb::Feedback
      Src: /src/brpc/src/brpc/controller.cpp:901,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:905,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 64
    argCount: 4
    argNames:
    - c
    - error_code
    - responded
    - end_of_rpc
    argTypes:
    - Controller*
    - int
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 906
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 906
    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:
    - Socket::SetFailed
    - OnProgressiveReadCompleted
    - SetFailed
    - ReturnToPool
    - butil::gettimeofday_us
    - Controller*::_lb::Feedback
    - release
    - is_read_progressive
    - brpc::SetTrackMeAddress
    - FeedbackCircuitBreaker
    - Controller*::connection_type
    - does_error_affect_main_socket
    - DestroyStreamUserData
    - SocketUniquePtr::SetLogOff
    - reset
    - AddRecentError
    - id
    - Controller*::_bind_sock::reset
    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: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:909,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/controller.cpp:912,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:917,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:919,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:920,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:932,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:937,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:937,1
    - Dst: brpc::Controller::bind_sock_action
      Src: /src/brpc/src/brpc/controller.cpp:940,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:941,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:948,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:949,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:952,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:954,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:957,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:958,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:961,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:961,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:962,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:963,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:966,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:967,1
    - Dst: DestroyStreamCreator
      Src: /src/brpc/src/brpc/controller.cpp:975,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:981,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:984,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:985,1
    - Dst: auto::set_ending_cid
      Src: /src/brpc/src/brpc/controller.cpp:986,1
    - Dst: auto::set_async
      Src: /src/brpc/src/brpc/controller.cpp:987,1
    - Dst: brpc::Controller::SubmitSpan
      Src: /src/brpc/src/brpc/controller.cpp:991,1
    - Dst: DoNothing
      Src: /src/brpc/src/brpc/controller.cpp:998,1
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:1010,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:1010,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: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:1019,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1020,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1020,1
    - Dst: RunUserCode
      Src: /src/brpc/src/brpc/controller.cpp:1023,1
    - Dst: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:1030,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1031,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1031,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 70
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CompletionInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1033
      start: 908
    functionDepth: 6
    functionLinenumber: 908
    functionLinenumberEnd: 1033
    functionName: brpc::Controller::EndRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - butil::gettimeofday_us
    - bthread_about_to_quit
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - brpc::Controller::current_id
    - Run
    - brpc::Controller::add_flag
    - CHECK
    - sending_sock::get
    - brpc::Controller::HandleStreamConnection
    - DestroyStreamCreator
    - bthread_timer_del
    - DoNothing
    - RunUserCode
    - clear
    - lock
    - sending_sock::local_side
    - reset
    - sending_sock::remote_side
    - auto::set_ending_cid
    - brpc::Controller::get_id
    - auto::set_async
    - brpc::Controller::SubmitSpan
    - brpc::Controller::bind_sock_action
    - brpc::Controller::has_flag
    - OnComplete
    - brpc::Controller::OnRPCEnd
    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:1038,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - end_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1040
      start: 1035
    functionDepth: 1
    functionLinenumber: 1035
    functionLinenumberEnd: 1040
    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:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1042
    functionDepth: 0
    functionLinenumber: 1042
    functionLinenumberEnd: 1044
    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:1049,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:1049,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1051,1
    - Dst: Run
      Src: /src/brpc/src/brpc/controller.cpp:1052,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1055,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1055,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1057
      start: 1046
    functionDepth: 6
    functionLinenumber: 1046
    functionLinenumberEnd: 1057
    functionName: brpc::Controller::DoneInBackupThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Run
    - bthread_id_unlock_and_destroy
    - brpc::Controller::has_flag
    - CHECK_EQ
    - brpc::Controller::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void Controller::DoneInBackupThread()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1060,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1061,1
    - Dst: auto::set_start_callback_us
      Src: /src/brpc/src/brpc/controller.cpp:1062,1
    - Dst: auto::local_parent
      Src: /src/brpc/src/brpc/controller.cpp:1063,1
    - Dst: auto::is_active
      Src: /src/brpc/src/brpc/controller.cpp:1064,1
    - Dst: auto::AsParent
      Src: /src/brpc/src/brpc/controller.cpp:1065,1
    - Dst: brpc::Span::Submit
      Src: /src/brpc/src/brpc/controller.cpp:1068,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1069,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1071
      start: 1059
    functionDepth: 1
    functionLinenumber: 1059
    functionLinenumberEnd: 1071
    functionName: brpc::Controller::SubmitSpan
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - auto::AsParent
    - auto::local_parent
    - auto::is_active
    - butil::cpuwide_time_us
    - brpc::Span::Submit
    - lock
    - reset
    - auto::set_start_callback_us
    linkageType: ''
    returnType: void
    signature: void Controller::SubmitSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1074,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1076,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:1076,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1078,1
    - Dst: brpc::Controller::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/controller.cpp:1086,1
    - Dst: brpc::Controller::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1087,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1088
      start: 1073
    functionDepth: 6
    functionLinenumber: 1073
    functionLinenumberEnd: 1088
    functionName: brpc::Controller::HandleSendFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::SetFailed
    - brpc::Controller::current_id
    - brpc::Controller::is_done_allowed_to_run_in_place
    - LOG
    - brpc::Controller::FailedInline
    - brpc::Controller::ErrorText
    - brpc::Controller::OnVersionedRPCReturned
    linkageType: ''
    returnType: void
    signature: void Controller::HandleSendFailed()
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1109,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:1114,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1115,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1117,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1117,1
    - Dst: brpc::Controller::has_enabled_circuit_breaker
      Src: /src/brpc/src/brpc/controller.cpp:1123,1
    - Dst: brpc::Controller::bind_sock_action
      Src: /src/brpc/src/brpc/controller.cpp:1126,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1128,1
    - Dst: release
      Src: /src/brpc/src/brpc/controller.cpp:1128,1
    - Dst: brpc::Controller::is_health_check_call
      Src: /src/brpc/src/brpc/controller.cpp:1129,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/controller.cpp:1129,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1130,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1131,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1132,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1133,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1135,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:1136,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1139,1
    - Dst: brpc::Controller::is_health_check_call
      Src: /src/brpc/src/brpc/controller.cpp:1140,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/controller.cpp:1140,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1141,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1142,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1143,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1144,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1150,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/controller.cpp:1152,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/controller.cpp:1157,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1158,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/controller.cpp:1158,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1159,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1162,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1167,1
    - Dst: OnCreatingStream
      Src: /src/brpc/src/brpc/controller.cpp:1171,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1172,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1173,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1176,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1176,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1179,1
    - Dst: auto::set_remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1181,1
    - Dst: auto::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1183,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1184,1
    - Dst: sending_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:1191,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/controller.cpp:1191,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1198,1
    - Dst: brpc::Controller::bind_sock_action
      Src: /src/brpc/src/brpc/controller.cpp:1201,1
    - Dst: sending_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:1203,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/controller.cpp:1203,1
    - Dst: SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/src/brpc/controller.cpp:1205,1
    - Dst: SocketUniquePtr::GetShortSocket
      Src: /src/brpc/src/brpc/controller.cpp:1207,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1209,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1210,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1211,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1214,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1215,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/controller.cpp:1216,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1217,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1223,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1227,1
    - Dst: SocketUniquePtr::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1228,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1230,1
    - Dst: sending_sock::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1233,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1235,1
    - Dst: sending_sock::read_will_be_progressive
      Src: /src/brpc/src/brpc/controller.cpp:1238,1
    - Dst: sending_sock::FightAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1248,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1251,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1252,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/controller.cpp:1257,1
    - Dst: _pack_request
      Src: /src/brpc/src/brpc/controller.cpp:1259,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1263,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1267,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1267,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1269,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1276,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:1277,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1280,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1290,1
    - Dst: brpc::Controller::write_to_socket_in_background
      Src: /src/brpc/src/brpc/controller.cpp:1291,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1295,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/controller.cpp:1296,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1298,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/controller.cpp:1300,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1301,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1303,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/controller.cpp:1305,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1305,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/controller.cpp:1306,1
    - Dst: auto::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1308,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1316,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1318,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1318,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 141
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1319
      start: 1090
    functionDepth: 7
    functionLinenumber: 1090
    functionLinenumberEnd: 1319
    functionName: brpc::Controller::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - sending_sock::reset
    - brpc::Controller::SetFailed
    - SocketUniquePtr::GetShortSocket
    - SocketUniquePtr::GetPooledSocket
    - sending_sock::set_type_of_service
    - brpc::Controller::is_response_read_progressively
    - std::min
    - brpc::Controller::HandleSendFailed
    - butil::microseconds_to_timespec
    - auto::set_request_size
    - bthread_id_unlock
    - brpc::Controller::IssueRPC
    - SocketUniquePtr::remote_side
    - SocketUniquePtr::id
    - CHECK_EQ
    - sending_sock::read_will_be_progressive
    - butil::IOBuf::size
    - brpc::Controller::current_id
    - SocketUniquePtr::release
    - SocketUniquePtr::IsAvailable
    - sending_sock::FightAuthentication
    - auto::set_remote_side
    - sending_sock::Write
    - SocketUniquePtr::reset
    - ConnectionTypeToString
    - SocketUniquePtr::set_preferred_index
    - SocketUniquePtr::preferred_index
    - sending_sock::set_preferred_index
    - SocketMessagePtr::EstimatedByteSize
    - _pack_request
    - auto::Annotate
    - brpc::Controller::write_to_socket_in_background
    - brpc::Controller::has_request_code
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - lock
    - brpc::Controller::is_health_check_call
    - std::ostringstream::str
    - auto::set_sent_us
    - brpc::Controller::SingleServer
    - sending_sock::SetAuthentication
    - endpoint2str
    - SelectServer
    - berror
    - release
    - brpc::Controller::ErrorCode
    - brpc::Controller::FailedInline
    - brpc::Controller::has_enabled_circuit_breaker
    - Describe
    - brpc::Controller::bind_sock_action
    - OnCreatingStream
    - brpc::Controller::has_flag
    - butil::IOBuf::IOBuf
    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:1323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1321
    functionDepth: 1
    functionLinenumber: 1321
    functionLinenumberEnd: 1329
    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:1333,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:1334,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1340,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1342,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1344,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1346,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:1347,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1348,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1348,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1350,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1351,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1352,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1352,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1353,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1354,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1354,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1356,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1356,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1357,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1357,1
    - Dst: std::unique_ptr::cntl::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1368,1
    - Dst: OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
      Src: /src/brpc/src/brpc/controller.cpp:1372,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:1375,1
    - Dst: func
      Src: /src/brpc/src/brpc/controller.cpp:1376,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: 1379
      start: 1331
    functionDepth: 5
    functionLinenumber: 1331
    functionLinenumberEnd: 1379
    functionName: brpc::Controller::HandleSocketFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - Controller*::is_used_by_rpc
    - Controller*::timeout_ms
    - OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
    - berror
    - Controller*::remote_side
    - std::unique_ptr::cntl::OnVersionedRPCReturned
    - Controller*::backup_request_ms
    - Controller*::ErrorCode
    - bthread_id_unlock
    - butil::endpoint2str
    - empty
    - func
    - Controller*::SetFailed
    - c_str
    - bthread_start_background
    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:1384,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1392,1
    - Dst: bthread_id_create2
      Src: /src/brpc/src/brpc/controller.cpp:1392,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/brpc/controller.cpp:1393,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:1395,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1399
      start: 1381
    functionDepth: 3
    functionLinenumber: 1381
    functionLinenumberEnd: 1399
    functionName: brpc::Controller::call_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 69
    functionsReached:
    - bthread_id_cancel
    - bthread_id_create2
    - butil::atomic*::compare_exchange_strong
    - CHECK_EQ
    - butil::atomic*::load
    linkageType: ''
    returnType: CallId
    signature: CallId Controller::call_id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::request_checksum_attachment
      Src: /src/brpc/src/brpc/controller.cpp:1410,1
    - Dst: brpc::Controller::log_id
      Src: /src/brpc/src/brpc/controller.cpp:1411,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - ClientSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1414
      start: 1401
    functionDepth: 2
    functionLinenumber: 1401
    functionLinenumberEnd: 1414
    functionName: brpc::Controller::SaveClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_request_code
    - brpc::Controller::log_id
    - brpc::Controller::request_checksum_attachment
    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:1417,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1418,1
    - Dst: brpc::Controller::set_backup_request_policy
      Src: /src/brpc/src/brpc/controller.cpp:1419,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/src/brpc/controller.cpp:1420,1
    - Dst: brpc::Controller::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1421,1
    - Dst: brpc::Controller::set_connection_type
      Src: /src/brpc/src/brpc/controller.cpp:1422,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/src/brpc/controller.cpp:1423,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/src/brpc/controller.cpp:1424,1
    - Dst: brpc::Controller::set_request_checksum_attachment
      Src: /src/brpc/src/brpc/controller.cpp:1425,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/src/brpc/controller.cpp:1426,1
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.cpp:1427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - ClientSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1429
      start: 1416
    functionDepth: 2
    functionLinenumber: 1416
    functionLinenumberEnd: 1429
    functionName: brpc::Controller::ApplyClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::set_flag
    - brpc::Controller::set_request_checksum_type
    - brpc::Controller::set_connection_type
    - brpc::Controller::set_backup_request_ms
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::set_type_of_service
    - brpc::Controller::set_request_checksum_attachment
    - brpc::Controller::set_log_id
    - brpc::Controller::set_backup_request_policy
    - 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:1434,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1437
      start: 1431
    functionDepth: 0
    functionLinenumber: 1431
    functionLinenumberEnd: 1437
    functionName: brpc::Controller::sub_count
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 44
    functionsReached:
    - GetSubControllerOfSelectiveChannel
    linkageType: ''
    returnType: int
    signature: int Controller::sub_count() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetSubControllerOfParallelChannel
      Src: /src/brpc/src/brpc/controller.cpp:1441,1
    - Dst: GetSubControllerOfSelectiveChannel
      Src: /src/brpc/src/brpc/controller.cpp:1444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1447
      start: 1439
    functionDepth: 0
    functionLinenumber: 1439
    functionLinenumberEnd: 1447
    functionName: brpc::Controller::sub
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 42
    functionsReached:
    - GetSubControllerOfParallelChannel
    - GetSubControllerOfSelectiveChannel
    linkageType: ''
    returnType: Controller
    signature: Controller * Controller::sub(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1450,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/controller.cpp:1451,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1454
      start: 1449
    functionDepth: 0
    functionLinenumber: 1449
    functionLinenumberEnd: 1454
    functionName: brpc::Controller::trace_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - auto::trace_id
    - lock
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t Controller::trace_id() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1457,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/controller.cpp:1458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1456
    functionDepth: 0
    functionLinenumber: 1456
    functionLinenumberEnd: 1461
    functionName: brpc::Controller::span_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - auto::span_id
    - lock
    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:1470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1463
    functionDepth: 0
    functionLinenumber: 1463
    functionLinenumberEnd: 1475
    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: 11
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1478,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:1479,1
    - Dst: brpc::Controller::has_remote_stream
      Src: /src/brpc/src/brpc/controller.cpp:1479,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:1482,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1484,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1486,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1487,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1491,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1492,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1493,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1501,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1502,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1503,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1505,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1506,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1507,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1508,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1509,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1514,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1515,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/controller.cpp:1517,1
    - Dst: mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1517,1
    - Dst: clear_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1518,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1521,1
    - Dst: set_stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1522,1
    - Dst: Stream*::SetHostSocket
      Src: /src/brpc/src/brpc/controller.cpp:1523,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1524,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 42
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1527
      start: 1477
    functionDepth: 4
    functionLinenumber: 1477
    functionLinenumberEnd: 1527
    functionName: brpc::Controller::HandleStreamConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::SetFailed
    - empty
    - brpc::Controller::has_remote_stream
    - conn
    - Stream*::SetConnected
    - extra_stream_ids
    - std::move
    - CHECK
    - c_str
    - size
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - set_stream_id
    - mutable_extra_stream_ids
    - stream_id
    - brpc::Controller::FailedInline
    - clear_extra_stream_ids
    - Stream*::SetHostSocket
    - brpc::Stream::SetFailed
    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:1532,1
    - Dst: length
      Src: /src/brpc/src/brpc/controller.cpp:1532,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/controller.cpp:1533,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1535,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1536,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1537,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1538,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1539,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/controller.cpp:1540,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 2
    argNames:
    - ' source'
    - output
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1543
      start: 1531
    functionDepth: 2
    functionLinenumber: 1531
    functionLinenumberEnd: 1543
    functionName: brpc::WebEscape
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - std::string*::push_back
    - brpc::size
    - length
    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:1547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' source'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1549
      start: 1545
    functionDepth: 1
    functionLinenumber: 1545
    functionLinenumberEnd: 1549
    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: 1554
      start: 1551
    functionDepth: 0
    functionLinenumber: 1551
    functionLinenumberEnd: 1554
    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: 1560
      start: 1556
    functionDepth: 0
    functionLinenumber: 1556
    functionLinenumberEnd: 1560
    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:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - sc
    argTypes:
    - StreamCreator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1568
      start: 1562
    functionDepth: 1
    functionLinenumber: 1562
    functionLinenumberEnd: 1568
    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:1572,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1573,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1581,1
    - Dst: sending_sock::ReAddress
      Src: /src/brpc/src/brpc/controller.cpp:1585,1
    - Dst: SocketUniquePtr::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/controller.cpp:1588,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1590,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/controller.cpp:1591,1
    - Dst: ProgressiveAttachment::ProgressiveAttachment
      Src: /src/brpc/src/brpc/controller.cpp:1590,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - stop_style
    argTypes:
    - StopStyle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1593
      start: 1570
    functionDepth: 1
    functionLinenumber: 1570
    functionLinenumberEnd: 1593
    functionName: brpc::Controller::CreateProgressiveAttachment
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::fail_me_at_server_stop
    - http_request
    - ProgressiveAttachment::ProgressiveAttachment
    - brpc::Controller::has_progressive_writer
    - LOG
    - sending_sock::ReAddress
    - reset
    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:1597,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1600,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1601,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1602,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1607,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1608,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:1610,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1612,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:1615,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:1616,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1617
      start: 1595
    functionDepth: 2
    functionLinenumber: 1595
    functionLinenumberEnd: 1617
    functionName: brpc::Controller::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 14
    functionsReached:
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Controller::is_response_read_progressively
    - brpc::Controller::has_progressive_reader
    - brpc::Controller::add_flag
    - LOG
    - ProgressiveReader*::OnEndOfMessage
    - 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: 1621
      start: 1619
    functionDepth: 0
    functionLinenumber: 1619
    functionLinenumberEnd: 1621
    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:1624,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/controller.cpp:1625,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1626
      start: 1623
    functionDepth: 1
    functionLinenumber: 1623
    functionLinenumberEnd: 1626
    functionName: brpc::Controller::is_ssl
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Socket*::is_ssl
    - sending_sock::get
    linkageType: ''
    returnType: bool
    signature: bool Controller::is_ssl() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1629,1
    - Dst: Socket*::GetPeerCertificate
      Src: /src/brpc/src/brpc/controller.cpp:1630,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1631
      start: 1628
    functionDepth: 1
    functionLinenumber: 1628
    functionLinenumberEnd: 1631
    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:1634,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/controller.cpp:1636,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/controller.cpp:1636,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: 1641
      start: 1633
    functionDepth: 1
    functionLinenumber: 1633
    functionLinenumberEnd: 1641
    functionName: brpc::Controller::GetSockOption
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Socket*::fd
    - sending_sock::get
    - getsockopt
    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:1645,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - req
    - res
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1648
      start: 1643
    functionDepth: 0
    functionLinenumber: 1643
    functionLinenumberEnd: 1648
    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:1664,1
    - Dst: s_prev_sigterm_handler
      Src: /src/brpc/src/brpc/controller.cpp:1667,1
    - Dst: s_prev_sighup_handler
      Src: /src/brpc/src/brpc/controller.cpp:1670,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - signo
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1661
    functionDepth: 0
    functionLinenumber: 1661
    functionLinenumberEnd: 1672
    functionName: brpc::quit_handler
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - s_prev_sighup_handler
    - s_prev_sigterm_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:1678,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1681,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1684,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1688,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1691,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1694,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1699,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1702,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1705,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1708
      start: 1676
    functionDepth: 1
    functionLinenumber: 1676
    functionLinenumberEnd: 1708
    functionName: brpc::RegisterQuitSignalOrDie
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    - signal
    - LOG
    linkageType: ''
    returnType: void
    signature: void RegisterQuitSignalOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:1711,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1713
      start: 1710
    functionDepth: 0
    functionLinenumber: 1710
    functionLinenumberEnd: 1713
    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:1716,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1717
      start: 1715
    functionDepth: 0
    functionLinenumber: 1715
    functionLinenumberEnd: 1717
    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: 1720
      start: 1720
    functionDepth: 0
    functionLinenumber: 1720
    functionLinenumberEnd: 1720
    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:1723,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1724
      start: 1722
    functionDepth: 0
    functionLinenumber: 1722
    functionLinenumberEnd: 1724
    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:1728,1
    - Dst: KVMap::KVMap
      Src: /src/brpc/src/brpc/controller.cpp:1728,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:1730,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1731
      start: 1726
    functionDepth: 1
    functionLinenumber: 1726
    functionLinenumberEnd: 1731
    functionName: '& Controller::SessionKV()'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - reset
    - get
    - KVMap::KVMap
    linkageType: ''
    returnType: KVMap
    signature: KVMap & Controller::SessionKV()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Count
      Src: /src/brpc/src/brpc/controller.cpp:1738,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1743,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1744,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1752,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1752,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1760,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1760,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1764
      start: 1737
    functionDepth: 1
    functionLinenumber: 1737
    functionLinenumberEnd: 1764
    functionName: brpc::Controller::FlushSessionKV
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Count
    - request_id
    - 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:1767,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - Controller::LogPrefixDummy
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1769
      start: 1766
    functionDepth: 0
    functionLinenumber: 1766
    functionLinenumberEnd: 1769
    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:1773,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1774,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1786
      start: 1771
    functionDepth: 0
    functionLinenumber: 1771
    functionLinenumberEnd: 1786
    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:
    - ' span'
    argTypes:
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1793
      start: 1789
    functionDepth: 0
    functionLinenumber: 1789
    functionLinenumberEnd: 1793
    functionName: "& ControllerPrivateAccessor::set_span(\n    const std::shared_ptr<Span>&
      span)"
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: "ControllerPrivateAccessor & ControllerPrivateAccessor::set_span(\n
      \   const std::shared_ptr<Span>& span)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Span*::shared_from_this
      Src: /src/brpc/src/brpc/controller.cpp:1797,1
    - Dst: _span::reset
      Src: /src/brpc/src/brpc/controller.cpp:1799,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - span
    argTypes:
    - Span*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1802
      start: 1795
    functionDepth: 1
    functionLinenumber: 1795
    functionLinenumberEnd: 1802
    functionName: '& ControllerPrivateAccessor::set_span(Span* span)'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Span*::shared_from_this
    - _span::reset
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & ControllerPrivateAccessor::set_span(Span*
      span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _span::lock
      Src: /src/brpc/src/brpc/controller.cpp:1805,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1806
      start: 1804
    functionDepth: 0
    functionLinenumber: 1804
    functionLinenumberEnd: 1806
    functionName: brpc::ControllerPrivateAccessor::span
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - _span::lock
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> ControllerPrivateAccessor::span() 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: 464
    functionsReached:
    - brpc::Controller::ResetPods
    - pthread_once
    - CHECK_EQ
    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: 464
    functionsReached:
    - brpc::Controller::ResetPods
    - pthread_once
    - CHECK_EQ
    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:
    - ResetNonPods
    - Count
    - LOG
    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: lock
      Src: /src/brpc/src/brpc/controller.cpp:186,1
    - 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: reset
      Src: /src/brpc/src/brpc/controller.cpp:189,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:190,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:191,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/controller.cpp:192,1
    - Dst: _session_local_data_pool::Return
      Src: /src/brpc/src/brpc/controller.cpp:194,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:196,1
    - Dst: brpc::Controller::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:199,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/controller.cpp:200,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:200,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/controller.cpp:203,1
    - Dst: DestroyParallelChannelDone
      Src: /src/brpc/src/brpc/controller.cpp:206,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:209,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:210,1
    - Dst: brpc::ExcludedServers::Destroy
      Src: /src/brpc/src/brpc/controller.cpp:211,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:212,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:217,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:218,1
    - Dst: MarkRPCAsDone
      Src: /src/brpc/src/brpc/controller.cpp:220,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/controller.cpp:220,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:221,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:224,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:229,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:230,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:232,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:235,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:236,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:239,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 185
    functionDepth: 3
    functionLinenumber: 185
    functionLinenumberEnd: 240
    functionName: brpc::Controller::ResetNonPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - bthread_id_error
    - brpc::Controller::has_progressive_reader
    - _session_local_data_pool::Return
    - brpc::Controller::Reset
    - CHECK_NE
    - brpc::ExcludedServers::Destroy
    - bthread_id_cancel
    - brpc::Controller::ReadProgressiveAttachmentBy
    - CHECK
    - pthread_once
    - butil::EndPoint
    - DestroyParallelChannelDone
    - clear
    - butil::cpuwide_time_us
    - brpc::Controller::Failed
    - brpc::Controller::is_used_by_rpc
    - lock
    - reset
    - MarkRPCAsDone
    - brpc::Span::Submit
    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:247,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/controller.cpp:277,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:298,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 58
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 242
    functionDepth: 2
    functionLinenumber: 242
    functionLinenumberEnd: 304
    functionName: brpc::Controller::ResetPods
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 6
    functionsReached:
    - brpc::Controller::Reset
    - clear
    - brpc::Controller::set_pb_bytes_to_base64
    linkageType: ''
    returnType: void
    signature: void Controller::ResetPods()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Controller::Call*::sending_sock::release
      Src: /src/brpc/src/brpc/controller.cpp:312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - rhs
    argTypes:
    - Controller::Call*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 322
    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:325,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:325,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 326
    functionName: Controller::Call::~Call()
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - get
    - CHECK
    linkageType: ''
    returnType: void
    signature: void Controller::Call::~Call()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 337
    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:345,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 347
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 347
    functionName: brpc::Controller::set_timeout_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 29
    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:354,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 349
    functionDepth: 1
    functionLinenumber: 349
    functionLinenumberEnd: 356
    functionName: brpc::Controller::set_backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 9
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void Controller::set_backup_request_ms(int64_t timeout_ms)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetBackupRequestMs
      Src: /src/brpc/src/brpc/controller.cpp:361,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:371,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 374
    functionName: brpc::Controller::backup_request_ms
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - GetBackupRequestMs
    - LOG
    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:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - max_retry
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 376
    functionDepth: 1
    functionLinenumber: 376
    functionLinenumberEnd: 385
    functionName: brpc::Controller::set_max_retry
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 13
    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:388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - log_id
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 387
    functionDepth: 1
    functionLinenumber: 387
    functionLinenumberEnd: 390
    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:394,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 393
    functionDepth: 1
    functionLinenumber: 393
    functionLinenumberEnd: 395
    functionName: brpc::Controller::Failed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 304
    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: 399
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 399
    functionName: brpc::Controller::ErrorText
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 303
    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:402,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 401
    functionDepth: 1
    functionLinenumber: 401
    functionLinenumberEnd: 403
    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:406,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 409
    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:416,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:417,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:418,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/controller.cpp:420,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:421,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:421,1
    - Dst: MD5
      Src: /src/brpc/src/brpc/controller.cpp:423,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:425,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:426,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:428,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:430,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/controller.cpp:431,1
    - Dst: listen_address
      Src: /src/brpc/src/brpc/controller.cpp:431,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 412
    functionDepth: 2
    functionLinenumber: 412
    functionLinenumberEnd: 433
    functionName: brpc::Controller::AppendServerIdentiy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 3
    functionsReached:
    - MD5
    - butil::string_appendf
    - reserve
    - brpc::Controller::is_security_mode
    - listen_address
    - snprintf
    - butil::my_ip_cstr
    - push_back
    - size
    linkageType: ''
    returnType: void
    signature: void Controller::AppendServerIdentiy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/controller.cpp:436,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:437,1
    - Dst: Controller*::request_protocol
      Src: /src/brpc/src/brpc/controller.cpp:438,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:439,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/controller.cpp:441,1
    - Dst: brpc::ErrorCodeToStatusCode
      Src: /src/brpc/src/brpc/controller.cpp:442,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:442,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/controller.cpp:444,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:449,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:450,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:450,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 435
    functionDepth: 1
    functionLinenumber: 435
    functionLinenumberEnd: 453
    functionName: brpc::UpdateResponseHeader
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Controller*::request_protocol
    - brpc::ErrorCodeToStatusCode
    - DCHECK
    - Controller*::ErrorCode
    - Controller*::ErrorText
    - Controller*::response_attachment
    - Controller*::http_response
    - Controller*::server
    - Controller*::Failed
    linkageType: ''
    returnType: void
    signature: void UpdateResponseHeader(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:457,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:458,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:461,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:463,1
    - Dst: append
      Src: /src/brpc/src/brpc/controller.cpp:465,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:466,1
    - Dst: auto::set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:467,1
    - Dst: auto::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:468,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' reason'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 455
    functionDepth: 3
    functionLinenumber: 455
    functionLinenumberEnd: 471
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - butil::string_appendf
    - brpc::Controller::AppendServerIdentiy
    - auto::Annotate
    - auto::set_error_code
    - append
    - empty
    - lock
    - UpdateResponseHeader
    - push_back
    linkageType: ''
    returnType: void
    signature: void Controller::SetFailed(const std::string& reason)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:475,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:479,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:480,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:483,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:485,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:487,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:489,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:492,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:493,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:494,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:495,1
    - Dst: auto::set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:496,1
    - Dst: auto::AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:497,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:497,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:499,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 2
    argNames:
    - error_code
    - reason_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 500
      start: 473
    functionDepth: 3
    functionLinenumber: 473
    functionLinenumberEnd: 500
    functionName: brpc::Controller::SetFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - butil::string_appendf
    - brpc::Controller::AppendServerIdentiy
    - va_start
    - va_end
    - CHECK
    - auto::set_error_code
    - auto::AnnotateCStr
    - empty
    - butil::string_vappendf
    - lock
    - UpdateResponseHeader
    - c_str
    - push_back
    - size
    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:506,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:507,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/controller.cpp:508,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:511,1
    - Dst: brpc::Controller::AppendServerIdentiy
      Src: /src/brpc/src/brpc/controller.cpp:513,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:515,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/controller.cpp:517,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/controller.cpp:520,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/controller.cpp:521,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/controller.cpp:522,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:523,1
    - Dst: auto::set_error_code
      Src: /src/brpc/src/brpc/controller.cpp:524,1
    - Dst: auto::AnnotateCStr
      Src: /src/brpc/src/brpc/controller.cpp:525,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:525,1
    - Dst: UpdateResponseHeader
      Src: /src/brpc/src/brpc/controller.cpp:527,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - reason_fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 502
    functionDepth: 3
    functionLinenumber: 502
    functionLinenumberEnd: 528
    functionName: brpc::Controller::CloseConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - brpc::Controller::AppendServerIdentiy
    - va_start
    - va_end
    - brpc::Controller::add_flag
    - auto::set_error_code
    - auto::AnnotateCStr
    - empty
    - butil::string_vappendf
    - lock
    - UpdateResponseHeader
    - c_str
    - push_back
    - size
    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:532,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 533
      start: 530
    functionDepth: 1
    functionLinenumber: 530
    functionLinenumberEnd: 533
    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: 538
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 538
    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:541,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 543
      start: 540
    functionDepth: 7
    functionLinenumber: 540
    functionLinenumberEnd: 543
    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: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
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 545
    functionDepth: 6
    functionLinenumber: 545
    functionLinenumberEnd: 549
    functionName: brpc::RunOnCancelThread::Run
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - bthread_id_unlock_and_destroy
    - brpc::RunOnCancelThread::Run
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:560,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:561,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:561,1
    - Dst: static_cast<google::protobuf::Closure*>
      Src: /src/brpc/src/brpc/controller.cpp:568,1
    - Dst: RunOnCancelThread::RunOnCancelThread
      Src: /src/brpc/src/brpc/controller.cpp:567,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:570,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/controller.cpp:570,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: 572
      start: 556
    functionDepth: 6
    functionLinenumber: 556
    functionLinenumberEnd: 572
    functionName: brpc::Controller::RunOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<google::protobuf::Closure*>
    - RunOnCancelThread::RunOnCancelThread
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - bthread_start_urgent
    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:576,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:582,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:586,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/controller.cpp:590,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/controller.cpp:591,1
    - Dst: SocketUniquePtr::NotifyOnFailed
      Src: /src/brpc/src/brpc/controller.cpp:594,1
    - Dst: ClosureGuard::release
      Src: /src/brpc/src/brpc/controller.cpp:595,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - callback
    argTypes:
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 574
    functionDepth: 3
    functionLinenumber: 574
    functionLinenumberEnd: 596
    functionName: brpc::Controller::NotifyOnCancel
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - ClosureGuard::release
    - SocketUniquePtr::NotifyOnFailed
    - PLOG
    - brpc::SetTrackMeAddress
    - LOG
    - bthread_id_create
    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:599,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 600
      start: 598
    functionDepth: 5
    functionLinenumber: 598
    functionLinenumberEnd: 600
    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:603,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - id
    argTypes:
    - CallId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 602
    functionDepth: 5
    functionLinenumber: 602
    functionLinenumberEnd: 604
    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:608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 609
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 609
    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: 24
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:615,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:616,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:617,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:622,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:628,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:629,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:629,1
    - Dst: brpc::Controller::is_ending_rpc
      Src: /src/brpc/src/brpc/controller.cpp:633,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:638,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:639,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:639,1
    - Dst: DoBackup
      Src: /src/brpc/src/brpc/controller.cpp:648,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:651,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:651,1
    - Dst: brpc::Controller::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:657,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/controller.cpp:658,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:660,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:664,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:667,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:669,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:670,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:672,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:676,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:679,1
    - Dst: Call::Call
      Src: /src/brpc/src/brpc/controller.cpp:680,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:682,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:686,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:687,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:687,1
    - Dst: DefaultRetryPolicy
      Src: /src/brpc/src/brpc/controller.cpp:689,1
    - Dst: auto::DoRetry
      Src: /src/brpc/src/brpc/controller.cpp:690,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:694,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:694,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:695,1
    - Dst: brpc::ExcludedServers::Create
      Src: /src/brpc/src/brpc/controller.cpp:697,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:698,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:700,1
    - Dst: Add
      Src: /src/brpc/src/brpc/controller.cpp:704,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:706,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/controller.cpp:712,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/controller.cpp:714,1
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/controller.cpp:717,1
    - Dst: auto::GetBackoffTimeMs
      Src: /src/brpc/src/brpc/controller.cpp:718,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:720,1
    - Dst: auto::CanRetryBackoffInPthread
      Src: /src/brpc/src/brpc/controller.cpp:722,1
    - Dst: bthread::TaskGroup*::is_current_pthread_task
      Src: /src/brpc/src/brpc/controller.cpp:723,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/controller.cpp:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:726,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:730,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:730,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:761,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:762,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/controller.cpp:769,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:771,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:772,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:773,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:777,1
    - Dst: bthread_id_about_to_destroy
      Src: /src/brpc/src/brpc/controller.cpp:778,1
    - Dst: brpc::Controller::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:780,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 108
    argCount: 3
    argNames:
    - ' info'
    - new_bthread
    - saved_error
    argTypes:
    - CompletionInfo
    - bool
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 782
      start: 611
    functionDepth: 8
    functionLinenumber: 611
    functionLinenumberEnd: 782
    functionName: brpc::Controller::OnVersionedRPCReturned
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::SetFailed
    - butil::gettimeofday_us
    - auto::CanRetryBackoffInPthread
    - DefaultRetryPolicy
    - bthread::TaskGroup*::is_current_pthread_task
    - brpc::Controller::EndRPC
    - std::min
    - LOG
    - bthread_attr_set_name
    - butil::microseconds_to_timespec
    - bthread_id_unlock
    - brpc::Controller::IssueRPC
    - Clear
    - CHECK_EQ
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - Add
    - brpc::Controller::current_id
    - bthread_timer_add
    - CHECK
    - brpc::Controller::add_flag
    - DoBackup
    - response_attachment
    - auto::DoRetry
    - bthread_id_about_to_destroy
    - brpc::Controller::is_ending_rpc
    - brpc::Controller::timeout_ms
    - Call::Call
    - brpc::Controller::get_id
    - brpc::Controller::SingleServer
    - auto::GetBackoffTimeMs
    - bthread_usleep
    - brpc::Controller::FailedInline
    - brpc::Controller::has_flag
    - brpc::ExcludedServers::Create
    - bthread_start_background
    - OnComplete
    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:785,1
    - Dst: Controller*::EndRPC
      Src: /src/brpc/src/brpc/controller.cpp:786,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 784
    functionDepth: 0
    functionLinenumber: 784
    functionLinenumberEnd: 788
    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: 798
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 798
    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: 23
    BranchProfiles: []
    Callsites:
    - Dst: DestroyStreamUserData
      Src: /src/brpc/src/brpc/controller.cpp:807,1
    - Dst: AddRecentError
      Src: /src/brpc/src/brpc/controller.cpp:813,1
    - Dst: FeedbackCircuitBreaker
      Src: /src/brpc/src/brpc/controller.cpp:817,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:818,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/controller.cpp:822,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:830,1
    - Dst: id
      Src: /src/brpc/src/brpc/controller.cpp:831,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:832,1
    - Dst: Controller*::_bind_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:845,1
    - Dst: release
      Src: /src/brpc/src/brpc/controller.cpp:845,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:848,1
    - Dst: ReturnToPool
      Src: /src/brpc/src/brpc/controller.cpp:853,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:857,1
    - Dst: Controller*::_bind_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:866,1
    - Dst: release
      Src: /src/brpc/src/brpc/controller.cpp:866,1
    - Dst: is_read_progressive
      Src: /src/brpc/src/brpc/controller.cpp:869,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:871,1
    - Dst: OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/controller.cpp:874,1
    - Dst: does_error_affect_main_socket
      Src: /src/brpc/src/brpc/controller.cpp:877,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:885,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:892,1
    - Dst: SocketUniquePtr::SetLogOff
      Src: /src/brpc/src/brpc/controller.cpp:894,1
    - Dst: Controller*::_lb::Feedback
      Src: /src/brpc/src/brpc/controller.cpp:901,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:905,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 64
    argCount: 4
    argNames:
    - c
    - error_code
    - responded
    - end_of_rpc
    argTypes:
    - Controller*
    - int
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 906
      start: 804
    functionDepth: 1
    functionLinenumber: 804
    functionLinenumberEnd: 906
    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:
    - Socket::SetFailed
    - OnProgressiveReadCompleted
    - SetFailed
    - ReturnToPool
    - butil::gettimeofday_us
    - Controller*::_lb::Feedback
    - release
    - is_read_progressive
    - brpc::SetTrackMeAddress
    - FeedbackCircuitBreaker
    - Controller*::connection_type
    - does_error_affect_main_socket
    - DestroyStreamUserData
    - SocketUniquePtr::SetLogOff
    - reset
    - AddRecentError
    - id
    - Controller*::_bind_sock::reset
    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: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:909,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/controller.cpp:912,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:917,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:919,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:920,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:932,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:937,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:937,1
    - Dst: brpc::Controller::bind_sock_action
      Src: /src/brpc/src/brpc/controller.cpp:940,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:941,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:948,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:949,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:952,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:954,1
    - Dst: sending_sock::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:957,1
    - Dst: sending_sock::local_side
      Src: /src/brpc/src/brpc/controller.cpp:958,1
    - Dst: brpc::Controller::HandleStreamConnection
      Src: /src/brpc/src/brpc/controller.cpp:961,1
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:961,1
    - Dst: brpc::Controller::get_id
      Src: /src/brpc/src/brpc/controller.cpp:962,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:963,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:966,1
    - Dst: OnComplete
      Src: /src/brpc/src/brpc/controller.cpp:967,1
    - Dst: DestroyStreamCreator
      Src: /src/brpc/src/brpc/controller.cpp:975,1
    - Dst: clear
      Src: /src/brpc/src/brpc/controller.cpp:981,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:984,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:985,1
    - Dst: auto::set_ending_cid
      Src: /src/brpc/src/brpc/controller.cpp:986,1
    - Dst: auto::set_async
      Src: /src/brpc/src/brpc/controller.cpp:987,1
    - Dst: brpc::Controller::SubmitSpan
      Src: /src/brpc/src/brpc/controller.cpp:991,1
    - Dst: DoNothing
      Src: /src/brpc/src/brpc/controller.cpp:998,1
    - Dst: brpc::Controller::OnRPCEnd
      Src: /src/brpc/src/brpc/controller.cpp:1010,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:1010,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: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:1019,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1020,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1020,1
    - Dst: RunUserCode
      Src: /src/brpc/src/brpc/controller.cpp:1023,1
    - Dst: bthread_about_to_quit
      Src: /src/brpc/src/brpc/controller.cpp:1030,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1031,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1031,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 70
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CompletionInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1033
      start: 908
    functionDepth: 6
    functionLinenumber: 908
    functionLinenumberEnd: 1033
    functionName: brpc::Controller::EndRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - butil::gettimeofday_us
    - bthread_about_to_quit
    - bthread_id_unlock_and_destroy
    - CHECK_EQ
    - brpc::Controller::current_id
    - Run
    - brpc::Controller::add_flag
    - CHECK
    - sending_sock::get
    - brpc::Controller::HandleStreamConnection
    - DestroyStreamCreator
    - bthread_timer_del
    - DoNothing
    - RunUserCode
    - clear
    - lock
    - sending_sock::local_side
    - reset
    - sending_sock::remote_side
    - auto::set_ending_cid
    - brpc::Controller::get_id
    - auto::set_async
    - brpc::Controller::SubmitSpan
    - brpc::Controller::bind_sock_action
    - brpc::Controller::has_flag
    - OnComplete
    - brpc::Controller::OnRPCEnd
    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:1038,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - end_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1040
      start: 1035
    functionDepth: 1
    functionLinenumber: 1035
    functionLinenumberEnd: 1040
    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:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1042
    functionDepth: 0
    functionLinenumber: 1042
    functionLinenumberEnd: 1044
    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:1049,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/controller.cpp:1049,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1051,1
    - Dst: Run
      Src: /src/brpc/src/brpc/controller.cpp:1052,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1055,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/controller.cpp:1055,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1057
      start: 1046
    functionDepth: 6
    functionLinenumber: 1046
    functionLinenumberEnd: 1057
    functionName: brpc::Controller::DoneInBackupThread
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - Run
    - bthread_id_unlock_and_destroy
    - brpc::Controller::has_flag
    - CHECK_EQ
    - brpc::Controller::OnRPCEnd
    linkageType: ''
    returnType: void
    signature: void Controller::DoneInBackupThread()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1060,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1061,1
    - Dst: auto::set_start_callback_us
      Src: /src/brpc/src/brpc/controller.cpp:1062,1
    - Dst: auto::local_parent
      Src: /src/brpc/src/brpc/controller.cpp:1063,1
    - Dst: auto::is_active
      Src: /src/brpc/src/brpc/controller.cpp:1064,1
    - Dst: auto::AsParent
      Src: /src/brpc/src/brpc/controller.cpp:1065,1
    - Dst: brpc::Span::Submit
      Src: /src/brpc/src/brpc/controller.cpp:1068,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1069,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1071
      start: 1059
    functionDepth: 1
    functionLinenumber: 1059
    functionLinenumberEnd: 1071
    functionName: brpc::Controller::SubmitSpan
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - auto::AsParent
    - auto::local_parent
    - auto::is_active
    - butil::cpuwide_time_us
    - brpc::Span::Submit
    - lock
    - reset
    - auto::set_start_callback_us
    linkageType: ''
    returnType: void
    signature: void Controller::SubmitSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1074,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1076,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/controller.cpp:1076,1
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1078,1
    - Dst: brpc::Controller::is_done_allowed_to_run_in_place
      Src: /src/brpc/src/brpc/controller.cpp:1086,1
    - Dst: brpc::Controller::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1087,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1088
      start: 1073
    functionDepth: 6
    functionLinenumber: 1073
    functionLinenumberEnd: 1088
    functionName: brpc::Controller::HandleSendFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - brpc::Controller::SetFailed
    - brpc::Controller::current_id
    - brpc::Controller::is_done_allowed_to_run_in_place
    - LOG
    - brpc::Controller::FailedInline
    - brpc::Controller::ErrorText
    - brpc::Controller::OnVersionedRPCReturned
    linkageType: ''
    returnType: void
    signature: void Controller::HandleSendFailed()
  - BBCount: 33
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::current_id
      Src: /src/brpc/src/brpc/controller.cpp:1109,1
    - Dst: brpc::Controller::IssueRPC
      Src: /src/brpc/src/brpc/controller.cpp:1114,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1115,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1117,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1117,1
    - Dst: brpc::Controller::has_enabled_circuit_breaker
      Src: /src/brpc/src/brpc/controller.cpp:1123,1
    - Dst: brpc::Controller::bind_sock_action
      Src: /src/brpc/src/brpc/controller.cpp:1126,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1128,1
    - Dst: release
      Src: /src/brpc/src/brpc/controller.cpp:1128,1
    - Dst: brpc::Controller::is_health_check_call
      Src: /src/brpc/src/brpc/controller.cpp:1129,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/controller.cpp:1129,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1130,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1131,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1132,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1133,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1135,1
    - Dst: brpc::Controller::SingleServer
      Src: /src/brpc/src/brpc/controller.cpp:1136,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1139,1
    - Dst: brpc::Controller::is_health_check_call
      Src: /src/brpc/src/brpc/controller.cpp:1140,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/controller.cpp:1140,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1141,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1142,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1143,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1144,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1150,1
    - Dst: SelectServer
      Src: /src/brpc/src/brpc/controller.cpp:1152,1
    - Dst: Describe
      Src: /src/brpc/src/brpc/controller.cpp:1157,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1158,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/controller.cpp:1158,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1159,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/controller.cpp:1162,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1167,1
    - Dst: OnCreatingStream
      Src: /src/brpc/src/brpc/controller.cpp:1171,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1172,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1173,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1176,1
    - Dst: SocketUniquePtr::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1176,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1179,1
    - Dst: auto::set_remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1181,1
    - Dst: auto::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1183,1
    - Dst: endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1184,1
    - Dst: sending_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:1191,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/controller.cpp:1191,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1198,1
    - Dst: brpc::Controller::bind_sock_action
      Src: /src/brpc/src/brpc/controller.cpp:1201,1
    - Dst: sending_sock::reset
      Src: /src/brpc/src/brpc/controller.cpp:1203,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/controller.cpp:1203,1
    - Dst: SocketUniquePtr::GetPooledSocket
      Src: /src/brpc/src/brpc/controller.cpp:1205,1
    - Dst: SocketUniquePtr::GetShortSocket
      Src: /src/brpc/src/brpc/controller.cpp:1207,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1209,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1210,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1211,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1214,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1215,1
    - Dst: ConnectionTypeToString
      Src: /src/brpc/src/brpc/controller.cpp:1216,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1217,1
    - Dst: sending_sock::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1223,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1227,1
    - Dst: SocketUniquePtr::set_preferred_index
      Src: /src/brpc/src/brpc/controller.cpp:1228,1
    - Dst: SocketUniquePtr::reset
      Src: /src/brpc/src/brpc/controller.cpp:1230,1
    - Dst: sending_sock::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1233,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1235,1
    - Dst: sending_sock::read_will_be_progressive
      Src: /src/brpc/src/brpc/controller.cpp:1238,1
    - Dst: sending_sock::FightAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1248,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1251,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1252,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1253,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/controller.cpp:1257,1
    - Dst: _pack_request
      Src: /src/brpc/src/brpc/controller.cpp:1259,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1263,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1267,1
    - Dst: brpc::Controller::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1267,1
    - Dst: brpc::Controller::HandleSendFailed
      Src: /src/brpc/src/brpc/controller.cpp:1269,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1276,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/controller.cpp:1277,1
    - Dst: butil::microseconds_to_timespec
      Src: /src/brpc/src/brpc/controller.cpp:1280,1
    - Dst: brpc::Controller::has_flag
      Src: /src/brpc/src/brpc/controller.cpp:1290,1
    - Dst: brpc::Controller::write_to_socket_in_background
      Src: /src/brpc/src/brpc/controller.cpp:1291,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1295,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/controller.cpp:1296,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1298,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/controller.cpp:1300,1
    - Dst: sending_sock::Write
      Src: /src/brpc/src/brpc/controller.cpp:1301,1
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1303,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/controller.cpp:1305,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/controller.cpp:1305,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/controller.cpp:1306,1
    - Dst: auto::Annotate
      Src: /src/brpc/src/brpc/controller.cpp:1308,1
    - Dst: sending_sock::SetAuthentication
      Src: /src/brpc/src/brpc/controller.cpp:1316,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1318,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1318,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 141
    argCount: 1
    argNames:
    - start_realtime_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1319
      start: 1090
    functionDepth: 7
    functionLinenumber: 1090
    functionLinenumberEnd: 1319
    functionName: brpc::Controller::IssueRPC
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 4
    functionsReached:
    - sending_sock::reset
    - brpc::Controller::SetFailed
    - SocketUniquePtr::GetShortSocket
    - SocketUniquePtr::GetPooledSocket
    - sending_sock::set_type_of_service
    - brpc::Controller::is_response_read_progressively
    - std::min
    - brpc::Controller::HandleSendFailed
    - butil::microseconds_to_timespec
    - auto::set_request_size
    - bthread_id_unlock
    - brpc::Controller::IssueRPC
    - SocketUniquePtr::remote_side
    - SocketUniquePtr::id
    - CHECK_EQ
    - sending_sock::read_will_be_progressive
    - butil::IOBuf::size
    - brpc::Controller::current_id
    - SocketUniquePtr::release
    - SocketUniquePtr::IsAvailable
    - sending_sock::FightAuthentication
    - auto::set_remote_side
    - sending_sock::Write
    - SocketUniquePtr::reset
    - ConnectionTypeToString
    - SocketUniquePtr::set_preferred_index
    - SocketUniquePtr::preferred_index
    - sending_sock::set_preferred_index
    - SocketMessagePtr::EstimatedByteSize
    - _pack_request
    - auto::Annotate
    - brpc::Controller::write_to_socket_in_background
    - brpc::Controller::has_request_code
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - lock
    - brpc::Controller::is_health_check_call
    - std::ostringstream::str
    - auto::set_sent_us
    - brpc::Controller::SingleServer
    - sending_sock::SetAuthentication
    - endpoint2str
    - SelectServer
    - berror
    - release
    - brpc::Controller::ErrorCode
    - brpc::Controller::FailedInline
    - brpc::Controller::has_enabled_circuit_breaker
    - Describe
    - brpc::Controller::bind_sock_action
    - OnCreatingStream
    - brpc::Controller::has_flag
    - butil::IOBuf::IOBuf
    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:1323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1329
      start: 1321
    functionDepth: 1
    functionLinenumber: 1321
    functionLinenumberEnd: 1329
    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:1333,1
    - Dst: Controller*::is_used_by_rpc
      Src: /src/brpc/src/brpc/controller.cpp:1334,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1340,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/controller.cpp:1342,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/controller.cpp:1344,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1346,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/controller.cpp:1347,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1348,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1348,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1350,1
    - Dst: Controller*::backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1351,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1352,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1352,1
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1353,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1354,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1354,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1356,1
    - Dst: berror
      Src: /src/brpc/src/brpc/controller.cpp:1356,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/controller.cpp:1357,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/controller.cpp:1357,1
    - Dst: std::unique_ptr::cntl::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/controller.cpp:1368,1
    - Dst: OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
      Src: /src/brpc/src/brpc/controller.cpp:1372,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/controller.cpp:1375,1
    - Dst: func
      Src: /src/brpc/src/brpc/controller.cpp:1376,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: 1379
      start: 1331
    functionDepth: 5
    functionLinenumber: 1331
    functionLinenumberEnd: 1379
    functionName: brpc::Controller::HandleSocketFailed
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - Controller*::is_used_by_rpc
    - Controller*::timeout_ms
    - OnVersionedRPCReturnedArgs::OnVersionedRPCReturnedArgs
    - berror
    - Controller*::remote_side
    - std::unique_ptr::cntl::OnVersionedRPCReturned
    - Controller*::backup_request_ms
    - Controller*::ErrorCode
    - bthread_id_unlock
    - butil::endpoint2str
    - empty
    - func
    - Controller*::SetFailed
    - c_str
    - bthread_start_background
    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:1384,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/controller.cpp:1392,1
    - Dst: bthread_id_create2
      Src: /src/brpc/src/brpc/controller.cpp:1392,1
    - Dst: butil::atomic*::compare_exchange_strong
      Src: /src/brpc/src/brpc/controller.cpp:1393,1
    - Dst: bthread_id_cancel
      Src: /src/brpc/src/brpc/controller.cpp:1395,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1399
      start: 1381
    functionDepth: 3
    functionLinenumber: 1381
    functionLinenumberEnd: 1399
    functionName: brpc::Controller::call_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 69
    functionsReached:
    - bthread_id_cancel
    - bthread_id_create2
    - butil::atomic*::compare_exchange_strong
    - CHECK_EQ
    - butil::atomic*::load
    linkageType: ''
    returnType: CallId
    signature: CallId Controller::call_id()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::request_checksum_attachment
      Src: /src/brpc/src/brpc/controller.cpp:1410,1
    - Dst: brpc::Controller::log_id
      Src: /src/brpc/src/brpc/controller.cpp:1411,1
    - Dst: brpc::Controller::has_request_code
      Src: /src/brpc/src/brpc/controller.cpp:1412,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 1
    argNames:
    - s
    argTypes:
    - ClientSettings*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1414
      start: 1401
    functionDepth: 2
    functionLinenumber: 1401
    functionLinenumberEnd: 1414
    functionName: brpc::Controller::SaveClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::has_request_code
    - brpc::Controller::log_id
    - brpc::Controller::request_checksum_attachment
    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:1417,1
    - Dst: brpc::Controller::set_backup_request_ms
      Src: /src/brpc/src/brpc/controller.cpp:1418,1
    - Dst: brpc::Controller::set_backup_request_policy
      Src: /src/brpc/src/brpc/controller.cpp:1419,1
    - Dst: brpc::Controller::set_max_retry
      Src: /src/brpc/src/brpc/controller.cpp:1420,1
    - Dst: brpc::Controller::set_type_of_service
      Src: /src/brpc/src/brpc/controller.cpp:1421,1
    - Dst: brpc::Controller::set_connection_type
      Src: /src/brpc/src/brpc/controller.cpp:1422,1
    - Dst: brpc::Controller::set_request_compress_type
      Src: /src/brpc/src/brpc/controller.cpp:1423,1
    - Dst: brpc::Controller::set_request_checksum_type
      Src: /src/brpc/src/brpc/controller.cpp:1424,1
    - Dst: brpc::Controller::set_request_checksum_attachment
      Src: /src/brpc/src/brpc/controller.cpp:1425,1
    - Dst: brpc::Controller::set_log_id
      Src: /src/brpc/src/brpc/controller.cpp:1426,1
    - Dst: brpc::Controller::set_flag
      Src: /src/brpc/src/brpc/controller.cpp:1427,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 13
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - ClientSettings
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1429
      start: 1416
    functionDepth: 2
    functionLinenumber: 1416
    functionLinenumberEnd: 1429
    functionName: brpc::Controller::ApplyClientSettings
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::set_timeout_ms
    - brpc::Controller::set_flag
    - brpc::Controller::set_request_checksum_type
    - brpc::Controller::set_connection_type
    - brpc::Controller::set_backup_request_ms
    - brpc::Controller::set_request_compress_type
    - brpc::Controller::set_type_of_service
    - brpc::Controller::set_request_checksum_attachment
    - brpc::Controller::set_log_id
    - brpc::Controller::set_backup_request_policy
    - 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:1434,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1437
      start: 1431
    functionDepth: 0
    functionLinenumber: 1431
    functionLinenumberEnd: 1437
    functionName: brpc::Controller::sub_count
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 44
    functionsReached:
    - GetSubControllerOfSelectiveChannel
    linkageType: ''
    returnType: int
    signature: int Controller::sub_count() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetSubControllerOfParallelChannel
      Src: /src/brpc/src/brpc/controller.cpp:1441,1
    - Dst: GetSubControllerOfSelectiveChannel
      Src: /src/brpc/src/brpc/controller.cpp:1444,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1447
      start: 1439
    functionDepth: 0
    functionLinenumber: 1439
    functionLinenumberEnd: 1447
    functionName: brpc::Controller::sub
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 42
    functionsReached:
    - GetSubControllerOfParallelChannel
    - GetSubControllerOfSelectiveChannel
    linkageType: ''
    returnType: Controller
    signature: Controller * Controller::sub(int index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1450,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/controller.cpp:1451,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1454
      start: 1449
    functionDepth: 0
    functionLinenumber: 1449
    functionLinenumberEnd: 1454
    functionName: brpc::Controller::trace_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - auto::trace_id
    - lock
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t Controller::trace_id() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/controller.cpp:1457,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/controller.cpp:1458,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1456
    functionDepth: 0
    functionLinenumber: 1456
    functionLinenumberEnd: 1461
    functionName: brpc::Controller::span_id
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - auto::span_id
    - lock
    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:1470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1463
    functionDepth: 0
    functionLinenumber: 1463
    functionLinenumberEnd: 1475
    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: 11
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/controller.cpp:1478,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/controller.cpp:1479,1
    - Dst: brpc::Controller::has_remote_stream
      Src: /src/brpc/src/brpc/controller.cpp:1479,1
    - Dst: size
      Src: /src/brpc/src/brpc/controller.cpp:1482,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1484,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1486,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1487,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/controller.cpp:1491,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1492,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1493,1
    - Dst: brpc::Controller::FailedInline
      Src: /src/brpc/src/brpc/controller.cpp:1501,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/controller.cpp:1502,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/controller.cpp:1503,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1505,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1506,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1507,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/controller.cpp:1508,1
    - Dst: extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1509,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1514,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1515,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/controller.cpp:1517,1
    - Dst: mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1517,1
    - Dst: clear_extra_stream_ids
      Src: /src/brpc/src/brpc/controller.cpp:1518,1
    - Dst: conn
      Src: /src/brpc/src/brpc/controller.cpp:1521,1
    - Dst: set_stream_id
      Src: /src/brpc/src/brpc/controller.cpp:1522,1
    - Dst: Stream*::SetHostSocket
      Src: /src/brpc/src/brpc/controller.cpp:1523,1
    - Dst: Stream*::SetConnected
      Src: /src/brpc/src/brpc/controller.cpp:1524,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 42
    argCount: 1
    argNames:
    - host_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1527
      start: 1477
    functionDepth: 4
    functionLinenumber: 1477
    functionLinenumberEnd: 1527
    functionName: brpc::Controller::HandleStreamConnection
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 2
    functionsReached:
    - brpc::Controller::SetFailed
    - empty
    - brpc::Controller::has_remote_stream
    - conn
    - Stream*::SetConnected
    - extra_stream_ids
    - std::move
    - CHECK
    - c_str
    - size
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - set_stream_id
    - mutable_extra_stream_ids
    - stream_id
    - brpc::Controller::FailedInline
    - clear_extra_stream_ids
    - Stream*::SetHostSocket
    - brpc::Stream::SetFailed
    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:1532,1
    - Dst: length
      Src: /src/brpc/src/brpc/controller.cpp:1532,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/controller.cpp:1533,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1535,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1536,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1537,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1538,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/controller.cpp:1539,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/controller.cpp:1540,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 2
    argNames:
    - ' source'
    - output
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1543
      start: 1531
    functionDepth: 2
    functionLinenumber: 1531
    functionLinenumberEnd: 1543
    functionName: brpc::WebEscape
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - std::string*::push_back
    - brpc::size
    - length
    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:1547,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' source'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1549
      start: 1545
    functionDepth: 1
    functionLinenumber: 1545
    functionLinenumberEnd: 1549
    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: 1554
      start: 1551
    functionDepth: 0
    functionLinenumber: 1551
    functionLinenumberEnd: 1554
    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: 1560
      start: 1556
    functionDepth: 0
    functionLinenumber: 1556
    functionLinenumberEnd: 1560
    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:1564,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - sc
    argTypes:
    - StreamCreator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1568
      start: 1562
    functionDepth: 1
    functionLinenumber: 1562
    functionLinenumberEnd: 1568
    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:1572,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1573,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1581,1
    - Dst: sending_sock::ReAddress
      Src: /src/brpc/src/brpc/controller.cpp:1585,1
    - Dst: SocketUniquePtr::fail_me_at_server_stop
      Src: /src/brpc/src/brpc/controller.cpp:1588,1
    - Dst: reset
      Src: /src/brpc/src/brpc/controller.cpp:1590,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/controller.cpp:1591,1
    - Dst: ProgressiveAttachment::ProgressiveAttachment
      Src: /src/brpc/src/brpc/controller.cpp:1590,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - stop_style
    argTypes:
    - StopStyle
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1593
      start: 1570
    functionDepth: 1
    functionLinenumber: 1570
    functionLinenumberEnd: 1593
    functionName: brpc::Controller::CreateProgressiveAttachment
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::fail_me_at_server_stop
    - http_request
    - ProgressiveAttachment::ProgressiveAttachment
    - brpc::Controller::has_progressive_writer
    - LOG
    - sending_sock::ReAddress
    - reset
    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:1597,1
    - Dst: brpc::Controller::is_response_read_progressively
      Src: /src/brpc/src/brpc/controller.cpp:1600,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1601,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1602,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1607,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1608,1
    - Dst: brpc::Controller::has_progressive_reader
      Src: /src/brpc/src/brpc/controller.cpp:1610,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/controller.cpp:1611,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/controller.cpp:1612,1
    - Dst: brpc::Controller::add_flag
      Src: /src/brpc/src/brpc/controller.cpp:1615,1
    - Dst: brpc::Controller::ReadProgressiveAttachmentBy
      Src: /src/brpc/src/brpc/controller.cpp:1616,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1617
      start: 1595
    functionDepth: 2
    functionLinenumber: 1595
    functionLinenumberEnd: 1617
    functionName: brpc::Controller::ReadProgressiveAttachmentBy
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 16
    functionsReached:
    - brpc::Controller::ReadProgressiveAttachmentBy
    - brpc::Controller::is_response_read_progressively
    - brpc::Controller::has_progressive_reader
    - brpc::Controller::add_flag
    - LOG
    - ProgressiveReader*::OnEndOfMessage
    - 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: 1621
      start: 1619
    functionDepth: 0
    functionLinenumber: 1619
    functionLinenumberEnd: 1621
    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:1624,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/controller.cpp:1625,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1626
      start: 1623
    functionDepth: 1
    functionLinenumber: 1623
    functionLinenumberEnd: 1626
    functionName: brpc::Controller::is_ssl
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Socket*::is_ssl
    - sending_sock::get
    linkageType: ''
    returnType: bool
    signature: bool Controller::is_ssl() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sending_sock::get
      Src: /src/brpc/src/brpc/controller.cpp:1629,1
    - Dst: Socket*::GetPeerCertificate
      Src: /src/brpc/src/brpc/controller.cpp:1630,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1631
      start: 1628
    functionDepth: 1
    functionLinenumber: 1628
    functionLinenumberEnd: 1631
    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:1634,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/controller.cpp:1636,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/controller.cpp:1636,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: 1641
      start: 1633
    functionDepth: 1
    functionLinenumber: 1633
    functionLinenumberEnd: 1641
    functionName: brpc::Controller::GetSockOption
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Socket*::fd
    - sending_sock::get
    - getsockopt
    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:1645,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - req
    - res
    argTypes:
    - google::protobuf::Message*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1648
      start: 1643
    functionDepth: 0
    functionLinenumber: 1643
    functionLinenumberEnd: 1648
    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:1664,1
    - Dst: s_prev_sigterm_handler
      Src: /src/brpc/src/brpc/controller.cpp:1667,1
    - Dst: s_prev_sighup_handler
      Src: /src/brpc/src/brpc/controller.cpp:1670,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 11
    argCount: 1
    argNames:
    - signo
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1672
      start: 1661
    functionDepth: 0
    functionLinenumber: 1661
    functionLinenumberEnd: 1672
    functionName: brpc::quit_handler
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - s_prev_sighup_handler
    - s_prev_sigterm_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:1678,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1681,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1684,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1688,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1691,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1694,1
    - Dst: signal
      Src: /src/brpc/src/brpc/controller.cpp:1699,1
    - Dst: RELEASE_ASSERT_VERBOSE
      Src: /src/brpc/src/brpc/controller.cpp:1702,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/controller.cpp:1705,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 22
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1708
      start: 1676
    functionDepth: 1
    functionLinenumber: 1676
    functionLinenumberEnd: 1708
    functionName: brpc::RegisterQuitSignalOrDie
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - RELEASE_ASSERT_VERBOSE
    - signal
    - LOG
    linkageType: ''
    returnType: void
    signature: void RegisterQuitSignalOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/controller.cpp:1711,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1713
      start: 1710
    functionDepth: 0
    functionLinenumber: 1710
    functionLinenumberEnd: 1713
    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:1716,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1717
      start: 1715
    functionDepth: 0
    functionLinenumber: 1715
    functionLinenumberEnd: 1717
    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: 1720
      start: 1720
    functionDepth: 0
    functionLinenumber: 1720
    functionLinenumberEnd: 1720
    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:1723,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1724
      start: 1722
    functionDepth: 0
    functionLinenumber: 1722
    functionLinenumberEnd: 1724
    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:1728,1
    - Dst: KVMap::KVMap
      Src: /src/brpc/src/brpc/controller.cpp:1728,1
    - Dst: get
      Src: /src/brpc/src/brpc/controller.cpp:1730,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1731
      start: 1726
    functionDepth: 1
    functionLinenumber: 1726
    functionLinenumberEnd: 1731
    functionName: '& Controller::SessionKV()'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - reset
    - get
    - KVMap::KVMap
    linkageType: ''
    returnType: KVMap
    signature: KVMap & Controller::SessionKV()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Count
      Src: /src/brpc/src/brpc/controller.cpp:1738,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1743,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1744,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1752,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1752,1
    - Dst: Begin
      Src: /src/brpc/src/brpc/controller.cpp:1760,1
    - Dst: End
      Src: /src/brpc/src/brpc/controller.cpp:1760,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1764
      start: 1737
    functionDepth: 1
    functionLinenumber: 1737
    functionLinenumberEnd: 1764
    functionName: brpc::Controller::FlushSessionKV
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Count
    - request_id
    - 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:1767,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' p'
    argTypes:
    - std::ostream
    - Controller::LogPrefixDummy
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1769
      start: 1766
    functionDepth: 0
    functionLinenumber: 1766
    functionLinenumberEnd: 1769
    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:1773,1
    - Dst: request_id
      Src: /src/brpc/src/brpc/controller.cpp:1774,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1786
      start: 1771
    functionDepth: 0
    functionLinenumber: 1771
    functionLinenumberEnd: 1786
    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:
    - ' span'
    argTypes:
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1793
      start: 1789
    functionDepth: 0
    functionLinenumber: 1789
    functionLinenumberEnd: 1793
    functionName: "& ControllerPrivateAccessor::set_span(\n    const std::shared_ptr<Span>&
      span)"
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: "ControllerPrivateAccessor & ControllerPrivateAccessor::set_span(\n
      \   const std::shared_ptr<Span>& span)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Span*::shared_from_this
      Src: /src/brpc/src/brpc/controller.cpp:1797,1
    - Dst: _span::reset
      Src: /src/brpc/src/brpc/controller.cpp:1799,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - span
    argTypes:
    - Span*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1802
      start: 1795
    functionDepth: 1
    functionLinenumber: 1795
    functionLinenumberEnd: 1802
    functionName: '& ControllerPrivateAccessor::set_span(Span* span)'
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - Span*::shared_from_this
    - _span::reset
    linkageType: ''
    returnType: ControllerPrivateAccessor
    signature: ControllerPrivateAccessor & ControllerPrivateAccessor::set_span(Span*
      span)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _span::lock
      Src: /src/brpc/src/brpc/controller.cpp:1805,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1806
      start: 1804
    functionDepth: 0
    functionLinenumber: 1804
    functionLinenumberEnd: 1806
    functionName: brpc::ControllerPrivateAccessor::span
    functionSourceFile: /src/brpc/src/brpc/controller.cpp
    functionUses: 0
    functionsReached:
    - _span::lock
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> ControllerPrivateAccessor::span() 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: 1
    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: 1
    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: 1
    functionsReached:
    - butil::NetToHost16
    - brpc::AMFInputStream::cutn
    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:
    - butil::NetToHost32
    - brpc::AMFInputStream::cutn
    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: 1
    functionsReached:
    - brpc::AMFInputStream::cutn
    - butil::NetToHost64
    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:
    - brpc::AMFOutputStream::set_bad
    - Next
    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:
    - butil::HostToNet64
    - brpc::AMFOutputStream::putn
    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: 5
    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: 1
    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: 1
    functionsReached:
    - butil::NetToHost16
    - brpc::AMFInputStream::cutn
    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:
    - butil::NetToHost32
    - brpc::AMFInputStream::cutn
    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: 1
    functionsReached:
    - brpc::AMFInputStream::cutn
    - butil::NetToHost64
    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:
    - brpc::AMFOutputStream::set_bad
    - Next
    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:
    - butil::HostToNet64
    - brpc::AMFOutputStream::putn
    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::MergeFrom
    - brpc::SerializedResponse::SharedCtor
    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::MergeFrom
    - brpc::SerializedResponse::SharedCtor
    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:
    - store
    - free
    - BAIDU_SCOPED_LOCK
    - DataFactory*::DestroyData
    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:
    - malloc
    - BAIDU_SCOPED_LOCK
    - std::max
    - memcpy
    - fetch_add
    - free
    - CreateData
    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:
    - CreateData
    - fetch_add
    - 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:
    - malloc
    - ResetData
    - memcpy
    - DestroyData
    - free
    - 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:
    - store
    - free
    - BAIDU_SCOPED_LOCK
    - DataFactory*::DestroyData
    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:
    - malloc
    - BAIDU_SCOPED_LOCK
    - std::max
    - memcpy
    - fetch_add
    - free
    - CreateData
    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:
    - CreateData
    - fetch_add
    - 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:
    - malloc
    - ResetData
    - memcpy
    - DestroyData
    - free
    - 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: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::CheckAMFDepth
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckAMFDepth(int depth)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - len
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 52
    functionName: brpc::CheckAMFStringSize
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckAMFStringSize(uint32_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - count
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: brpc::CheckAMFArraySize
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckAMFArraySize(uint32_t count)
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - marker
    argTypes:
    - AMFMarker
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 86
    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:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - marker
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    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: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    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:101,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:104,1
    - Dst: brpc::AMFField::IsObject
      Src: /src/brpc/src/brpc/amf.cpp:106,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:107,1
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:108,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:109,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 111
    functionName: brpc::AMFField::AMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::AMFObject
    - malloc
    - memcpy
    - brpc::AMFField::IsObject
    - AMFArray::AMFArray
    - brpc::AMFField::IsArray
    - brpc::AMFField::IsString
    linkageType: ''
    returnType: void
    signature: void AMFField::AMFField(const AMFField& rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.cpp:114,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/amf.cpp:119,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:121,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:122,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/amf.cpp:124,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:125,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/amf.cpp:126,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:127,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 130
    functionName: '& AMFField::operator=(const AMFField& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::AMFObject
    - malloc
    - memcpy
    - AMFArray::AMFArray
    - IsArray
    - IsObject
    - Clear
    - IsString
    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:133,1
    - Dst: free
      Src: /src/brpc/src/brpc/amf.cpp:155,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 168
    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:172,1
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: brpc::AMFObject::Find
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - butil::find_cstr
    - brpc::AMFObject::end
    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:181,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:182,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:185,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:187,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:189,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:191,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:191,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:192,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:193,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 198
    functionName: brpc::AMFField::SetString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - brpc::AMFField::Clear
    - memcpy
    - data
    - 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:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    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:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 214
    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:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 221
    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:225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 228
    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:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 235
    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:238,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:239,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:241,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 244
    functionName: brpc::AMFField::MutableObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    - brpc::AMFField::IsObject
    - AMFObject::AMFObject
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AMFField::MutableObject()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:247,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:248,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: brpc::AMFField::MutableArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    - brpc::AMFField::IsArray
    - AMFArray::AMFArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AMFField::MutableArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/src/brpc/amf.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' str'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 259
    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:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 263
    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:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 267
    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:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 271
    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:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 275
    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:278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 279
    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:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 283
    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:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 287
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u16
      Src: /src/brpc/src/brpc/amf.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:292,1
    - Dst: brpc::CheckAMFStringSize
      Src: /src/brpc/src/brpc/amf.cpp:295,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:298,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:299,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/amf.cpp:300,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:301,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 289
    functionDepth: 2
    functionLinenumber: 289
    functionLinenumberEnd: 305
    functionName: brpc::ReadAMFShortStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u16
    - std::string*::clear
    - brpc::CheckAMFStringSize
    - std::string*::resize
    - LOG
    - AMFInputStream*::cutn
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFShortStringBody(std::string* str, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:309,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:310,1
    - Dst: brpc::CheckAMFStringSize
      Src: /src/brpc/src/brpc/amf.cpp:313,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:316,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:317,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/amf.cpp:318,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:319,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 307
    functionDepth: 2
    functionLinenumber: 307
    functionLinenumberEnd: 323
    functionName: brpc::ReadAMFLongStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u32
    - std::string*::clear
    - AMFInputStream*::cutn
    - std::string*::resize
    - brpc::CheckAMFStringSize
    - 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:327,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:328,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:332,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:336,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:336,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 325
    functionDepth: 3
    functionLinenumber: 325
    functionLinenumberEnd: 338
    functionName: brpc::ReadAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFLongStringBody
    - 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:342,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:343,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:349,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:355,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:355,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 357
    functionName: brpc::ReadAMFBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    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:361,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:362,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:366,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:372,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 374
    functionName: brpc::ReadAMFNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - AMFInputStream*::cut_u64
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNumber(double* val, AMFInputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFNumber
      Src: /src/brpc/src/brpc/amf.cpp:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 376
    functionDepth: 2
    functionLinenumber: 376
    functionLinenumberEnd: 383
    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:387,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:388,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:394,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:394,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 396
    functionName: brpc::ReadAMFNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNull(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:407,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:407,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 409
    functionName: brpc::ReadAMFUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUndefined(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:413,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:420,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:420,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 422
    functionName: brpc::ReadAMFUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUnsupported(AMFInputStream* stream)
  - BBCount: 39
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:433,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:438,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:442,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:448,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:449,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:454,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:455,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/brpc/amf.cpp:458,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:464,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:465,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:469,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:470,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:470,1
    - Dst: google::protobuf::Reflection*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:472,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:478,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:482,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:483,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:484,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:486,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:492,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:493,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:500,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:500,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/brpc/amf.cpp:502,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:503,1
    - Dst: brpc::SkipAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:526,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:526,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:529,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:534,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:539,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:540,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:542,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 107
    argCount: 4
    argNames:
    - stream
    - message
    - field
    - depth
    argTypes:
    - AMFInputStream*
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 429
    functionDepth: 3
    functionLinenumber: 429
    functionLinenumberEnd: 548
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - AMFInputStream*::cut_u64
    - brpc::marker2str
    - google::protobuf::FieldDescriptor*::full_name
    - brpc::SkipAMFObjectBody
    - CHECK
    - LOG
    - google::protobuf::FieldDescriptor*::cpp_type
    - brpc::CheckAMFDepth
    - google::protobuf::Reflection*::SetDouble
    - google::protobuf::Reflection*::SetBool
    - brpc::ReadAMFLongStringBody
    - google::protobuf::Reflection*::MutableMessage
    - brpc::ReadAMFObjectBody
    - google::protobuf::Message*::GetReflection
    - 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,\n                               int depth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:553,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:556,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:558,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:559,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:561,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:566,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:572,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:573,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:573,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:575,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - message
    - stream
    - depth
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 550
    functionDepth: 4
    functionLinenumber: 550
    functionLinenumberEnd: 580
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFObjectField
    - std::string::empty
    - google::protobuf::Descriptor*::FindFieldByName
    - RPC_VLOG_IF
    - LOG
    - brpc::CheckAMFDepth
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Message*::GetDescriptor
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectBody(google::protobuf::Message* message,\n                              AMFInputStream*
      stream,\n                              int depth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:583,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:587,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:588,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:590,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:591,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:595,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:601,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 2
    argNames:
    - stream
    - depth
    argTypes:
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 582
    functionDepth: 4
    functionLinenumber: 582
    functionLinenumberEnd: 606
    functionName: brpc::SkipAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFObjectField
    - std::string::empty
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool SkipAMFObjectBody(AMFInputStream* stream, int depth)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:611,1
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:615,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:616,1
    - Dst: brpc::CheckAMFArraySize
      Src: /src/brpc/src/brpc/amf.cpp:619,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:622,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:625,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:626,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:629,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:630,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:630,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:632,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 3
    argNames:
    - message
    - stream
    - depth
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 608
    functionDepth: 4
    functionLinenumber: 608
    functionLinenumberEnd: 637
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::ReadAMFObjectField
    - brpc::CheckAMFArraySize
    - AMFInputStream*::cut_u32
    - google::protobuf::Descriptor*::FindFieldByName
    - RPC_VLOG_IF
    - LOG
    - brpc::CheckAMFDepth
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Message*::GetDescriptor
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFEcmaArrayBody(google::protobuf::Message* message,\n                                 AMFInputStream*
      stream,\n                                 int depth)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:641,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:642,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:646,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:650,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/amf.cpp:658,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:659,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/amf.cpp:660,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - msg
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 639
    functionDepth: 5
    functionLinenumber: 639
    functionLinenumberEnd: 664
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - AMFInputStream*::cut_u8
    - google::protobuf::Message*::IsInitialized
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFEcmaArrayBody
    - google::protobuf::Message*::InitializationErrorString
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(google::protobuf::Message* msg, AMFInputStream*
      stream)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:676,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:681,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:688,1
    - Dst: AMFObject*::SetNumber
      Src: /src/brpc/src/brpc/amf.cpp:692,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:696,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:697,1
    - Dst: AMFObject*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:700,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:704,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:707,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:711,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:712,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:717,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:717,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:722,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:722,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:727,1
    - Dst: AMFObject*::MutableArray
      Src: /src/brpc/src/brpc/amf.cpp:727,1
    - Dst: AMFObject*::SetNull
      Src: /src/brpc/src/brpc/amf.cpp:732,1
    - Dst: AMFObject*::SetUndefined
      Src: /src/brpc/src/brpc/amf.cpp:735,1
    - Dst: AMFObject*::SetUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:738,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:746,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:746,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:749,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:753,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:754,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:757,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 85
    argCount: 4
    argNames:
    - stream
    - obj
    - ' name'
    - depth
    argTypes:
    - AMFInputStream*
    - AMFObject*
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 672
    functionDepth: 5
    functionLinenumber: 672
    functionLinenumberEnd: 761
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - AMFObject*::SetString
    - brpc::ReadAMFLongStringBody
    - AMFInputStream*::cut_u8
    - CHECK
    - brpc::ReadAMFArrayBody
    - AMFObject*::SetNull
    - AMFObject*::SetUnsupported
    - brpc::ReadAMFShortStringBody
    - AMFObject*::SetBool
    - AMFObject*::MutableArray
    - brpc::ReadAMFEcmaArrayBody
    - brpc::ReadAMFObjectBody
    - AMFInputStream*::cut_u64
    - brpc::marker2str
    - brpc::CheckAMFDepth
    - AMFObject*::MutableObject
    - AMFObject*::SetNumber
    - AMFObject*::SetUndefined
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectField(AMFInputStream* stream,\n                               AMFObject*
      obj,\n                               const std::string& name,\n                               int
      depth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:764,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:768,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:769,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:771,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:776,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:782,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 3
    argNames:
    - obj
    - stream
    - depth
    argTypes:
    - AMFObject*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 787
      start: 763
    functionDepth: 4
    functionLinenumber: 763
    functionLinenumberEnd: 787
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFObjectField
    - std::string::empty
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObjectBody(AMFObject* obj, AMFInputStream* stream, int
      depth)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:790,1
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:794,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:795,1
    - Dst: brpc::CheckAMFArraySize
      Src: /src/brpc/src/brpc/amf.cpp:798,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:804,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:807,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - obj
    - stream
    - depth
    argTypes:
    - AMFObject*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 789
    functionDepth: 4
    functionLinenumber: 789
    functionLinenumberEnd: 812
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::ReadAMFObjectField
    - brpc::CheckAMFArraySize
    - AMFInputStream*::cut_u32
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFEcmaArrayBody(AMFObject* obj, AMFInputStream* stream, int
      depth)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:816,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:817,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:821,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:825,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:830,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:830,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 834
      start: 814
    functionDepth: 5
    functionLinenumber: 814
    functionLinenumberEnd: 834
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFEcmaArrayBody
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:837,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:841,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:842,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:848,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:849,1
    - Dst: AMFArray*::AddNumber
      Src: /src/brpc/src/brpc/amf.cpp:853,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:857,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:858,1
    - Dst: AMFArray*::AddBool
      Src: /src/brpc/src/brpc/amf.cpp:861,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:865,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:868,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:872,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:873,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:878,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:878,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:883,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:883,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:888,1
    - Dst: AMFArray*::AddArray
      Src: /src/brpc/src/brpc/amf.cpp:888,1
    - Dst: AMFArray*::AddNull
      Src: /src/brpc/src/brpc/amf.cpp:893,1
    - Dst: AMFArray*::AddUndefined
      Src: /src/brpc/src/brpc/amf.cpp:896,1
    - Dst: AMFArray*::AddUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:899,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:907,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:907,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:910,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:914,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:915,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:918,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 85
    argCount: 3
    argNames:
    - stream
    - arr
    - depth
    argTypes:
    - AMFInputStream*
    - AMFArray*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 836
    functionDepth: 5
    functionLinenumber: 836
    functionLinenumberEnd: 922
    functionName: brpc::ReadAMFArrayItem
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFArray*::AddNumber
    - LOG
    - brpc::ReadAMFLongStringBody
    - AMFInputStream*::cut_u8
    - CHECK
    - brpc::ReadAMFArrayBody
    - AMFArray*::AddUndefined
    - AMFArray*::AddBool
    - brpc::ReadAMFShortStringBody
    - AMFArray*::AddObject
    - AMFArray*::AddNull
    - brpc::ReadAMFEcmaArrayBody
    - AMFArray*::AddArray
    - AMFArray*::AddUnsupported
    - brpc::ReadAMFObjectBody
    - AMFArray*::AddString
    - AMFInputStream*::cut_u64
    - brpc::marker2str
    - brpc::CheckAMFDepth
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayItem(AMFInputStream* stream, AMFArray* arr, int depth)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:925,1
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:929,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:930,1
    - Dst: brpc::CheckAMFArraySize
      Src: /src/brpc/src/brpc/amf.cpp:933,1
    - Dst: brpc::ReadAMFArrayItem
      Src: /src/brpc/src/brpc/amf.cpp:937,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - arr
    - stream
    - depth
    argTypes:
    - AMFArray*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 942
      start: 924
    functionDepth: 6
    functionLinenumber: 924
    functionLinenumberEnd: 942
    functionName: brpc::ReadAMFArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - brpc::CheckAMFArraySize
    - AMFInputStream*::cut_u32
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFArrayItem
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayBody(AMFArray* arr, AMFInputStream* stream, int depth)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:946,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:947,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:951,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:956,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:956,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - arr
    - stream
    argTypes:
    - AMFArray*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 960
      start: 944
    functionDepth: 7
    functionLinenumber: 944
    functionLinenumberEnd: 960
    functionName: brpc::ReadAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFArrayBody
    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: 965
      start: 964
    functionDepth: 0
    functionLinenumber: 964
    functionLinenumberEnd: 965
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFArray::AMFArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:969,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:969,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:973,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 976
      start: 967
    functionDepth: 1
    functionLinenumber: 967
    functionLinenumberEnd: 976
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    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:980,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:981,1
    - Dst: RemoveLastField
      Src: /src/brpc/src/brpc/amf.cpp:987,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 978
    functionDepth: 0
    functionLinenumber: 978
    functionLinenumberEnd: 990
    functionName: '& AMFArray::operator=(const AMFArray& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - RemoveLastField
    - '& AMFArray::~AMFArray'
    - AMFArray::AMFArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray & AMFArray::operator=(const AMFArray& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:993,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:993,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:995,1
    - Dst: clear
      Src: /src/brpc/src/brpc/amf.cpp:998,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 992
    functionDepth: 1
    functionLinenumber: 992
    functionLinenumberEnd: 999
    functionName: brpc::AMFArray::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - clear
    - std::min
    - brpc::AMFArray::Clear
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::Clear()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:1002,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:1005,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:1006,1
    - Dst: resize
      Src: /src/brpc/src/brpc/amf.cpp:1010,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:1010,1
    - Dst: back
      Src: /src/brpc/src/brpc/amf.cpp:1012,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1013
    functionName: brpc::AMFArray::AddField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 16
    functionsReached:
    - back
    - brpc::AMFArray::size
    - resize
    - arraysize
    linkageType: ''
    returnType: AMFField
    signature: AMFField * AMFArray::AddField()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:1019,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:1020,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/amf.cpp:1023,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1025
      start: 1015
    functionDepth: 1
    functionLinenumber: 1015
    functionLinenumberEnd: 1025
    functionName: brpc::AMFArray::RemoveLastField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - brpc::AMFArray::Clear
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::RemoveLastField()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1030,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1031,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1032,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1032,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1035,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1036,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1036,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' str'
    - stream
    argTypes:
    - butil::StringPiece
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1039
      start: 1029
    functionDepth: 2
    functionLinenumber: 1029
    functionLinenumberEnd: 1039
    functionName: brpc::WriteAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::putn
    - AMFOutputStream*::put_u8
    - brpc::size
    - AMFOutputStream*::put_u32
    - AMFOutputStream*::put_u16
    - data
    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:1042,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1044
    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:1047,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1049,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1050
      start: 1046
    functionDepth: 0
    functionLinenumber: 1046
    functionLinenumberEnd: 1050
    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:1053,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 1052
    functionDepth: 1
    functionLinenumber: 1052
    functionLinenumberEnd: 1054
    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:1057,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1056
    functionDepth: 0
    functionLinenumber: 1056
    functionLinenumberEnd: 1058
    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:1061,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1062
      start: 1060
    functionDepth: 0
    functionLinenumber: 1060
    functionLinenumberEnd: 1062
    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:1065,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1066
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1066
    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:1070,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:1071,1
    - Dst: GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:1072,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/amf.cpp:1073,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/amf.cpp:1074,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1076,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1077,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/brpc/amf.cpp:1079,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1082,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:1082,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1083,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/brpc/amf.cpp:1088,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1089,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1090,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1091,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1093,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1093,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:1095,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1100,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1101,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1103,1
    - Dst: google::protobuf::Reflection*::GetDouble
      Src: /src/brpc/src/brpc/amf.cpp:1104,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1109,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1110,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1112,1
    - Dst: google::protobuf::Reflection*::GetBool
      Src: /src/brpc/src/brpc/amf.cpp:1113,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1117,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1118,1
    - Dst: google::protobuf::Reflection*::GetString
      Src: /src/brpc/src/brpc/amf.cpp:1120,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1121,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1122,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1126,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1127,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1127,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1128,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1128,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1128,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1132,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/brpc/amf.cpp:1132,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1140,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1141,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 67
    argCount: 2
    argNames:
    - ' message'
    - stream
    argTypes:
    - google::protobuf::Message
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1142
      start: 1068
    functionDepth: 2
    functionLinenumber: 1068
    functionLinenumberEnd: 1142
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFOutputStream*::set_bad
    - google::protobuf::FieldDescriptor*::is_required
    - AMFOutputStream*::good
    - LOG
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Reflection*::GetDouble
    - google::protobuf::Reflection*::GetBool
    - AMFOutputStream*::put_u8
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::FieldDescriptor*::name
    - AMFOutputStream*::put_u16
    - data
    - AMFOutputStream*::putn
    - brpc::WriteAMFObject
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - GetDescriptor
    - google::protobuf::Reflection*::GetString
    - google::protobuf::Reflection*::GetMessage
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::Reflection*::HasField
    - GetReflection
    - brpc::size
    - AMFOutputStream*::put_u64
    - AMFOutputStream*::put_u32
    - std::string::data
    - std::string::size
    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:1145,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1147,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1148,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1150,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1153,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1154,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1154,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1157,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1158,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1159,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1159,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1160,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1160,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1160,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1163,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1164,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1165,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1165,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1170,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1170,1
    - Dst: brpc::WriteAMFArray
      Src: /src/brpc/src/brpc/amf.cpp:1173,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1173,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1176,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1179,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1191,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1191,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1191,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:1194,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 2
    argNames:
    - ' field'
    - stream
    argTypes:
    - AMFField
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1197
      start: 1144
    functionDepth: 3
    functionLinenumber: 1144
    functionLinenumberEnd: 1197
    functionName: brpc::WriteAMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFOutputStream*::putn
    - AsString
    - brpc::WriteAMFObject
    - brpc::WriteAMFArray
    - AsArray
    - brpc::marker2str
    - AMFOutputStream*::put_u8
    - butil::StringPiece::size
    - AsBool
    - butil::StringPiece::data
    - AsObject
    - AMFOutputStream*::put_u64
    - AMFOutputStream*::put_u32
    - LOG
    - CHECK
    - AMFOutputStream*::put_u16
    - AsNumber
    - type
    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:1200,1
    - Dst: begin
      Src: /src/brpc/src/brpc/amf.cpp:1201,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1201,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1204,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1205,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1207,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1207,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1208,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1208,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1208,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1209,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1211,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1215,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1216,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' obj'
    - stream
    argTypes:
    - AMFObject
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1199
    functionDepth: 4
    functionLinenumber: 1199
    functionLinenumberEnd: 1217
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - begin
    - AMFOutputStream*::set_bad
    - AMFOutputStream*::putn
    - end
    - AMFOutputStream*::good
    - AMFOutputStream*::put_u8
    - brpc::WriteAMFField
    - LOG
    - brpc::size
    - AMFOutputStream*::put_u16
    - data
    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:1220,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1221,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1221,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1222,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1223,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1225,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' arr'
    - stream
    argTypes:
    - AMFArray
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1229
      start: 1219
    functionDepth: 4
    functionLinenumber: 1219
    functionLinenumberEnd: 1229
    functionName: brpc::WriteAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::good
    - AMFOutputStream*::put_u8
    - brpc::WriteAMFField
    - LOG
    - brpc::size
    - AMFOutputStream*::put_u32
    linkageType: ''
    returnType: void
    signature: void WriteAMFArray(const AMFArray& arr, AMFOutputStream* stream)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1232,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1234,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1236,1
    - Dst: marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1251,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1251,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1254,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1257,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 2
    argNames:
    - ' os'
    - ' field'
    argTypes:
    - std::ostream
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1262
      start: 1231
    functionDepth: 0
    functionLinenumber: 1231
    functionLinenumberEnd: 1262
    functionName: '& operator<<(std::ostream& os, const AMFField& field)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AsString
    - AsArray
    - AsObject
    - AsBool
    - marker2str
    - AsNumber
    - type
    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:1267,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1267,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - AMFObject
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1264
    functionDepth: 0
    functionLinenumber: 1264
    functionLinenumberEnd: 1276
    functionName: '& operator<<(std::ostream& os, const AMFObject& obj)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - begin
    - end
    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:1281,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:1283,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' arr'
    argTypes:
    - std::ostream
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1294
      start: 1278
    functionDepth: 0
    functionLinenumber: 1278
    functionLinenumberEnd: 1294
    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: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - depth
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 35
    functionDepth: 1
    functionLinenumber: 35
    functionLinenumberEnd: 42
    functionName: brpc::CheckAMFDepth
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 9
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckAMFDepth(int depth)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:47,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - len
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 52
    functionName: brpc::CheckAMFStringSize
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckAMFStringSize(uint32_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - count
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 62
    functionName: brpc::CheckAMFArraySize
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckAMFArraySize(uint32_t count)
  - BBCount: 19
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 40
    argCount: 1
    argNames:
    - marker
    argTypes:
    - AMFMarker
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 86
    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:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - marker
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 90
    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: 96
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 96
    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:101,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:103,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:104,1
    - Dst: brpc::AMFField::IsObject
      Src: /src/brpc/src/brpc/amf.cpp:106,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:107,1
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:108,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:109,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 111
    functionName: brpc::AMFField::AMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::AMFObject
    - malloc
    - memcpy
    - brpc::AMFField::IsObject
    - AMFArray::AMFArray
    - brpc::AMFField::IsArray
    - brpc::AMFField::IsString
    linkageType: ''
    returnType: void
    signature: void AMFField::AMFField(const AMFField& rhs)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: Clear
      Src: /src/brpc/src/brpc/amf.cpp:114,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/amf.cpp:119,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:121,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:122,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/amf.cpp:124,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:125,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/amf.cpp:126,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:127,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 130
    functionName: '& AMFField::operator=(const AMFField& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::AMFObject
    - malloc
    - memcpy
    - AMFArray::AMFArray
    - IsArray
    - IsObject
    - Clear
    - IsString
    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:133,1
    - Dst: free
      Src: /src/brpc/src/brpc/amf.cpp:155,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 168
    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:172,1
    - Dst: brpc::AMFObject::end
      Src: /src/brpc/src/brpc/amf.cpp:173,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 170
    functionDepth: 2
    functionLinenumber: 170
    functionLinenumberEnd: 177
    functionName: brpc::AMFObject::Find
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - butil::find_cstr
    - brpc::AMFObject::end
    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:181,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:182,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:185,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:187,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:189,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/amf.cpp:191,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:191,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/amf.cpp:192,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:193,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:195,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 16
    argCount: 1
    argNames:
    - ' str'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 198
    functionName: brpc::AMFField::SetString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - malloc
    - brpc::AMFField::Clear
    - memcpy
    - data
    - 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:202,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 200
    functionDepth: 0
    functionLinenumber: 200
    functionLinenumberEnd: 206
    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:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - val
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 214
    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:218,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 221
    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:225,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 228
    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:232,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 235
    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:238,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:239,1
    - Dst: AMFObject::AMFObject
      Src: /src/brpc/src/brpc/amf.cpp:241,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 244
      start: 237
    functionDepth: 0
    functionLinenumber: 237
    functionLinenumberEnd: 244
    functionName: brpc::AMFField::MutableObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    - brpc::AMFField::IsObject
    - AMFObject::AMFObject
    linkageType: ''
    returnType: AMFObject
    signature: AMFObject * AMFField::MutableObject()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFField::IsArray
      Src: /src/brpc/src/brpc/amf.cpp:247,1
    - Dst: brpc::AMFField::Clear
      Src: /src/brpc/src/brpc/amf.cpp:248,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:250,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 246
    functionDepth: 0
    functionLinenumber: 246
    functionLinenumberEnd: 253
    functionName: brpc::AMFField::MutableArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - brpc::AMFField::Clear
    - brpc::AMFField::IsArray
    - AMFArray::AMFArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray * AMFField::MutableArray()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::AMFObject::SetString
      Src: /src/brpc/src/brpc/amf.cpp:258,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - ' str'
    argTypes:
    - std::string
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 259
      start: 257
    functionDepth: 1
    functionLinenumber: 257
    functionLinenumberEnd: 259
    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:262,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 261
    functionDepth: 1
    functionLinenumber: 261
    functionLinenumberEnd: 263
    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:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' name'
    - val
    argTypes:
    - std::string
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 267
    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:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 271
    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:274,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 275
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 275
    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:278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 277
    functionDepth: 1
    functionLinenumber: 277
    functionLinenumberEnd: 279
    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:282,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 281
    functionDepth: 1
    functionLinenumber: 281
    functionLinenumberEnd: 283
    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:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 287
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u16
      Src: /src/brpc/src/brpc/amf.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:292,1
    - Dst: brpc::CheckAMFStringSize
      Src: /src/brpc/src/brpc/amf.cpp:295,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:298,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:299,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/amf.cpp:300,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:301,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 289
    functionDepth: 2
    functionLinenumber: 289
    functionLinenumberEnd: 305
    functionName: brpc::ReadAMFShortStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 9
    functionsReached:
    - AMFInputStream*::cut_u16
    - std::string*::clear
    - brpc::CheckAMFStringSize
    - std::string*::resize
    - LOG
    - AMFInputStream*::cutn
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFShortStringBody(std::string* str, AMFInputStream* stream)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:309,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:310,1
    - Dst: brpc::CheckAMFStringSize
      Src: /src/brpc/src/brpc/amf.cpp:313,1
    - Dst: std::string*::resize
      Src: /src/brpc/src/brpc/amf.cpp:316,1
    - Dst: AMFInputStream*::cutn
      Src: /src/brpc/src/brpc/amf.cpp:317,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/amf.cpp:318,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:319,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 307
    functionDepth: 2
    functionLinenumber: 307
    functionLinenumberEnd: 323
    functionName: brpc::ReadAMFLongStringBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 4
    functionsReached:
    - AMFInputStream*::cut_u32
    - std::string*::clear
    - AMFInputStream*::cutn
    - std::string*::resize
    - brpc::CheckAMFStringSize
    - 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:327,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:328,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:332,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:336,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:336,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 2
    argNames:
    - str
    - stream
    argTypes:
    - std::string*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 325
    functionDepth: 3
    functionLinenumber: 325
    functionLinenumberEnd: 338
    functionName: brpc::ReadAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFLongStringBody
    - 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:342,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:343,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:349,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:355,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:355,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 357
    functionName: brpc::ReadAMFBool
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    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:361,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:362,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:366,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:372,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 374
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 374
    functionName: brpc::ReadAMFNumber
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - AMFInputStream*::cut_u64
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNumber(double* val, AMFInputStream* stream)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ReadAMFNumber
      Src: /src/brpc/src/brpc/amf.cpp:378,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 383
      start: 376
    functionDepth: 2
    functionLinenumber: 376
    functionLinenumberEnd: 383
    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:387,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:388,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:394,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:394,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 396
      start: 385
    functionDepth: 1
    functionLinenumber: 385
    functionLinenumberEnd: 396
    functionName: brpc::ReadAMFNull
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFNull(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:401,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:407,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:407,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 398
    functionDepth: 1
    functionLinenumber: 398
    functionLinenumberEnd: 409
    functionName: brpc::ReadAMFUndefined
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUndefined(AMFInputStream* stream)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:413,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:420,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:420,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 422
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 422
    functionName: brpc::ReadAMFUnsupported
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFUnsupported(AMFInputStream* stream)
  - BBCount: 39
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:433,1
    - Dst: google::protobuf::Message*::GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:438,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:441,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:442,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:448,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:449,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:454,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:455,1
    - Dst: google::protobuf::Reflection*::SetDouble
      Src: /src/brpc/src/brpc/amf.cpp:458,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:464,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:465,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:469,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:470,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:470,1
    - Dst: google::protobuf::Reflection*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:472,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:478,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:482,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:483,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:484,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:486,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:492,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:493,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:499,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:500,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:500,1
    - Dst: google::protobuf::Reflection*::MutableMessage
      Src: /src/brpc/src/brpc/amf.cpp:502,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:503,1
    - Dst: brpc::SkipAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:526,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:526,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:529,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:534,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:539,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:540,1
    - Dst: google::protobuf::Reflection*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:542,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 107
    argCount: 4
    argNames:
    - stream
    - message
    - field
    - depth
    argTypes:
    - AMFInputStream*
    - google::protobuf::Message*
    - google::protobuf::FieldDescriptor*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 548
      start: 429
    functionDepth: 5
    functionLinenumber: 429
    functionLinenumberEnd: 548
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - AMFInputStream*::cut_u8
    - AMFInputStream*::cut_u64
    - brpc::marker2str
    - google::protobuf::FieldDescriptor*::full_name
    - brpc::SkipAMFObjectBody
    - CHECK
    - LOG
    - google::protobuf::FieldDescriptor*::cpp_type
    - brpc::CheckAMFDepth
    - google::protobuf::Reflection*::SetDouble
    - google::protobuf::Reflection*::SetBool
    - brpc::ReadAMFLongStringBody
    - google::protobuf::Reflection*::MutableMessage
    - brpc::ReadAMFObjectBody
    - google::protobuf::Message*::GetReflection
    - 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,\n                               int depth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:553,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:556,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:558,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:559,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:561,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:566,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:572,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:573,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:573,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:575,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - message
    - stream
    - depth
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 550
    functionDepth: 4
    functionLinenumber: 550
    functionLinenumberEnd: 580
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 6
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFObjectField
    - std::string::empty
    - google::protobuf::Descriptor*::FindFieldByName
    - RPC_VLOG_IF
    - LOG
    - brpc::CheckAMFDepth
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Message*::GetDescriptor
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectBody(google::protobuf::Message* message,\n                              AMFInputStream*
      stream,\n                              int depth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:583,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:587,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:588,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:590,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:591,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:595,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:601,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 2
    argNames:
    - stream
    - depth
    argTypes:
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 582
    functionDepth: 4
    functionLinenumber: 582
    functionLinenumberEnd: 606
    functionName: brpc::SkipAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFObjectField
    - std::string::empty
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool SkipAMFObjectBody(AMFInputStream* stream, int depth)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:611,1
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:615,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:616,1
    - Dst: brpc::CheckAMFArraySize
      Src: /src/brpc/src/brpc/amf.cpp:619,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:622,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:625,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:626,1
    - Dst: google::protobuf::Descriptor*::FindFieldByName
      Src: /src/brpc/src/brpc/amf.cpp:629,1
    - Dst: RPC_VLOG_IF
      Src: /src/brpc/src/brpc/amf.cpp:630,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:630,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:632,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 3
    argNames:
    - message
    - stream
    - depth
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 637
      start: 608
    functionDepth: 4
    functionLinenumber: 608
    functionLinenumberEnd: 637
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 4
    functionsReached:
    - brpc::ReadAMFObjectField
    - brpc::CheckAMFArraySize
    - AMFInputStream*::cut_u32
    - google::protobuf::Descriptor*::FindFieldByName
    - RPC_VLOG_IF
    - LOG
    - brpc::CheckAMFDepth
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::Message*::GetDescriptor
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFEcmaArrayBody(google::protobuf::Message* message,\n                                 AMFInputStream*
      stream,\n                                 int depth)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:641,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:642,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:646,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:650,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:655,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/amf.cpp:658,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:659,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/amf.cpp:660,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - msg
    - stream
    argTypes:
    - google::protobuf::Message*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 664
      start: 639
    functionDepth: 5
    functionLinenumber: 639
    functionLinenumberEnd: 664
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - AMFInputStream*::cut_u8
    - google::protobuf::Message*::IsInitialized
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFEcmaArrayBody
    - google::protobuf::Message*::InitializationErrorString
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(google::protobuf::Message* msg, AMFInputStream*
      stream)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:676,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:680,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:681,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:687,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:688,1
    - Dst: AMFObject*::SetNumber
      Src: /src/brpc/src/brpc/amf.cpp:692,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:696,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:697,1
    - Dst: AMFObject*::SetBool
      Src: /src/brpc/src/brpc/amf.cpp:700,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:704,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:707,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:711,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:712,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:717,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:717,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:722,1
    - Dst: AMFObject*::MutableObject
      Src: /src/brpc/src/brpc/amf.cpp:722,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:727,1
    - Dst: AMFObject*::MutableArray
      Src: /src/brpc/src/brpc/amf.cpp:727,1
    - Dst: AMFObject*::SetNull
      Src: /src/brpc/src/brpc/amf.cpp:732,1
    - Dst: AMFObject*::SetUndefined
      Src: /src/brpc/src/brpc/amf.cpp:735,1
    - Dst: AMFObject*::SetUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:738,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:746,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:746,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:749,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:753,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:754,1
    - Dst: AMFObject*::SetString
      Src: /src/brpc/src/brpc/amf.cpp:757,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 85
    argCount: 4
    argNames:
    - stream
    - obj
    - ' name'
    - depth
    argTypes:
    - AMFInputStream*
    - AMFObject*
    - std::string
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 761
      start: 672
    functionDepth: 7
    functionLinenumber: 672
    functionLinenumberEnd: 761
    functionName: brpc::ReadAMFObjectField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - AMFObject*::SetString
    - brpc::ReadAMFLongStringBody
    - AMFInputStream*::cut_u8
    - CHECK
    - brpc::ReadAMFArrayBody
    - AMFObject*::SetNull
    - AMFObject*::SetUnsupported
    - brpc::ReadAMFShortStringBody
    - AMFObject*::SetBool
    - AMFObject*::MutableArray
    - brpc::ReadAMFEcmaArrayBody
    - brpc::ReadAMFObjectBody
    - AMFInputStream*::cut_u64
    - brpc::marker2str
    - brpc::CheckAMFDepth
    - AMFObject*::MutableObject
    - AMFObject*::SetNumber
    - AMFObject*::SetUndefined
    linkageType: ''
    returnType: bool
    signature: "bool ReadAMFObjectField(AMFInputStream* stream,\n                               AMFObject*
      obj,\n                               const std::string& name,\n                               int
      depth)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:764,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:768,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/amf.cpp:769,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:771,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:776,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:782,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 3
    argNames:
    - obj
    - stream
    - depth
    argTypes:
    - AMFObject*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 787
      start: 763
    functionDepth: 4
    functionLinenumber: 763
    functionLinenumberEnd: 787
    functionName: brpc::ReadAMFObjectBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 8
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::ReadAMFObjectField
    - std::string::empty
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObjectBody(AMFObject* obj, AMFInputStream* stream, int
      depth)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:790,1
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:794,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:795,1
    - Dst: brpc::CheckAMFArraySize
      Src: /src/brpc/src/brpc/amf.cpp:798,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:803,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:804,1
    - Dst: brpc::ReadAMFObjectField
      Src: /src/brpc/src/brpc/amf.cpp:807,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - obj
    - stream
    - depth
    argTypes:
    - AMFObject*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 812
      start: 789
    functionDepth: 4
    functionLinenumber: 789
    functionLinenumberEnd: 812
    functionName: brpc::ReadAMFEcmaArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 6
    functionsReached:
    - brpc::ReadAMFObjectField
    - brpc::CheckAMFArraySize
    - AMFInputStream*::cut_u32
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFShortStringBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFEcmaArrayBody(AMFObject* obj, AMFInputStream* stream, int
      depth)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:816,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:817,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:821,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:825,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:830,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:830,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 20
    argCount: 2
    argNames:
    - obj
    - stream
    argTypes:
    - AMFObject*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 834
      start: 814
    functionDepth: 5
    functionLinenumber: 814
    functionLinenumberEnd: 834
    functionName: brpc::ReadAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFEcmaArrayBody
    - brpc::ReadAMFObjectBody
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFObject(AMFObject* obj, AMFInputStream* stream)
  - BBCount: 29
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:837,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:841,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:842,1
    - Dst: AMFInputStream*::cut_u64
      Src: /src/brpc/src/brpc/amf.cpp:848,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:849,1
    - Dst: AMFArray*::AddNumber
      Src: /src/brpc/src/brpc/amf.cpp:853,1
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:857,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:858,1
    - Dst: AMFArray*::AddBool
      Src: /src/brpc/src/brpc/amf.cpp:861,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:865,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:868,1
    - Dst: brpc::ReadAMFShortStringBody
      Src: /src/brpc/src/brpc/amf.cpp:872,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:873,1
    - Dst: brpc::ReadAMFObjectBody
      Src: /src/brpc/src/brpc/amf.cpp:878,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:878,1
    - Dst: brpc::ReadAMFEcmaArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:883,1
    - Dst: AMFArray*::AddObject
      Src: /src/brpc/src/brpc/amf.cpp:883,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:888,1
    - Dst: AMFArray*::AddArray
      Src: /src/brpc/src/brpc/amf.cpp:888,1
    - Dst: AMFArray*::AddNull
      Src: /src/brpc/src/brpc/amf.cpp:893,1
    - Dst: AMFArray*::AddUndefined
      Src: /src/brpc/src/brpc/amf.cpp:896,1
    - Dst: AMFArray*::AddUnsupported
      Src: /src/brpc/src/brpc/amf.cpp:899,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:907,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:907,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:910,1
    - Dst: brpc::ReadAMFLongStringBody
      Src: /src/brpc/src/brpc/amf.cpp:914,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:915,1
    - Dst: AMFArray*::AddString
      Src: /src/brpc/src/brpc/amf.cpp:918,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 85
    argCount: 3
    argNames:
    - stream
    - arr
    - depth
    argTypes:
    - AMFInputStream*
    - AMFArray*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 922
      start: 836
    functionDepth: 7
    functionLinenumber: 836
    functionLinenumberEnd: 922
    functionName: brpc::ReadAMFArrayItem
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFArray*::AddNumber
    - LOG
    - brpc::ReadAMFLongStringBody
    - AMFInputStream*::cut_u8
    - CHECK
    - brpc::ReadAMFArrayBody
    - AMFArray*::AddUndefined
    - AMFArray*::AddBool
    - brpc::ReadAMFShortStringBody
    - AMFArray*::AddObject
    - AMFArray*::AddNull
    - brpc::ReadAMFEcmaArrayBody
    - AMFArray*::AddArray
    - AMFArray*::AddUnsupported
    - brpc::ReadAMFObjectBody
    - AMFArray*::AddString
    - AMFInputStream*::cut_u64
    - brpc::marker2str
    - brpc::CheckAMFDepth
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayItem(AMFInputStream* stream, AMFArray* arr, int depth)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CheckAMFDepth
      Src: /src/brpc/src/brpc/amf.cpp:925,1
    - Dst: AMFInputStream*::cut_u32
      Src: /src/brpc/src/brpc/amf.cpp:929,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:930,1
    - Dst: brpc::CheckAMFArraySize
      Src: /src/brpc/src/brpc/amf.cpp:933,1
    - Dst: brpc::ReadAMFArrayItem
      Src: /src/brpc/src/brpc/amf.cpp:937,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 3
    argNames:
    - arr
    - stream
    - depth
    argTypes:
    - AMFArray*
    - AMFInputStream*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 942
      start: 924
    functionDepth: 6
    functionLinenumber: 924
    functionLinenumberEnd: 942
    functionName: brpc::ReadAMFArrayBody
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - brpc::CheckAMFArraySize
    - AMFInputStream*::cut_u32
    - LOG
    - brpc::CheckAMFDepth
    - brpc::ReadAMFArrayItem
    linkageType: ''
    returnType: bool
    signature: bool ReadAMFArrayBody(AMFArray* arr, AMFInputStream* stream, int depth)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: AMFInputStream*::cut_u8
      Src: /src/brpc/src/brpc/amf.cpp:946,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:947,1
    - Dst: brpc::ReadAMFArrayBody
      Src: /src/brpc/src/brpc/amf.cpp:951,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:956,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:956,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - arr
    - stream
    argTypes:
    - AMFArray*
    - AMFInputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 960
      start: 944
    functionDepth: 7
    functionLinenumber: 944
    functionLinenumberEnd: 960
    functionName: brpc::ReadAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFInputStream*::cut_u8
    - brpc::marker2str
    - LOG
    - brpc::ReadAMFArrayBody
    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: 965
      start: 964
    functionDepth: 0
    functionLinenumber: 964
    functionLinenumberEnd: 965
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AMFArray::AMFArray()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:969,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:969,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:973,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 976
      start: 967
    functionDepth: 1
    functionLinenumber: 967
    functionLinenumberEnd: 976
    functionName: brpc::AMFArray::AMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    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:980,1
    - Dst: AMFArray::AMFArray
      Src: /src/brpc/src/brpc/amf.cpp:981,1
    - Dst: RemoveLastField
      Src: /src/brpc/src/brpc/amf.cpp:987,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' rhs'
    argTypes:
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 990
      start: 978
    functionDepth: 0
    functionLinenumber: 978
    functionLinenumberEnd: 990
    functionName: '& AMFArray::operator=(const AMFArray& rhs)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - RemoveLastField
    - '& AMFArray::~AMFArray'
    - AMFArray::AMFArray
    linkageType: ''
    returnType: AMFArray
    signature: AMFArray & AMFArray::operator=(const AMFArray& rhs)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/amf.cpp:993,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:993,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:995,1
    - Dst: clear
      Src: /src/brpc/src/brpc/amf.cpp:998,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 999
      start: 992
    functionDepth: 1
    functionLinenumber: 992
    functionLinenumberEnd: 999
    functionName: brpc::AMFArray::Clear
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 3
    functionsReached:
    - clear
    - std::min
    - brpc::AMFArray::Clear
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::Clear()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:1002,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:1005,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:1006,1
    - Dst: resize
      Src: /src/brpc/src/brpc/amf.cpp:1010,1
    - Dst: brpc::AMFArray::size
      Src: /src/brpc/src/brpc/amf.cpp:1010,1
    - Dst: back
      Src: /src/brpc/src/brpc/amf.cpp:1012,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 1001
    functionDepth: 1
    functionLinenumber: 1001
    functionLinenumberEnd: 1013
    functionName: brpc::AMFArray::AddField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 16
    functionsReached:
    - back
    - brpc::AMFArray::size
    - resize
    - arraysize
    linkageType: ''
    returnType: AMFField
    signature: AMFField * AMFArray::AddField()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: arraysize
      Src: /src/brpc/src/brpc/amf.cpp:1019,1
    - Dst: brpc::AMFArray::Clear
      Src: /src/brpc/src/brpc/amf.cpp:1020,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/amf.cpp:1023,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1025
      start: 1015
    functionDepth: 1
    functionLinenumber: 1015
    functionLinenumberEnd: 1025
    functionName: brpc::AMFArray::RemoveLastField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - brpc::AMFArray::Clear
    - arraysize
    linkageType: ''
    returnType: void
    signature: void AMFArray::RemoveLastField()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1030,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1031,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1032,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1032,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1033,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1035,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1036,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1036,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1037,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 2
    argNames:
    - ' str'
    - stream
    argTypes:
    - butil::StringPiece
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1039
      start: 1029
    functionDepth: 2
    functionLinenumber: 1029
    functionLinenumberEnd: 1039
    functionName: brpc::WriteAMFString
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 1
    functionsReached:
    - AMFOutputStream*::putn
    - AMFOutputStream*::put_u8
    - brpc::size
    - AMFOutputStream*::put_u32
    - AMFOutputStream*::put_u16
    - data
    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:1042,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1043,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - bool
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1041
    functionDepth: 0
    functionLinenumber: 1041
    functionLinenumberEnd: 1044
    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:1047,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1049,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - double
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1050
      start: 1046
    functionDepth: 0
    functionLinenumber: 1046
    functionLinenumberEnd: 1050
    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:1053,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - val
    - stream
    argTypes:
    - uint32_t
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 1052
    functionDepth: 1
    functionLinenumber: 1052
    functionLinenumberEnd: 1054
    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:1057,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 1056
    functionDepth: 0
    functionLinenumber: 1056
    functionLinenumberEnd: 1058
    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:1061,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1062
      start: 1060
    functionDepth: 0
    functionLinenumber: 1060
    functionLinenumberEnd: 1062
    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:1065,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream
    argTypes:
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1066
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1066
    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:1070,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/amf.cpp:1071,1
    - Dst: GetReflection
      Src: /src/brpc/src/brpc/amf.cpp:1072,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/amf.cpp:1073,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/amf.cpp:1074,1
    - Dst: google::protobuf::FieldDescriptor*::is_repeated
      Src: /src/brpc/src/brpc/amf.cpp:1075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1076,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1077,1
    - Dst: google::protobuf::Reflection*::HasField
      Src: /src/brpc/src/brpc/amf.cpp:1079,1
    - Dst: google::protobuf::FieldDescriptor*::is_required
      Src: /src/brpc/src/brpc/amf.cpp:1081,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1082,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:1082,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1083,1
    - Dst: google::protobuf::FieldDescriptor*::name
      Src: /src/brpc/src/brpc/amf.cpp:1088,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1089,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1090,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1091,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1093,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1093,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1094,1
    - Dst: google::protobuf::FieldDescriptor*::cpp_type
      Src: /src/brpc/src/brpc/amf.cpp:1095,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1100,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1101,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1103,1
    - Dst: google::protobuf::Reflection*::GetDouble
      Src: /src/brpc/src/brpc/amf.cpp:1104,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1106,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1109,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1110,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1112,1
    - Dst: google::protobuf::Reflection*::GetBool
      Src: /src/brpc/src/brpc/amf.cpp:1113,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1117,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1118,1
    - Dst: google::protobuf::Reflection*::GetString
      Src: /src/brpc/src/brpc/amf.cpp:1120,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1121,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1122,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1123,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1124,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1126,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1127,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1127,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1128,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/amf.cpp:1128,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/amf.cpp:1128,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1132,1
    - Dst: google::protobuf::Reflection*::GetMessage
      Src: /src/brpc/src/brpc/amf.cpp:1132,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: google::protobuf::FieldDescriptor*::full_name
      Src: /src/brpc/src/brpc/amf.cpp:1136,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1140,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1141,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 67
    argCount: 2
    argNames:
    - ' message'
    - stream
    argTypes:
    - google::protobuf::Message
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1142
      start: 1068
    functionDepth: 2
    functionLinenumber: 1068
    functionLinenumberEnd: 1142
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 4
    functionsReached:
    - AMFOutputStream*::set_bad
    - google::protobuf::FieldDescriptor*::is_required
    - AMFOutputStream*::good
    - LOG
    - google::protobuf::Descriptor*::field_count
    - google::protobuf::Reflection*::GetDouble
    - google::protobuf::Reflection*::GetBool
    - AMFOutputStream*::put_u8
    - google::protobuf::FieldDescriptor*::cpp_type
    - google::protobuf::FieldDescriptor*::name
    - AMFOutputStream*::put_u16
    - data
    - AMFOutputStream*::putn
    - brpc::WriteAMFObject
    - google::protobuf::FieldDescriptor*::full_name
    - google::protobuf::Descriptor*::field
    - GetDescriptor
    - google::protobuf::Reflection*::GetString
    - google::protobuf::Reflection*::GetMessage
    - google::protobuf::FieldDescriptor*::is_repeated
    - google::protobuf::Reflection*::HasField
    - GetReflection
    - brpc::size
    - AMFOutputStream*::put_u64
    - AMFOutputStream*::put_u32
    - std::string::data
    - std::string::size
    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:1145,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1147,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1148,1
    - Dst: AMFOutputStream*::put_u64
      Src: /src/brpc/src/brpc/amf.cpp:1150,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1153,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1154,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1154,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1157,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1158,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1159,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1159,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1160,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1160,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1160,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1163,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1164,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1165,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1165,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/amf.cpp:1166,1
    - Dst: brpc::WriteAMFObject
      Src: /src/brpc/src/brpc/amf.cpp:1170,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1170,1
    - Dst: brpc::WriteAMFArray
      Src: /src/brpc/src/brpc/amf.cpp:1173,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1173,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1176,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1179,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1191,1
    - Dst: brpc::marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1191,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1191,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/amf.cpp:1194,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 52
    argCount: 2
    argNames:
    - ' field'
    - stream
    argTypes:
    - AMFField
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1197
      start: 1144
    functionDepth: 5
    functionLinenumber: 1144
    functionLinenumberEnd: 1197
    functionName: brpc::WriteAMFField
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFOutputStream*::putn
    - AsString
    - brpc::WriteAMFObject
    - brpc::WriteAMFArray
    - AsArray
    - brpc::marker2str
    - AMFOutputStream*::put_u8
    - butil::StringPiece::size
    - AsBool
    - butil::StringPiece::data
    - AsObject
    - AMFOutputStream*::put_u64
    - AMFOutputStream*::put_u32
    - LOG
    - CHECK
    - AMFOutputStream*::put_u16
    - AsNumber
    - type
    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:1200,1
    - Dst: begin
      Src: /src/brpc/src/brpc/amf.cpp:1201,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1201,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1204,1
    - Dst: AMFOutputStream*::set_bad
      Src: /src/brpc/src/brpc/amf.cpp:1205,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1207,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1207,1
    - Dst: AMFOutputStream*::putn
      Src: /src/brpc/src/brpc/amf.cpp:1208,1
    - Dst: data
      Src: /src/brpc/src/brpc/amf.cpp:1208,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1208,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1209,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1211,1
    - Dst: AMFOutputStream*::put_u16
      Src: /src/brpc/src/brpc/amf.cpp:1215,1
    - Dst: AMFOutputStream*::put_u8
      Src: /src/brpc/src/brpc/amf.cpp:1216,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - ' obj'
    - stream
    argTypes:
    - AMFObject
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1199
    functionDepth: 4
    functionLinenumber: 1199
    functionLinenumberEnd: 1217
    functionName: brpc::WriteAMFObject
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 5
    functionsReached:
    - begin
    - AMFOutputStream*::set_bad
    - AMFOutputStream*::putn
    - end
    - AMFOutputStream*::good
    - AMFOutputStream*::put_u8
    - brpc::WriteAMFField
    - LOG
    - brpc::size
    - AMFOutputStream*::put_u16
    - data
    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:1220,1
    - Dst: AMFOutputStream*::put_u32
      Src: /src/brpc/src/brpc/amf.cpp:1221,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1221,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/amf.cpp:1222,1
    - Dst: brpc::WriteAMFField
      Src: /src/brpc/src/brpc/amf.cpp:1223,1
    - Dst: AMFOutputStream*::good
      Src: /src/brpc/src/brpc/amf.cpp:1224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/amf.cpp:1225,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' arr'
    - stream
    argTypes:
    - AMFArray
    - AMFOutputStream*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1229
      start: 1219
    functionDepth: 4
    functionLinenumber: 1219
    functionLinenumberEnd: 1229
    functionName: brpc::WriteAMFArray
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 2
    functionsReached:
    - AMFOutputStream*::good
    - AMFOutputStream*::put_u8
    - brpc::WriteAMFField
    - LOG
    - brpc::size
    - AMFOutputStream*::put_u32
    linkageType: ''
    returnType: void
    signature: void WriteAMFArray(const AMFArray& arr, AMFOutputStream* stream)
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1232,1
    - Dst: AsNumber
      Src: /src/brpc/src/brpc/amf.cpp:1234,1
    - Dst: AsBool
      Src: /src/brpc/src/brpc/amf.cpp:1236,1
    - Dst: marker2str
      Src: /src/brpc/src/brpc/amf.cpp:1251,1
    - Dst: type
      Src: /src/brpc/src/brpc/amf.cpp:1251,1
    - Dst: AsString
      Src: /src/brpc/src/brpc/amf.cpp:1254,1
    - Dst: AsObject
      Src: /src/brpc/src/brpc/amf.cpp:1257,1
    - Dst: AsArray
      Src: /src/brpc/src/brpc/amf.cpp:1259,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 31
    argCount: 2
    argNames:
    - ' os'
    - ' field'
    argTypes:
    - std::ostream
    - AMFField
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1262
      start: 1231
    functionDepth: 0
    functionLinenumber: 1231
    functionLinenumberEnd: 1262
    functionName: '& operator<<(std::ostream& os, const AMFField& field)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - AsString
    - AsArray
    - AsObject
    - AsBool
    - marker2str
    - AsNumber
    - type
    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:1267,1
    - Dst: end
      Src: /src/brpc/src/brpc/amf.cpp:1267,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - AMFObject
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1276
      start: 1264
    functionDepth: 0
    functionLinenumber: 1264
    functionLinenumberEnd: 1276
    functionName: '& operator<<(std::ostream& os, const AMFObject& obj)'
    functionSourceFile: /src/brpc/src/brpc/amf.cpp
    functionUses: 0
    functionsReached:
    - begin
    - end
    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:1281,1
    - Dst: size
      Src: /src/brpc/src/brpc/amf.cpp:1283,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' arr'
    argTypes:
    - std::ostream
    - AMFArray
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1294
      start: 1278
    functionDepth: 0
    functionLinenumber: 1278
    functionLinenumberEnd: 1294
    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:
    - 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: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:
    - static_cast<T*>
    - bvar::detail::UniqueLockBase::release
    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:
    - 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: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:
    - static_cast<T*>
    - bvar::detail::UniqueLockBase::release
    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: 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:
    - schema
    - scheme
    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:
    - brpc::URI::SetH2Path
    - c_str
    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: 15
    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:
    - schema
    - scheme
    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:
    - brpc::URI::SetH2Path
    - c_str
    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: 26
    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: 26
    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: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    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: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    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:74,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:75,1
    - Dst: SerializeResponseToIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:76,1
    - Dst: get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:76,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:79,1
    - Dst: brpc::SendNsheadPbResponse::~SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:82,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:91,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:92,1
    - Dst: NsheadClosure*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 95
    functionName: brpc::SendNsheadPbResponse::Run
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - NsheadClosure*::Run
    - received_us
    - brpc::SendNsheadPbResponse::~SendNsheadPbResponse
    - Failed
    - butil::cpuwide_time_us
    - SerializeResponseToIOBuf
    - MethodStatus*::OnResponded
    - get
    - IsCloseConnection
    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:101,1
    - Dst: SendNsheadPbResponse::SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:101,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:105,1
    - Dst: ParseNsheadMeta
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:108,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:109,1
    - Dst: NsheadMeta*::has_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:112,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:113,1
    - Dst: NsheadMeta*::log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:113,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:117,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:118,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:120,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:120,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:121,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:122,1
    - Dst: Server::MethodProperty*::status::OnRequested
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:126,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:130,1
    - Dst: NsheadClosure*::SetMethodName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: SendNsheadPbResponse*::pbreq::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:132,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:132,1
    - Dst: SendNsheadPbResponse*::pbres::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: ParseRequestFromIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:135,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:135,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:136,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:141,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:141,1
    - Dst: SendNsheadPbResponse*::pbres::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:142,1
    - Dst: SendNsheadPbResponse*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:145,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: 146
      start: 97
    functionDepth: 2
    functionLinenumber: 97
    functionLinenumberEnd: 146
    functionName: brpc::NsheadPbServiceAdaptor::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - Server::MethodProperty*::service::GetDescriptor
    - ParseNsheadMeta
    - butil::EnsureString
    - google::protobuf::Service*::GetResponsePrototype
    - SendNsheadPbResponse::SendNsheadPbResponse
    - NsheadClosure*::SetMethodName
    - ControllerPrivateAccessor
    - NsheadMeta*::has_log_id
    - SendNsheadPbResponse*::pbres::reset
    - NsheadClosure*::additional_space
    - SendNsheadPbResponse*::pbreq::get
    - Server::MethodProperty*::status::OnRequested
    - Controller*::set_log_id
    - NsheadMeta*::full_method_name
    - google::protobuf::Service*::CallMethod
    - SendNsheadPbResponse*::Run
    - SendNsheadPbResponse*::pbreq::reset
    - SendNsheadPbResponse*::pbres::get
    - google::protobuf::Service*::GetRequestPrototype
    - NsheadMeta*::log_id
    - ParseRequestFromIOBuf
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - Controller*::Failed
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    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: 44
      start: 44
    functionDepth: 0
    functionLinenumber: 44
    functionLinenumberEnd: 44
    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: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    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:74,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:75,1
    - Dst: SerializeResponseToIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:76,1
    - Dst: get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:76,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:79,1
    - Dst: brpc::SendNsheadPbResponse::~SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:82,1
    - Dst: MethodStatus*::OnResponded
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:91,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:92,1
    - Dst: NsheadClosure*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 95
    functionName: brpc::SendNsheadPbResponse::Run
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - NsheadClosure*::Run
    - received_us
    - brpc::SendNsheadPbResponse::~SendNsheadPbResponse
    - Failed
    - butil::cpuwide_time_us
    - SerializeResponseToIOBuf
    - MethodStatus*::OnResponded
    - get
    - IsCloseConnection
    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:101,1
    - Dst: SendNsheadPbResponse::SendNsheadPbResponse
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:101,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:105,1
    - Dst: ParseNsheadMeta
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:108,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:109,1
    - Dst: NsheadMeta*::has_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:112,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:113,1
    - Dst: NsheadMeta*::log_id
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:113,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:117,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:118,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:120,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:120,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:121,1
    - Dst: NsheadMeta*::full_method_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:122,1
    - Dst: Server::MethodProperty*::status::OnRequested
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:126,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:130,1
    - Dst: NsheadClosure*::SetMethodName
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:131,1
    - Dst: SendNsheadPbResponse*::pbreq::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:132,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:132,1
    - Dst: SendNsheadPbResponse*::pbres::reset
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:133,1
    - Dst: ParseRequestFromIOBuf
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:135,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:135,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:136,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:141,1
    - Dst: SendNsheadPbResponse*::pbreq::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:141,1
    - Dst: SendNsheadPbResponse*::pbres::get
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:142,1
    - Dst: SendNsheadPbResponse*::Run
      Src: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp:145,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: 146
      start: 97
    functionDepth: 2
    functionLinenumber: 97
    functionLinenumberEnd: 146
    functionName: brpc::NsheadPbServiceAdaptor::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/nshead_pb_service_adaptor.cpp
    functionUses: 0
    functionsReached:
    - Server::MethodProperty*::service::GetDescriptor
    - ParseNsheadMeta
    - butil::EnsureString
    - google::protobuf::Service*::GetResponsePrototype
    - SendNsheadPbResponse::SendNsheadPbResponse
    - NsheadClosure*::SetMethodName
    - ControllerPrivateAccessor
    - NsheadMeta*::has_log_id
    - SendNsheadPbResponse*::pbres::reset
    - NsheadClosure*::additional_space
    - SendNsheadPbResponse*::pbreq::get
    - Server::MethodProperty*::status::OnRequested
    - Controller*::set_log_id
    - NsheadMeta*::full_method_name
    - google::protobuf::Service*::CallMethod
    - SendNsheadPbResponse*::Run
    - SendNsheadPbResponse*::pbreq::reset
    - SendNsheadPbResponse*::pbres::get
    - google::protobuf::Service*::GetRequestPrototype
    - NsheadMeta*::log_id
    - ParseRequestFromIOBuf
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - Controller*::Failed
    - pbrpcframework::get_prototype_by_method_descriptor
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    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
    - bthread_id_error
    - CHECK
    - butil::IOBuf::append
    - empty
    - Write
    - butil::IOBuf::IOBuf
    - ReleaseAdditionalReference
    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:
    - load
    - AppendAsChunk
    - empty
    - LOG_EVERY_SECOND
    - butil::IOBuf::IOBuf
    - size
    - brpc::ProgressiveAttachment::Write
    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:
    - load
    - AppendAsChunk
    - LOG_EVERY_SECOND
    - butil::IOBuf::IOBuf
    - size
    - brpc::ProgressiveAttachment::Write
    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:
    - store
    - butil::IOBuf::swap
    - empty
    - std::unique_lock::unlock
    - butil::IOBuf::IOBuf
    - brpc::ProgressiveAttachment::Write
    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:
    - butil::EndPoint
    - brpc::ProgressiveAttachment::remote_side
    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:
    - butil::EndPoint
    - brpc::ProgressiveAttachment::local_side
    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: 6
    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
    - berror
    - LOG
    - bthread_id_create
    - NotifyOnFailed
    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
    - bthread_id_error
    - CHECK
    - butil::IOBuf::append
    - empty
    - Write
    - butil::IOBuf::IOBuf
    - ReleaseAdditionalReference
    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:
    - load
    - AppendAsChunk
    - empty
    - LOG_EVERY_SECOND
    - butil::IOBuf::IOBuf
    - size
    - brpc::ProgressiveAttachment::Write
    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:
    - load
    - AppendAsChunk
    - LOG_EVERY_SECOND
    - butil::IOBuf::IOBuf
    - size
    - brpc::ProgressiveAttachment::Write
    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:
    - store
    - butil::IOBuf::swap
    - empty
    - std::unique_lock::unlock
    - butil::IOBuf::IOBuf
    - brpc::ProgressiveAttachment::Write
    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:
    - butil::EndPoint
    - brpc::ProgressiveAttachment::remote_side
    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:
    - butil::EndPoint
    - brpc::ProgressiveAttachment::local_side
    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: 6
    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
    - berror
    - LOG
    - bthread_id_create
    - NotifyOnFailed
    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:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    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:77,1
    - Dst: GlobalSocketCreator::GlobalSocketCreator
      Src: /src/brpc/src/brpc/socket_map.cpp:79,1
    - Dst: SocketMap*::Init
      Src: /src/brpc/src/brpc/socket_map.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:84,1
    - Dst: exit
      Src: /src/brpc/src/brpc/socket_map.cpp:85,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket_map.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 88
    functionName: brpc::CreateClientSideSocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - store
    - SocketMap*::Init
    - LOG
    - GlobalSocketCreator::GlobalSocketCreator
    - exit
    - SocketMap::SocketMap
    linkageType: ''
    returnType: void
    signature: void CreateClientSideSocketMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    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:96,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/socket_map.cpp:97,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::get_or_new_client_side_socket_map
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - load
    - brpc::get_or_new_client_side_messenger
    - pthread_once
    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:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' opt'
    argTypes:
    - SocketMapKey
    - SocketId*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 14
    functionsReached:
    - brpc::get_or_new_client_side_socket_map
    linkageType: ''
    returnType: int
    signature: "int SocketMapInsert(const SocketMapKey& key, SocketId* id,\n                    SocketOptions&
      opt)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:107,1
    - Dst: SocketMap*::Find
      Src: /src/brpc/src/brpc/socket_map.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 112
    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:115,1
    - Dst: SocketMap*::Remove
      Src: /src/brpc/src/brpc/socket_map.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 123
    functionName: brpc::SocketMapRemove
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 6
    functionsReached:
    - SocketMap*::Remove
    - brpc::get_client_side_socket_map
    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:126,1
    - Dst: SocketMap*::List
      Src: /src/brpc/src/brpc/socket_map.cpp:128,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 132
    functionName: brpc::SocketMapList
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - SocketMap*::List
    - brpc::get_client_side_socket_map
    - std::vector<SocketId>*::clear
    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: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    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: 150
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 150
    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:155,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/socket_map.cpp:156,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket_map.cpp:158,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:161,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:161,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:163,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:174,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/socket_map.cpp:174,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 152
    functionDepth: 3
    functionLinenumber: 152
    functionLinenumberEnd: 183
    functionName: SocketMap::~SocketMap()
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - begin
    - bthread_join
    - SingleConnection*::socket::Failed
    - end
    - LOG
    - std::ostringstream::str
    - empty
    - SingleConnection*::socket::HCEnabled
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void SocketMap::~SocketMap()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:192,1
    - Dst: init
      Src: /src/brpc/src/brpc/socket_map.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:196,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/socket_map.cpp:202,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket_map.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - SocketMapOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 185
    functionDepth: 4
    functionLinenumber: 185
    functionLinenumberEnd: 211
    functionName: brpc::SocketMap::Init
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - init
    - bthread_start_background
    - bthread_attr_set_name
    - 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:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 221
    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:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 225
    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:229,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/socket_map.cpp:231,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/socket_map.cpp:233,1
    - Dst: bvar::PassiveStatus<std::string>::string>
      Src: /src/brpc/src/brpc/socket_map.cpp:232,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 235
    functionName: brpc::SocketMap::ShowSocketMapInBvarIfNeed
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::PassiveStatus<std::string>::string>
    - snprintf
    - exchange
    linkageType: ''
    returnType: void
    signature: void SocketMap::ShowSocketMapInBvarIfNeed()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:239,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:242,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:244,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:244,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:246,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:250,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:251,1
    - Dst: socket_creator::CreateSocket
      Src: /src/brpc/src/brpc/socket_map.cpp:259,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket_map.cpp:260,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket_map.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:269,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:272,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:278,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket_map.cpp:278,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket_map.cpp:278,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:281,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' opt'
    argTypes:
    - SocketMapKey
    - SocketId*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 237
    functionDepth: 2
    functionLinenumber: 237
    functionLinenumberEnd: 283
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 6
    functionsReached:
    - SocketUniquePtr::HCEnabled
    - SingleConnection*::socket::id
    - SingleConnection*::socket::Failed
    - PLOG
    - SocketUniquePtr::release
    - SocketUniquePtr::get
    - LOG
    - socket_creator::CreateSocket
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - erase
    - SingleConnection*::socket::HCEnabled
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - std::unique_lock::unlock
    - seek
    - brpc::SocketMap::ReleaseReference
    linkageType: ''
    returnType: int
    signature: "int SocketMap::Insert(const SocketMapKey& key, SocketId* id,\n                      SocketOptions&
      opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - expected_id
    argTypes:
    - SocketMapKey
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 1
    functionLinenumber: 285
    functionLinenumberEnd: 287
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:292,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:295,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:300,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:309,1
    - Dst: SingleConnection*::socket::last_active_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:319,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:328,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:329,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket_map.cpp:330,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:331,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 24
    argCount: 3
    argNames:
    - ' key'
    - expected_id
    - remove_orphan
    argTypes:
    - SocketMapKey
    - SocketId
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 289
    functionDepth: 2
    functionLinenumber: 289
    functionLinenumberEnd: 333
    functionName: brpc::SocketMap::RemoveInternal
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - SingleConnection*::socket::id
    - SingleConnection*::socket::last_active_time_us
    - butil::cpuwide_time_us
    - erase
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - std::unique_lock::unlock
    - Socket*::ReleaseAdditionalReference
    - seek
    - brpc::SocketMap::ReleaseReference
    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:336,1
    - Dst: Socket*::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/socket_map.cpp:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 342
    functionName: brpc::SocketMap::ReleaseReference
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 2
    functionsReached:
    - Socket*::HCEnabled
    - Socket*::ReleaseHCRelatedReference
    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:345,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:346,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 352
    functionName: brpc::SocketMap::Find
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - seek
    - SingleConnection*::socket::id
    - 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:355,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:356,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:357,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:357,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:358,1
    - Dst: Map::iterator::second::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:358,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 360
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - std::vector<SocketId>*::clear
    - std::vector<SocketId>*::push_back
    - Map::iterator::second::socket::id
    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:363,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:364,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:365,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:365,1
    - Dst: std::vector<butil::EndPoint>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:366,1
    - Dst: Map::iterator::second::socket::remote_side
      Src: /src/brpc/src/brpc/socket_map.cpp:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pts
    argTypes:
    - std::vector<butil::EndPoint>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 368
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - begin
    - std::vector<butil::EndPoint>*::clear
    - BAIDU_SCOPED_LOCK
    - std::vector<butil::EndPoint>*::push_back
    - end
    - 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:371,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:372,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:373,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:374,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:374,1
    - Dst: std::vector<SocketMapKey>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - defer_us
    - out
    argTypes:
    - int64_t
    - std::vector<SocketMapKey>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 380
    functionName: brpc::SocketMap::ListOrphans
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - butil::cpuwide_time_us
    - std::vector<SocketMapKey>*::clear
    - std::vector<SocketMapKey>*::push_back
    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:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 385
    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:399,1
    - Dst: brpc::SocketMap::List
      Src: /src/brpc/src/brpc/socket_map.cpp:407,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:410,1
    - Dst: SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/src/brpc/socket_map.cpp:411,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:413,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:415,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/socket_map.cpp:416,1
    - Dst: brpc::SocketMap::ListOrphans
      Src: /src/brpc/src/brpc/socket_map.cpp:429,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:430,1
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:431,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 387
    functionDepth: 3
    functionLinenumber: 387
    functionLinenumberEnd: 434
    functionName: brpc::SocketMap::WatchConnections
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ListPooledSockets
    - brpc::SocketMap::RemoveInternal
    - brpc::SocketMap::List
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - brpc::SetTrackMeAddress
    - std::vector::size
    - brpc::SocketMap::ListOrphans
    linkageType: ''
    returnType: void
    signature: void SocketMap::WatchConnections()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket_map.cpp:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 73
    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:77,1
    - Dst: GlobalSocketCreator::GlobalSocketCreator
      Src: /src/brpc/src/brpc/socket_map.cpp:79,1
    - Dst: SocketMap*::Init
      Src: /src/brpc/src/brpc/socket_map.cpp:83,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:84,1
    - Dst: exit
      Src: /src/brpc/src/brpc/socket_map.cpp:85,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket_map.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 88
    functionName: brpc::CreateClientSideSocketMap
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - store
    - SocketMap*::Init
    - LOG
    - GlobalSocketCreator::GlobalSocketCreator
    - exit
    - SocketMap::SocketMap
    linkageType: ''
    returnType: void
    signature: void CreateClientSideSocketMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 94
    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:96,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/socket_map.cpp:97,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket_map.cpp:98,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::get_or_new_client_side_socket_map
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - load
    - brpc::get_or_new_client_side_messenger
    - pthread_once
    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:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' opt'
    argTypes:
    - SocketMapKey
    - SocketId*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 101
    functionDepth: 2
    functionLinenumber: 101
    functionLinenumberEnd: 104
    functionName: brpc::SocketMapInsert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 14
    functionsReached:
    - brpc::get_or_new_client_side_socket_map
    linkageType: ''
    returnType: int
    signature: "int SocketMapInsert(const SocketMapKey& key, SocketId* id,\n                    SocketOptions&
      opt)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::get_client_side_socket_map
      Src: /src/brpc/src/brpc/socket_map.cpp:107,1
    - Dst: SocketMap*::Find
      Src: /src/brpc/src/brpc/socket_map.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 112
    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:115,1
    - Dst: SocketMap*::Remove
      Src: /src/brpc/src/brpc/socket_map.cpp:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - SocketMapKey
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 123
    functionName: brpc::SocketMapRemove
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 6
    functionsReached:
    - SocketMap*::Remove
    - brpc::get_client_side_socket_map
    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:126,1
    - Dst: SocketMap*::List
      Src: /src/brpc/src/brpc/socket_map.cpp:128,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket_map.cpp:130,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 132
    functionName: brpc::SocketMapList
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - SocketMap*::List
    - brpc::get_client_side_socket_map
    - std::vector<SocketId>*::clear
    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: 144
      start: 136
    functionDepth: 0
    functionLinenumber: 136
    functionLinenumberEnd: 144
    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: 150
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 150
    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:155,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/socket_map.cpp:156,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket_map.cpp:158,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:161,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:161,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:163,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:174,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/socket_map.cpp:174,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 152
    functionDepth: 3
    functionLinenumber: 152
    functionLinenumberEnd: 183
    functionName: SocketMap::~SocketMap()
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - begin
    - bthread_join
    - SingleConnection*::socket::Failed
    - end
    - LOG
    - std::ostringstream::str
    - empty
    - SingleConnection*::socket::HCEnabled
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void SocketMap::~SocketMap()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:192,1
    - Dst: init
      Src: /src/brpc/src/brpc/socket_map.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:196,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/socket_map.cpp:202,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket_map.cpp:203,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - SocketMapOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 185
    functionDepth: 4
    functionLinenumber: 185
    functionLinenumberEnd: 211
    functionName: brpc::SocketMap::Init
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - init
    - bthread_start_background
    - bthread_attr_set_name
    - 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:218,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 213
    functionDepth: 0
    functionLinenumber: 213
    functionLinenumberEnd: 221
    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:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 225
    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:229,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/socket_map.cpp:231,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/socket_map.cpp:233,1
    - Dst: bvar::PassiveStatus<std::string>::string>
      Src: /src/brpc/src/brpc/socket_map.cpp:232,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 235
    functionName: brpc::SocketMap::ShowSocketMapInBvarIfNeed
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 2
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - bvar::PassiveStatus<std::string>::string>
    - snprintf
    - exchange
    linkageType: ''
    returnType: void
    signature: void SocketMap::ShowSocketMapInBvarIfNeed()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:239,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:242,1
    - Dst: SingleConnection*::socket::Failed
      Src: /src/brpc/src/brpc/socket_map.cpp:244,1
    - Dst: SingleConnection*::socket::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:244,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:246,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:250,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:251,1
    - Dst: socket_creator::CreateSocket
      Src: /src/brpc/src/brpc/socket_map.cpp:259,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket_map.cpp:260,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket_map.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:269,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket_map.cpp:272,1
    - Dst: SocketUniquePtr::HCEnabled
      Src: /src/brpc/src/brpc/socket_map.cpp:278,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket_map.cpp:278,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket_map.cpp:278,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:281,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 3
    argNames:
    - ' key'
    - id
    - ' opt'
    argTypes:
    - SocketMapKey
    - SocketId*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 283
      start: 237
    functionDepth: 2
    functionLinenumber: 237
    functionLinenumberEnd: 283
    functionName: brpc::SocketMap::Insert
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 6
    functionsReached:
    - SocketUniquePtr::HCEnabled
    - SingleConnection*::socket::id
    - SingleConnection*::socket::Failed
    - PLOG
    - SocketUniquePtr::release
    - SocketUniquePtr::get
    - LOG
    - socket_creator::CreateSocket
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - erase
    - SingleConnection*::socket::HCEnabled
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - std::unique_lock::unlock
    - seek
    - brpc::SocketMap::ReleaseReference
    linkageType: ''
    returnType: int
    signature: "int SocketMap::Insert(const SocketMapKey& key, SocketId* id,\n                      SocketOptions&
      opt)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:286,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' key'
    - expected_id
    argTypes:
    - SocketMapKey
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 287
      start: 285
    functionDepth: 3
    functionLinenumber: 285
    functionLinenumberEnd: 287
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SocketMap::ShowSocketMapInBvarIfNeed
      Src: /src/brpc/src/brpc/socket_map.cpp:292,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:295,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:300,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:309,1
    - Dst: SingleConnection*::socket::last_active_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:319,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket_map.cpp:328,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/socket_map.cpp:329,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket_map.cpp:330,1
    - Dst: brpc::SocketMap::ReleaseReference
      Src: /src/brpc/src/brpc/socket_map.cpp:331,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 24
    argCount: 3
    argNames:
    - ' key'
    - expected_id
    - remove_orphan
    argTypes:
    - SocketMapKey
    - SocketId
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 289
    functionDepth: 2
    functionLinenumber: 289
    functionLinenumberEnd: 333
    functionName: brpc::SocketMap::RemoveInternal
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 3
    functionsReached:
    - SingleConnection*::socket::id
    - SingleConnection*::socket::last_active_time_us
    - butil::cpuwide_time_us
    - erase
    - brpc::SocketMap::ShowSocketMapInBvarIfNeed
    - std::unique_lock::unlock
    - Socket*::ReleaseAdditionalReference
    - seek
    - brpc::SocketMap::ReleaseReference
    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:336,1
    - Dst: Socket*::ReleaseHCRelatedReference
      Src: /src/brpc/src/brpc/socket_map.cpp:337,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 335
    functionDepth: 0
    functionLinenumber: 335
    functionLinenumberEnd: 342
    functionName: brpc::SocketMap::ReleaseReference
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 4
    functionsReached:
    - Socket*::HCEnabled
    - Socket*::ReleaseHCRelatedReference
    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:345,1
    - Dst: seek
      Src: /src/brpc/src/brpc/socket_map.cpp:346,1
    - Dst: SingleConnection*::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:348,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' key'
    - id
    argTypes:
    - SocketMapKey
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 344
    functionDepth: 1
    functionLinenumber: 344
    functionLinenumberEnd: 352
    functionName: brpc::SocketMap::Find
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - seek
    - SingleConnection*::socket::id
    - 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:355,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:356,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:357,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:357,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:358,1
    - Dst: Map::iterator::second::socket::id
      Src: /src/brpc/src/brpc/socket_map.cpp:358,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ids
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 354
    functionDepth: 1
    functionLinenumber: 354
    functionLinenumberEnd: 360
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - std::vector<SocketId>*::clear
    - std::vector<SocketId>*::push_back
    - Map::iterator::second::socket::id
    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:363,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:364,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:365,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:365,1
    - Dst: std::vector<butil::EndPoint>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:366,1
    - Dst: Map::iterator::second::socket::remote_side
      Src: /src/brpc/src/brpc/socket_map.cpp:366,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pts
    argTypes:
    - std::vector<butil::EndPoint>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 368
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 368
    functionName: brpc::SocketMap::List
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - begin
    - std::vector<butil::EndPoint>*::clear
    - BAIDU_SCOPED_LOCK
    - std::vector<butil::EndPoint>*::push_back
    - end
    - 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:371,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket_map.cpp:372,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket_map.cpp:373,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket_map.cpp:374,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket_map.cpp:374,1
    - Dst: std::vector<SocketMapKey>*::push_back
      Src: /src/brpc/src/brpc/socket_map.cpp:377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - defer_us
    - out
    argTypes:
    - int64_t
    - std::vector<SocketMapKey>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 370
    functionDepth: 1
    functionLinenumber: 370
    functionLinenumberEnd: 380
    functionName: brpc::SocketMap::ListOrphans
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 1
    functionsReached:
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - butil::cpuwide_time_us
    - std::vector<SocketMapKey>*::clear
    - std::vector<SocketMapKey>*::push_back
    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:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 385
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 385
    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:399,1
    - Dst: brpc::SocketMap::List
      Src: /src/brpc/src/brpc/socket_map.cpp:407,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:410,1
    - Dst: SocketUniquePtr::ListPooledSockets
      Src: /src/brpc/src/brpc/socket_map.cpp:411,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:413,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket_map.cpp:415,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/socket_map.cpp:416,1
    - Dst: brpc::SocketMap::ListOrphans
      Src: /src/brpc/src/brpc/socket_map.cpp:429,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket_map.cpp:430,1
    - Dst: brpc::SocketMap::RemoveInternal
      Src: /src/brpc/src/brpc/socket_map.cpp:431,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 387
    functionDepth: 3
    functionLinenumber: 387
    functionLinenumberEnd: 434
    functionName: brpc::SocketMap::WatchConnections
    functionSourceFile: /src/brpc/src/brpc/socket_map.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::ListPooledSockets
    - brpc::SocketMap::RemoveInternal
    - brpc::SocketMap::List
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - brpc::SetTrackMeAddress
    - std::vector::size
    - brpc::SocketMap::ListOrphans
    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: 0
    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: 0
    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:
    - Dst: SocketUniquePtr::_transport::GetOnEdgeTrigger
      Src: /src/brpc/src/brpc/transport.h:32,1
    - Dst: on_edge_trigger
      Src: /src/brpc/src/brpc/transport.h:33,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/transport.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 35
    functionName: brpc::Transport::OnEdge
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached:
    - on_edge_trigger
    - SocketUniquePtr::get
    - SocketUniquePtr::_transport::GetOnEdgeTrigger
    linkageType: ''
    returnType: void
    signature: void * OnEdge(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/transport.h:38,1
    - Dst: InputMessageBase*::_process
      Src: /src/brpc/src/brpc/transport.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: brpc::Transport::ProcessInputMessage
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached:
    - InputMessageBase*::_process
    - static_cast<InputMessageBase*>
    linkageType: ''
    returnType: void
    signature: void * ProcessInputMessage(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~Transport()
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Transport()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: brpc::Transport::HasOnEdgeTrigger
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HasOnEdgeTrigger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::Transport::GetOnEdgeTrigger
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: OnEdgeTrigger
    signature: OnEdgeTrigger GetOnEdgeTrigger()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SocketUniquePtr::_transport::GetOnEdgeTrigger
      Src: /src/brpc/src/brpc/transport.h:32,1
    - Dst: on_edge_trigger
      Src: /src/brpc/src/brpc/transport.h:33,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/transport.h:33,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 29
    functionDepth: 1
    functionLinenumber: 29
    functionLinenumberEnd: 35
    functionName: brpc::Transport::OnEdge
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached:
    - on_edge_trigger
    - SocketUniquePtr::get
    - SocketUniquePtr::_transport::GetOnEdgeTrigger
    linkageType: ''
    returnType: void
    signature: void * OnEdge(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/transport.h:38,1
    - Dst: InputMessageBase*::_process
      Src: /src/brpc/src/brpc/transport.h:39,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 41
    functionName: brpc::Transport::ProcessInputMessage
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached:
    - InputMessageBase*::_process
    - static_cast<InputMessageBase*>
    linkageType: ''
    returnType: void
    signature: void * ProcessInputMessage(void* void_arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 42
    functionDepth: 0
    functionLinenumber: 42
    functionLinenumberEnd: 42
    functionName: ~Transport()
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~Transport()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 56
    functionName: brpc::Transport::HasOnEdgeTrigger
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HasOnEdgeTrigger()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::Transport::GetOnEdgeTrigger
    functionSourceFile: /src/brpc/src/brpc/transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: OnEdgeTrigger
    signature: OnEdgeTrigger GetOnEdgeTrigger()
  - 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: brpc::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: StopAccept
      Src: /src/brpc/src/brpc/acceptor.cpp:48,1
    - Dst: 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: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: Acceptor::~Acceptor()
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Join
    - 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: brpc::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: brpc::Acceptor::status
      Src: /src/brpc/src/brpc/acceptor.cpp:75,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/acceptor.cpp:81,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/acceptor.cpp:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:83,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/acceptor.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:100,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    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: 107
      start: 52
    functionDepth: 4
    functionLinenumber: 52
    functionLinenumberEnd: 107
    functionName: brpc::Acceptor::StartAccept
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - brpc::Acceptor::Initialize
    - BAIDU_SCOPED_LOCK
    - Socket::Create
    - bthread_attr_set_name
    - LOG
    - bthread_start_background
    - brpc::Acceptor::status
    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:110,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/acceptor.cpp:113,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:115,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/acceptor.cpp:116,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/acceptor.cpp:118,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/acceptor.cpp:119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 109
    functionDepth: 2
    functionLinenumber: 109
    functionLinenumberEnd: 124
    functionName: brpc::Acceptor::CloseIdleConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Acceptor*>
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - brpc::SetTrackMeAddress
    - Acceptor*::ListConnections
    - 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:132,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:140,1
    - Dst: brpc::Acceptor::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:145,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/acceptor.cpp:147,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/acceptor.cpp:149,1
    - Dst: SocketUniquePtr::shall_fail_me_at_server_stop
      Src: /src/brpc/src/brpc/acceptor.cpp:150,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:156,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/acceptor.cpp:161,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 126
    functionDepth: 1
    functionLinenumber: 126
    functionLinenumberEnd: 165
    functionName: brpc::Acceptor::StopAccept
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - BAIDU_SCOPED_LOCK
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - brpc::Acceptor::ListConnections
    - std::vector::size
    - SocketUniquePtr::shall_fail_me_at_server_stop
    - SocketUniquePtr::ReleaseAdditionalReference
    linkageType: ''
    returnType: void
    signature: void Acceptor::StopAccept(int /*closewait_ms*/)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/acceptor.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 173
    functionName: brpc::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:182,1
    - Dst: Wait
      Src: /src/brpc/src/brpc/acceptor.cpp:183,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/acceptor.cpp:188,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/acceptor.cpp:192,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/acceptor.cpp:193,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:197,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 176
    functionDepth: 3
    functionLinenumber: 176
    functionLinenumberEnd: 200
    functionName: brpc::Acceptor::Join
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - empty
    - std::unique_lock::unlock
    - Wait
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void Acceptor::Join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/acceptor.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    functionName: brpc::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:211,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/acceptor.cpp:214,1
    - Dst: std::vector<SocketId>*::reserve
      Src: /src/brpc/src/brpc/acceptor.cpp:217,1
    - Dst: brpc::Acceptor::ConnectionCount
      Src: /src/brpc/src/brpc/acceptor.cpp:217,1
    - Dst: begin
      Src: /src/brpc/src/brpc/acceptor.cpp:224,1
    - Dst: end
      Src: /src/brpc/src/brpc/acceptor.cpp:225,1
    - Dst: save_iterator
      Src: /src/brpc/src/brpc/acceptor.cpp:231,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/acceptor.cpp:233,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/acceptor.cpp:234,1
    - Dst: restore_iterator
      Src: /src/brpc/src/brpc/acceptor.cpp:235,1
    - Dst: begin
      Src: /src/brpc/src/brpc/acceptor.cpp:236,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/acceptor.cpp:237,1
    - Dst: end
      Src: /src/brpc/src/brpc/acceptor.cpp:239,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/acceptor.cpp:243,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: 245
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 245
    functionName: brpc::Acceptor::ListConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    functionsReached:
    - begin
    - restore_iterator
    - std::vector<SocketId>*::reserve
    - std::vector<SocketId>*::clear
    - end
    - save_iterator
    - std::vector<SocketId>*::push_back
    - LOG
    - std::unique_lock::lock
    - std::unique_lock::unlock
    - brpc::Acceptor::ConnectionCount
    linkageType: ''
    returnType: void
    signature: "void Acceptor::ListConnections(std::vector<SocketId>* conn_list,\n
      \                              size_t max_copied)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:248,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/acceptor.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - conn_list
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::Acceptor::ListConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 2
    functionsReached:
    - brpc::Acceptor::ListConnections
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void Acceptor::ListConnections(std::vector<SocketId>* conn_list)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/brpc/acceptor.cpp:254,1
    - Dst: accept
      Src: /src/brpc/src/brpc/acceptor.cpp:256,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:256,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/acceptor.cpp:267,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:268,1
    - Dst: dynamic_cast<Acceptor*>
      Src: /src/brpc/src/brpc/acceptor.cpp:272,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/acceptor.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:274,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:275,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/brpc/acceptor.cpp:283,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/acceptor.cpp:284,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/acceptor.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:291,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/acceptor.cpp:294,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/acceptor.cpp:304,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:307,1
    - Dst: Acceptor*::status
      Src: /src/brpc/src/brpc/acceptor.cpp:308,1
    - Dst: Acceptor*::_socket_map::insert
      Src: /src/brpc/src/brpc/acceptor.cpp:314,1
    - Dst: ConnectStatistics
      Src: /src/brpc/src/brpc/acceptor.cpp:314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:317,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:317,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:319,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:320,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/acceptor.cpp:321,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 41
    argCount: 1
    argNames:
    - acception
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 327
    functionName: brpc::Acceptor::OnNewConnectionsUntilEAGAIN
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - butil::fd_guard::release
    - bzero
    - Socket::Create
    - BAIDU_SCOPED_LOCK
    - PLOG_EVERY_SECOND
    - Acceptor*::_socket_map::insert
    - SocketUniquePtr::description
    - LOG
    - dynamic_cast<Acceptor*>
    - Socket*::fd
    - butil::sockaddr2endpoint
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::SetFailed
    - ConnectStatistics
    - Socket*::user
    - Acceptor*::status
    - accept
    linkageType: ''
    returnType: void
    signature: void Acceptor::OnNewConnectionsUntilEAGAIN(Socket* acception)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::OnNewConnectionsUntilEAGAIN
      Src: /src/brpc/src/brpc/acceptor.cpp:332,1
    - Dst: Socket*::Failed
      Src: /src/brpc/src/brpc/acceptor.cpp:333,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/acceptor.cpp:336,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - acception
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 329
    functionDepth: 2
    functionLinenumber: 329
    functionLinenumberEnd: 337
    functionName: brpc::Acceptor::OnNewConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Socket*::MoreReadEvents
    - Socket*::Failed
    - brpc::Acceptor::OnNewConnectionsUntilEAGAIN
    linkageType: ''
    returnType: void
    signature: void Acceptor::OnNewConnections(Socket* acception)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:340,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/acceptor.cpp:341,1
    - Dst: Broadcast
      Src: /src/brpc/src/brpc/acceptor.cpp:346,1
    - Dst: erase
      Src: /src/brpc/src/brpc/acceptor.cpp:351,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/acceptor.cpp:351,1
    - Dst: empty
      Src: /src/brpc/src/brpc/acceptor.cpp:352,1
    - Dst: Broadcast
      Src: /src/brpc/src/brpc/acceptor.cpp:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sock
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 355
    functionName: brpc::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: 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: brpc::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: StopAccept
      Src: /src/brpc/src/brpc/acceptor.cpp:48,1
    - Dst: 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: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    functionName: Acceptor::~Acceptor()
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Join
    - 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: brpc::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: brpc::Acceptor::status
      Src: /src/brpc/src/brpc/acceptor.cpp:75,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/acceptor.cpp:81,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/acceptor.cpp:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:83,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/acceptor.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:100,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    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: 107
      start: 52
    functionDepth: 4
    functionLinenumber: 52
    functionLinenumberEnd: 107
    functionName: brpc::Acceptor::StartAccept
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - brpc::Acceptor::Initialize
    - BAIDU_SCOPED_LOCK
    - Socket::Create
    - bthread_attr_set_name
    - LOG
    - bthread_start_background
    - brpc::Acceptor::status
    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:110,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/acceptor.cpp:113,1
    - Dst: Acceptor*::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:115,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/acceptor.cpp:116,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/acceptor.cpp:118,1
    - Dst: SocketUniquePtr::ReleaseReferenceIfIdle
      Src: /src/brpc/src/brpc/acceptor.cpp:119,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 109
    functionDepth: 2
    functionLinenumber: 109
    functionLinenumberEnd: 124
    functionName: brpc::Acceptor::CloseIdleConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Acceptor*>
    - bthread_usleep
    - SocketUniquePtr::ReleaseReferenceIfIdle
    - brpc::SetTrackMeAddress
    - Acceptor*::ListConnections
    - 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:132,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:140,1
    - Dst: brpc::Acceptor::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:145,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/acceptor.cpp:147,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/acceptor.cpp:149,1
    - Dst: SocketUniquePtr::shall_fail_me_at_server_stop
      Src: /src/brpc/src/brpc/acceptor.cpp:150,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:156,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/acceptor.cpp:161,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 165
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 165
    functionName: brpc::Acceptor::StopAccept
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - BAIDU_SCOPED_LOCK
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::SetFailed
    - brpc::Acceptor::ListConnections
    - std::vector::size
    - SocketUniquePtr::shall_fail_me_at_server_stop
    - SocketUniquePtr::ReleaseAdditionalReference
    linkageType: ''
    returnType: void
    signature: void Acceptor::StopAccept(int /*closewait_ms*/)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/acceptor.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:169,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 167
    functionDepth: 1
    functionLinenumber: 167
    functionLinenumberEnd: 173
    functionName: brpc::Acceptor::Initialize
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 2
    functionsReached:
    - init
    - LOG
    linkageType: ''
    returnType: int
    signature: int Acceptor::Initialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/acceptor.cpp:182,1
    - Dst: Wait
      Src: /src/brpc/src/brpc/acceptor.cpp:183,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/acceptor.cpp:188,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/acceptor.cpp:192,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/acceptor.cpp:193,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:197,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 176
    functionDepth: 3
    functionLinenumber: 176
    functionLinenumberEnd: 200
    functionName: brpc::Acceptor::Join
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - empty
    - std::unique_lock::unlock
    - Wait
    - bthread_stop
    linkageType: ''
    returnType: void
    signature: void Acceptor::Join()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/acceptor.cpp:205,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 202
    functionDepth: 0
    functionLinenumber: 202
    functionLinenumberEnd: 206
    functionName: brpc::Acceptor::ConnectionCount
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    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:211,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/acceptor.cpp:214,1
    - Dst: std::vector<SocketId>*::reserve
      Src: /src/brpc/src/brpc/acceptor.cpp:217,1
    - Dst: brpc::Acceptor::ConnectionCount
      Src: /src/brpc/src/brpc/acceptor.cpp:217,1
    - Dst: begin
      Src: /src/brpc/src/brpc/acceptor.cpp:224,1
    - Dst: end
      Src: /src/brpc/src/brpc/acceptor.cpp:225,1
    - Dst: save_iterator
      Src: /src/brpc/src/brpc/acceptor.cpp:231,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/acceptor.cpp:233,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/acceptor.cpp:234,1
    - Dst: restore_iterator
      Src: /src/brpc/src/brpc/acceptor.cpp:235,1
    - Dst: begin
      Src: /src/brpc/src/brpc/acceptor.cpp:236,1
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/acceptor.cpp:237,1
    - Dst: end
      Src: /src/brpc/src/brpc/acceptor.cpp:239,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/acceptor.cpp:243,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: 245
      start: 208
    functionDepth: 1
    functionLinenumber: 208
    functionLinenumberEnd: 245
    functionName: brpc::Acceptor::ListConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 3
    functionsReached:
    - begin
    - restore_iterator
    - std::vector<SocketId>*::reserve
    - std::vector<SocketId>*::clear
    - end
    - save_iterator
    - std::vector<SocketId>*::push_back
    - LOG
    - std::unique_lock::lock
    - std::unique_lock::unlock
    - brpc::Acceptor::ConnectionCount
    linkageType: ''
    returnType: void
    signature: "void Acceptor::ListConnections(std::vector<SocketId>* conn_list,\n
      \                              size_t max_copied)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::ListConnections
      Src: /src/brpc/src/brpc/acceptor.cpp:248,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/acceptor.cpp:248,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - conn_list
    argTypes:
    - std::vector<SocketId>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 249
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 249
    functionName: brpc::Acceptor::ListConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 4
    functionsReached:
    - brpc::Acceptor::ListConnections
    - butil::BaseIteratorRangeToNumberTraits::max
    linkageType: ''
    returnType: void
    signature: void Acceptor::ListConnections(std::vector<SocketId>* conn_list)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: bzero
      Src: /src/brpc/src/brpc/acceptor.cpp:254,1
    - Dst: accept
      Src: /src/brpc/src/brpc/acceptor.cpp:256,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:256,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/acceptor.cpp:267,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:268,1
    - Dst: dynamic_cast<Acceptor*>
      Src: /src/brpc/src/brpc/acceptor.cpp:272,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/acceptor.cpp:272,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:274,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:275,1
    - Dst: butil::sockaddr2endpoint
      Src: /src/brpc/src/brpc/acceptor.cpp:283,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/acceptor.cpp:284,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/acceptor.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:291,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/acceptor.cpp:294,1
    - Dst: brpc::VersionedRefWithId<T>::AddressFailedAsWell
      Src: /src/brpc/src/brpc/acceptor.cpp:304,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:307,1
    - Dst: Acceptor*::status
      Src: /src/brpc/src/brpc/acceptor.cpp:308,1
    - Dst: Acceptor*::_socket_map::insert
      Src: /src/brpc/src/brpc/acceptor.cpp:314,1
    - Dst: ConnectStatistics
      Src: /src/brpc/src/brpc/acceptor.cpp:314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/acceptor.cpp:317,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:317,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/acceptor.cpp:319,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/acceptor.cpp:320,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/acceptor.cpp:321,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 41
    argCount: 1
    argNames:
    - acception
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 327
      start: 251
    functionDepth: 1
    functionLinenumber: 251
    functionLinenumberEnd: 327
    functionName: brpc::Acceptor::OnNewConnectionsUntilEAGAIN
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 1
    functionsReached:
    - Socket*::SetFailed
    - butil::fd_guard::release
    - bzero
    - Socket::Create
    - BAIDU_SCOPED_LOCK
    - PLOG_EVERY_SECOND
    - Acceptor*::_socket_map::insert
    - SocketUniquePtr::description
    - LOG
    - dynamic_cast<Acceptor*>
    - Socket*::fd
    - butil::sockaddr2endpoint
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::SetFailed
    - ConnectStatistics
    - Socket*::user
    - Acceptor*::status
    - accept
    linkageType: ''
    returnType: void
    signature: void Acceptor::OnNewConnectionsUntilEAGAIN(Socket* acception)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Acceptor::OnNewConnectionsUntilEAGAIN
      Src: /src/brpc/src/brpc/acceptor.cpp:332,1
    - Dst: Socket*::Failed
      Src: /src/brpc/src/brpc/acceptor.cpp:333,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/acceptor.cpp:336,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - acception
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 337
      start: 329
    functionDepth: 2
    functionLinenumber: 329
    functionLinenumberEnd: 337
    functionName: brpc::Acceptor::OnNewConnections
    functionSourceFile: /src/brpc/src/brpc/acceptor.cpp
    functionUses: 0
    functionsReached:
    - Socket*::MoreReadEvents
    - Socket*::Failed
    - brpc::Acceptor::OnNewConnectionsUntilEAGAIN
    linkageType: ''
    returnType: void
    signature: void Acceptor::OnNewConnections(Socket* acception)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/acceptor.cpp:340,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/acceptor.cpp:341,1
    - Dst: Broadcast
      Src: /src/brpc/src/brpc/acceptor.cpp:346,1
    - Dst: erase
      Src: /src/brpc/src/brpc/acceptor.cpp:351,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/acceptor.cpp:351,1
    - Dst: empty
      Src: /src/brpc/src/brpc/acceptor.cpp:352,1
    - Dst: Broadcast
      Src: /src/brpc/src/brpc/acceptor.cpp:353,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sock
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 339
    functionDepth: 1
    functionLinenumber: 339
    functionLinenumberEnd: 355
    functionName: brpc::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:
    - getpwuid
    - getline
    - RPC_VLOG_IF
    - free
    - fopen
    - strtol
    - snprintf
    - butil::ScopedFILE::get
    - getuid
    - memcmp
    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: 146
    functionsReached:
    - brpc::ReadJPaasHostPort
    - butil::endpoint2str
    - BAIDU_SCOPED_LOCK
    - std::string::string
    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:
    - TrackMeResponse*::new_interval
    - BAIDU_SCOPED_LOCK
    - BugInfo::BugInfo
    - std::max
    - TrackMeResponse*::severity
    - LOG
    - std::min
    - TrackMeResponse*::error_text
    - TrackMeResponse*::has_new_interval
    - Controller*::Failed
    - Controller*::ErrorText
    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:
    - Controller*::set_request_code
    - brpc::NewCallback
    - Channel*::Init
    - unlock
    - TrackMeRequest::set_rpc_version
    - TrackMeService_Stub::TrackMe
    - LOG
    - brpc::size
    - Controller::Controller
    - TrackMeResponse::TrackMeResponse
    - brpc::policy::MurmurHash32
    - TrackMeRequest::set_server_addr
    - data
    - c_str
    - Channel::Channel
    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::cpuwide_time_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::fast_rand_less_than
    - butil::cpuwide_time_us
    - brpc::TrackMeNow
    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:
    - getpwuid
    - getline
    - RPC_VLOG_IF
    - free
    - fopen
    - strtol
    - snprintf
    - butil::ScopedFILE::get
    - getuid
    - memcmp
    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: 146
    functionsReached:
    - brpc::ReadJPaasHostPort
    - butil::endpoint2str
    - BAIDU_SCOPED_LOCK
    - std::string::string
    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:
    - TrackMeResponse*::new_interval
    - BAIDU_SCOPED_LOCK
    - BugInfo::BugInfo
    - std::max
    - TrackMeResponse*::severity
    - LOG
    - std::min
    - TrackMeResponse*::error_text
    - TrackMeResponse*::has_new_interval
    - Controller*::Failed
    - Controller*::ErrorText
    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:
    - Controller*::set_request_code
    - brpc::NewCallback
    - Channel*::Init
    - unlock
    - TrackMeRequest::set_rpc_version
    - TrackMeService_Stub::TrackMe
    - LOG
    - brpc::size
    - Controller::Controller
    - TrackMeResponse::TrackMeResponse
    - brpc::policy::MurmurHash32
    - TrackMeRequest::set_server_addr
    - data
    - c_str
    - Channel::Channel
    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::cpuwide_time_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::fast_rand_less_than
    - butil::cpuwide_time_us
    - brpc::TrackMeNow
    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: 112
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 112
    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:140,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.cpp:141,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.cpp:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 143
    functionName: SocketPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint::EndPoint
    - butil::atomic::atomic
    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:167,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 168
    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: 220
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 220
    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:225,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 226
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 226
    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:231,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:239,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:240,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:241,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:242,1
    - Dst: ExtendedSocketStat*::_minute_counter::Add
      Src: /src/brpc/src/brpc/socket.cpp:272,1
    - Dst: ExtendedSocketStat*::_minute_counter::TryPop
      Src: /src/brpc/src/brpc/socket.cpp:279,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 34
    argCount: 1
    argNames:
    - now_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 228
    functionDepth: 1
    functionLinenumber: 228
    functionLinenumberEnd: 285
    functionName: Socket::SharedPart::UpdateStatsEverySecond(int64_t now_ms)
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ExtendedSocketStat*::_minute_counter::Add
    - load
    - ExtendedSocketStat::ExtendedSocketStat
    - ExtendedSocketStat*::_minute_counter::TryPop
    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:291,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 292
    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:295,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/socket.cpp:295,1
    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: Socket::CreateVarsOnce
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Socket::CreateVarsOnce()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: channel_conn::get_value
      Src: /src/brpc/src/brpc/socket.cpp:301,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 304
      start: 299
    functionDepth: 0
    functionLinenumber: 299
    functionLinenumberEnd: 304
    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:307,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket.cpp:307,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 308
      start: 306
    functionDepth: 0
    functionLinenumber: 306
    functionLinenumberEnd: 308
    functionName: Socket::CreatedByConnect
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - static_cast<SocketUser*>
    - get_client_side_messenger
    linkageType: ''
    returnType: bool
    signature: bool Socket::CreatedByConnect() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket.cpp:316,1
    - Dst: set_extra
      Src: /src/brpc/src/brpc/socket.cpp:322,1
    - Dst: set
      Src: /src/brpc/src/brpc/socket.cpp:327,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:332,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:337,1
    - Dst: get
      Src: /src/brpc/src/brpc/socket.cpp:341,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:345,1
    - Dst: extra
      Src: /src/brpc/src/brpc/socket.cpp:348,1
    - Dst: reset_extra
      Src: /src/brpc/src/brpc/socket.cpp:351,1
    - Dst: get
      Src: /src/brpc/src/brpc/socket.cpp:354,1
    - Dst: reset
      Src: /src/brpc/src/brpc/socket.cpp:357,1
    - Dst: set_ptr_and_extra
      Src: /src/brpc/src/brpc/socket.cpp:364,1
    - Dst: user_message
      Src: /src/brpc/src/brpc/socket.cpp:368,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket.cpp:371,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket.cpp:374,1
    - Dst: set_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:376,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 37
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 313
    functionDepth: 1
    functionLinenumber: 313
    functionLinenumberEnd: 390
    functionName: Socket::WriteRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - set
    - SocketMessage*::AppendAndDestroySelf
    - set_ptr_and_extra
    - set_extra
    - extra
    - user_message
    - set_pipelined_count_and_user_message
    - reset_extra
    - reset
    - get
    - butil::IOBuf::IOBuf
    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:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - notify_on_success
    - shutdown_write
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 324
      start: 320
    functionDepth: 0
    functionLinenumber: 320
    functionLinenumberEnd: 324
    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:327,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 326
    functionDepth: 0
    functionLinenumber: 326
    functionLinenumberEnd: 328
    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:332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 331
    functionDepth: 0
    functionLinenumber: 331
    functionLinenumberEnd: 333
    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:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 338
      start: 336
    functionDepth: 0
    functionLinenumber: 336
    functionLinenumberEnd: 338
    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:341,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 342
      start: 340
    functionDepth: 1
    functionLinenumber: 340
    functionLinenumberEnd: 342
    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: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: 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:348,1
    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: 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: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_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:354,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 355
      start: 353
    functionDepth: 1
    functionLinenumber: 353
    functionLinenumberEnd: 355
    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:357,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 358
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 358
    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:364,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: 365
      start: 359
    functionDepth: 0
    functionLinenumber: 359
    functionLinenumberEnd: 365
    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:368,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/socket.cpp:371,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket.cpp:374,1
    - Dst: set_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:376,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 380
      start: 367
    functionDepth: 2
    functionLinenumber: 367
    functionLinenumberEnd: 380
    functionName: reset_pipelined_count_and_user_message
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketMessage*::AppendAndDestroySelf
    - set_pipelined_count_and_user_message
    - butil::IOBuf::IOBuf
    - user_message
    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:393,1
    - Dst: clear_user_message
      Src: /src/brpc/src/brpc/socket.cpp:395,1
    - Dst: SocketMessage*::AppendAndDestroySelf
      Src: /src/brpc/src/brpc/socket.cpp:397,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/socket.cpp:398,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:400,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:401,1
    - Dst: butil::Status::error_code
      Src: /src/brpc/src/brpc/socket.cpp:401,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/socket.cpp:401,1
    - Dst: Socket*::_unwritten_bytes::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:406,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:406,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:407,1
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/socket.cpp:411,1
    - Dst: get_auth_flags
      Src: /src/brpc/src/brpc/socket.cpp:418,1
    - Dst: clear_pipelined_count_and_auth_flags
      Src: /src/brpc/src/brpc/socket.cpp:420,1
    - Dst: Socket*::PushPipelinedInfo
      Src: /src/brpc/src/brpc/socket.cpp:421,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 423
      start: 392
    functionDepth: 2
    functionLinenumber: 392
    functionLinenumberEnd: 423
    functionName: Socket::WriteRequest::Setup(Socket* s)
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - get_auth_flags
    - bthread_id_error2
    - clear
    - butil::Status::error_cstr
    - butil::Status::ok
    - clear_user_message
    - Socket*::_unwritten_bytes::fetch_add
    - pipelined_count
    - user_message
    - butil::Status::error_code
    - Socket*::PushPipelinedInfo
    - clear_pipelined_count_and_auth_flags
    - SocketMessage*::AppendAndDestroySelf
    - size
    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: 431
      start: 430
    functionDepth: 0
    functionLinenumber: 430
    functionLinenumberEnd: 431
    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:437,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 433
    functionDepth: 2
    functionLinenumber: 433
    functionLinenumberEnd: 440
    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: 445
      start: 442
    functionDepth: 0
    functionLinenumber: 442
    functionLinenumberEnd: 445
    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:502,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/brpc/socket.cpp:503,1
    - Dst: bthread::butex_create_checked<butil::atomic<int> >
      Src: /src/brpc/src/brpc/socket.cpp:504,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - f
    argTypes:
    - Forbidden
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 455
    functionDepth: 2
    functionLinenumber: 455
    functionLinenumberEnd: 505
    functionName: Socket::Socket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::CreateVarsOnce
    - pthread_mutex_init
    - bthread::butex_create_checked<butil::atomic<int> >
    linkageType: ''
    returnType: void
    signature: void Socket::Socket(Forbidden f)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/brpc/socket.cpp:508,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/socket.cpp:509,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 510
      start: 507
    functionDepth: 2
    functionLinenumber: 507
    functionLinenumberEnd: 510
    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:513,1
    - Dst: Socket::WriteRequest*::data::empty
      Src: /src/brpc/src/brpc/socket.cpp:513,1
    - Dst: Socket::AddOutputMessages
      Src: /src/brpc/src/brpc/socket.cpp:514,1
    - Dst: Socket::WriteRequest*::is_notify_on_success
      Src: /src/brpc/src/brpc/socket.cpp:516,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/socket.cpp:517,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:520,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:521,1
    - Dst: Socket::NotifyOnFailed
      Src: /src/brpc/src/brpc/socket.cpp:523,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - p
    argTypes:
    - Socket::WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 526
      start: 512
    functionDepth: 1
    functionLinenumber: 512
    functionLinenumberEnd: 526
    functionName: Socket::ReturnSuccessfulWriteRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    - bthread_id_error
    - Socket::NotifyOnFailed
    - Failed
    - Socket::WriteRequest*::data::empty
    - DCHECK
    - Socket::WriteRequest*::is_notify_on_success
    - Socket::AddOutputMessages
    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:530,1
    - Dst: Socket::CancelUnwrittenBytes
      Src: /src/brpc/src/brpc/socket.cpp:531,1
    - Dst: Socket::WriteRequest*::data::size
      Src: /src/brpc/src/brpc/socket.cpp:531,1
    - Dst: Socket::WriteRequest*::data::clear
      Src: /src/brpc/src/brpc/socket.cpp:533,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/socket.cpp:535,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:537,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: 539
      start: 528
    functionDepth: 3
    functionLinenumber: 528
    functionLinenumberEnd: 539
    functionName: Socket::ReturnFailedWriteRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::WriteRequest*::data::clear
    - butil::return_object
    - bthread_id_error2
    - Socket::CancelUnwrittenBytes
    - Socket::WriteRequest*::data::size
    - Socket::WriteRequest*::reset_pipelined_count_and_user_message
    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:546,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: 550
      start: 541
    functionDepth: 4
    functionLinenumber: 541
    functionLinenumberEnd: 550
    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:553,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:553,1
    - Dst: IsWriteShutdown
      Src: /src/brpc/src/brpc/socket.cpp:553,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:556,1
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:557,1
    - Dst: non_zero_error_code
      Src: /src/brpc/src/brpc/socket.cpp:558,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:560,1
    - Dst: Socket::ReleaseWriteRequestsExceptLast
      Src: /src/brpc/src/brpc/socket.cpp:567,1
    - Dst: Socket::WriteRequest*::reset_pipelined_count_and_user_message
      Src: /src/brpc/src/brpc/socket.cpp:568,1
    - Dst: Socket::CancelUnwrittenBytes
      Src: /src/brpc/src/brpc/socket.cpp:569,1
    - Dst: Socket::WriteRequest*::data::size
      Src: /src/brpc/src/brpc/socket.cpp:569,1
    - Dst: Socket::WriteRequest*::data::clear
      Src: /src/brpc/src/brpc/socket.cpp:571,1
    - Dst: Socket::IsWriteComplete
      Src: /src/brpc/src/brpc/socket.cpp:572,1
    - Dst: Socket::ReturnFailedWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:573,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - req
    argTypes:
    - Socket::WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 574
      start: 552
    functionDepth: 5
    functionLinenumber: 552
    functionLinenumberEnd: 574
    functionName: Socket::ReleaseAllFailedWriteRequests
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::WriteRequest*::data::clear
    - Socket::ReleaseWriteRequestsExceptLast
    - Failed
    - pthread_mutex_lock
    - CHECK
    - Socket::CancelUnwrittenBytes
    - non_zero_error_code
    - Socket::IsWriteComplete
    - Socket::ReturnFailedWriteRequest
    - IsWriteShutdown
    - pthread_mutex_unlock
    - Socket::WriteRequest*::data::size
    - Socket::WriteRequest*::reset_pipelined_count_and_user_message
    linkageType: ''
    returnType: void
    signature: void Socket::ReleaseAllFailedWriteRequests(Socket::WriteRequest* req)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:583,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:583,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:585,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:586,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:587,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:590,1
    - Dst: butil::get_remote_side
      Src: /src/brpc/src/brpc/socket.cpp:592,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/brpc/socket.cpp:595,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/socket.cpp:600,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/socket.cpp:603,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:604,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:605,1
    - Dst: butil::make_no_delay
      Src: /src/brpc/src/brpc/socket.cpp:610,1
    - Dst: Socket::SetSocketOptions
      Src: /src/brpc/src/brpc/socket.cpp:612,1
    - Dst: HasOnEdgeTrigger
      Src: /src/brpc/src/brpc/socket.cpp:614,1
    - Dst: AddConsumer
      Src: /src/brpc/src/brpc/socket.cpp:615,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:616,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:616,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:618,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 29
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 576
    functionDepth: 1
    functionLinenumber: 576
    functionLinenumberEnd: 623
    functionName: Socket::ResetFileDescriptor
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ValidFileDescriptor
    - butil::EndPoint
    - butil::make_no_delay
    - butil::get_remote_side
    - HasOnEdgeTrigger
    - PLOG
    - store
    - fetch_add
    - butil::get_local_side
    - butil::cpuwide_time_us
    - butil::make_close_on_exec
    - AddConsumer
    - Socket::SetSocketOptions
    - butil::make_non_blocking
    - id
    linkageType: ''
    returnType: int
    signature: int Socket::ResetFileDescriptor(int fd)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:627,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:628,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:633,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:635,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:645,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:646,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:652,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:655,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:660,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:663,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:668,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:671,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:676,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:679,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:684,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:687,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:692,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:695,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 46
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 699
      start: 625
    functionDepth: 1
    functionLinenumber: 625
    functionLinenumberEnd: 699
    functionName: Socket::SetSocketOptions
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 3
    functionsReached:
    - setsockopt
    - PLOG
    linkageType: ''
    returnType: void
    signature: void Socket::SetSocketOptions(int fd)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:704,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:705,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:712,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:713,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 701
    functionDepth: 1
    functionLinenumber: 701
    functionLinenumberEnd: 717
    functionName: SetSocketBufferOptions
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - setsockopt
    - PLOG
    linkageType: ''
    returnType: void
    signature: void SetSocketBufferOptions(int fd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Stream::Create
      Src: /src/brpc/src/brpc/socket.cpp:723,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' options'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 722
    functionDepth: 5
    functionLinenumber: 722
    functionLinenumberEnd: 724
    functionName: Socket::Create
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 80
    functionsReached:
    - brpc::Stream::Create
    linkageType: ''
    returnType: int
    signature: int Socket::Create(const SocketOptions& options, SocketId* id)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Init
      Src: /src/brpc/src/brpc/socket.cpp:727,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:727,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:728,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:729,1
    - Dst: set_bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:732,1
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/socket.cpp:733,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/socket.cpp:734,1
    - Dst: TransportFactory::CreateTransport
      Src: /src/brpc/src/brpc/socket.cpp:738,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:739,1
    - Dst: Init
      Src: /src/brpc/src/brpc/socket.cpp:740,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:743,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:743,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:744,1
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:754,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:757,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket.cpp:757,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:758,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:759,1
    - Dst: reset_parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:760,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:765,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:766,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/socket.cpp:767,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:769,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:769,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:770,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:770,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:779,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:783,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:785,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:786,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:787,1
    - Dst: bthread_id_list_init
      Src: /src/brpc/src/brpc/socket.cpp:789,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:791,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:791,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:792,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:792,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:795,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:796,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:799,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:799,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:802,1
    - Dst: Socket::DoConnect
      Src: /src/brpc/src/brpc/socket.cpp:804,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:806,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:808,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/socket.cpp:809,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:810,1
    - Dst: Socket::ResetFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:816,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:818,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:819,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:820,1
    - Dst: Socket::HoldHCRelatedRef
      Src: /src/brpc/src/brpc/socket.cpp:823,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/socket.cpp:824,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 82
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 726
    functionDepth: 3
    functionLinenumber: 726
    functionLinenumberEnd: 827
    functionName: Socket::OnCreated
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::HoldHCRelatedRef
    - store
    - LOG
    - bthread_id_list_init
    - empty
    - Socket::ResetFileDescriptor
    - TransportFactory::CreateTransport
    - butil::MakeScopeGuard
    - PLOG
    - CHECK
    - butil::endpoint2str
    - Socket::DoConnect
    - id
    - ValidFileDescriptor
    - butil::cpuwide_time_us
    - set_bthread_tag
    - bthread_id_create
    - Socket::SetFailed
    - load
    - berror
    - auto::dismiss
    - Init
    - Socket::Connect
    - Reset
    - reset_parsing_context
    linkageType: ''
    returnType: int
    signature: int Socket::OnCreated(const SocketOptions& options)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: Socket::CreatedByConnect
      Src: /src/brpc/src/brpc/socket.cpp:830,1
    - Dst: swap
      Src: /src/brpc/src/brpc/socket.cpp:833,1
    - Dst: std::shared_ptr::StopConnect
      Src: /src/brpc/src/brpc/socket.cpp:834,1
    - Dst: SocketConnection*::BeforeRecycle
      Src: /src/brpc/src/brpc/socket.cpp:839,1
    - Dst: SocketUser*::BeforeRecycle
      Src: /src/brpc/src/brpc/socket.cpp:844,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:846,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:848,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/socket.cpp:853,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:855,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:856,1
    - Dst: HasOnEdgeTrigger
      Src: /src/brpc/src/brpc/socket.cpp:857,1
    - Dst: RemoveConsumer
      Src: /src/brpc/src/brpc/socket.cpp:858,1
    - Dst: close
      Src: /src/brpc/src/brpc/socket.cpp:860,1
    - Dst: Release
      Src: /src/brpc/src/brpc/socket.cpp:865,1
    - Dst: reset_parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:866,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:867,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:869,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:870,1
    - Dst: bthread_id_list_destroy
      Src: /src/brpc/src/brpc/socket.cpp:872,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/socket.cpp:875,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:890,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:893,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:894,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 49
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 898
      start: 829
    functionDepth: 2
    functionLinenumber: 829
    functionLinenumberEnd: 898
    functionName: Socket::BeforeRecycled
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error
    - store
    - Address
    - swap
    - SocketUniquePtr::ReleaseAdditionalReference
    - bthread_id_list_destroy
    - SocketConnection*::BeforeRecycle
    - SSL_free
    - ValidFileDescriptor
    - clear
    - RemoveConsumer
    - SharedPart*::RemoveRefManually
    - Socket::CreatedByConnect
    - HasOnEdgeTrigger
    - load
    - SocketUser*::BeforeRecycle
    - Release
    - exchange
    - close
    - std::shared_ptr::StopConnect
    - Reset
    - reset_parsing_context
    linkageType: ''
    returnType: void
    signature: void Socket::BeforeRecycled()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:902,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:905,1
    - Dst: HCEnabled
      Src: /src/brpc/src/brpc/socket.cpp:910,1
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:911,1
    - Dst: MarkAsBroken
      Src: /src/brpc/src/brpc/socket.cpp:911,1
    - Dst: StartHealthCheck
      Src: /src/brpc/src/brpc/socket.cpp:912,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:912,1
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:912,1
    - Dst: isolation_duration_ms
      Src: /src/brpc/src/brpc/socket.cpp:912,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:915,1
    - Dst: bthread::butex_wake_all
      Src: /src/brpc/src/brpc/socket.cpp:916,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:919,1
    - Dst: bthread_id_list_reset2_pthreadsafe
      Src: /src/brpc/src/brpc/socket.cpp:919,1
    - Dst: Socket::ResetAllStreams
      Src: /src/brpc/src/brpc/socket.cpp:922,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 2
    argNames:
    - error_code
    - ' error_text'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 900
    functionDepth: 5
    functionLinenumber: 900
    functionLinenumberEnd: 931
    functionName: Socket::OnFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - GetOrNewSharedPart
    - HCEnabled
    - MarkAsBroken
    - fetch_add
    - pthread_mutex_lock
    - StartHealthCheck
    - bthread_id_list_reset2_pthreadsafe
    - Socket::ResetAllStreams
    - CHECK_EQ
    - pthread_mutex_unlock
    - id
    - bthread::butex_wake_all
    - isolation_duration_ms
    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:935,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:937,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket.cpp:937,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 939
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 939
    functionName: Socket::AfterRevived
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - Socket::AfterRevived
    - description
    - LOG
    linkageType: ''
    returnType: void
    signature: void Socket::AfterRevived()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/socket.cpp:944,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:945,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/socket.cpp:947,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/socket.cpp:949,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/socket.cpp:950,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:950,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:951,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/socket.cpp:953,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 956
      start: 941
    functionDepth: 1
    functionLinenumber: 941
    functionLinenumberEnd: 956
    functionName: Socket::OnDescription
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - remote_side
    - local_side
    - fd
    - butil::endpoint2str
    - std::string::reserve
    linkageType: ''
    returnType: std::string
    signature: std::string Socket::OnDescription() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: AddReference
      Src: /src/brpc/src/brpc/socket.cpp:961,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 963
      start: 958
    functionDepth: 0
    functionLinenumber: 958
    functionLinenumberEnd: 963
    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:968,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 970
      start: 965
    functionDepth: 0
    functionLinenumber: 965
    functionLinenumberEnd: 970
    functionName: Socket::ReleaseHCRelatedReference
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Dereference
    linkageType: ''
    returnType: void
    signature: void Socket::ReleaseHCRelatedReference()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/socket.cpp:973,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:973,1
    - Dst: versioned_ref
      Src: /src/brpc/src/brpc/socket.cpp:979,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:980,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:981,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:981,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:984,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/socket.cpp:985,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:986,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:989,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:990,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:998,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:1007,1
    - Dst: ValidFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1008,1
    - Dst: HasOnEdgeTrigger
      Src: /src/brpc/src/brpc/socket.cpp:1009,1
    - Dst: RemoveConsumer
      Src: /src/brpc/src/brpc/socket.cpp:1010,1
    - Dst: close
      Src: /src/brpc/src/brpc/socket.cpp:1012,1
    - Dst: Socket::CreatedByConnect
      Src: /src/brpc/src/brpc/socket.cpp:1013,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/socket.cpp:1017,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:1019,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/socket.cpp:1021,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1025,1
    - Dst: reset_parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:1028,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:1031,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1032,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1033,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:1034,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/socket.cpp:1035,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1037,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1037,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:1041,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1042,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1043,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:1044,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:1046,1
    - Dst: clear
      Src: /src/brpc/src/brpc/socket.cpp:1048,1
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1052,1
    - Dst: SharedPart*::circuit_breaker::Reset
      Src: /src/brpc/src/brpc/socket.cpp:1054,1
    - Dst: SharedPart*::recent_error_count::store
      Src: /src/brpc/src/brpc/socket.cpp:1055,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 63
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1058
      start: 972
    functionDepth: 3
    functionLinenumber: 972
    functionLinenumberEnd: 1058
    functionName: Socket::WaitAndReset
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::recent_error_count::store
    - bthread_id_error
    - store
    - NRefOfVRef
    - LOG
    - versioned_ref
    - SharedPart*::circuit_breaker::Reset
    - SSL_free
    - id
    - ValidFileDescriptor
    - butil::EndPoint
    - BAIDU_SCOPED_LOCK
    - VersionOfVRefId
    - clear
    - RemoveConsumer
    - PLOG_IF
    - butil::cpuwide_time_us
    - Socket::CreatedByConnect
    - bthread_id_create
    - HasOnEdgeTrigger
    - bthread_usleep
    - berror
    - GetSharedPart
    - exchange
    - close
    - VersionOfVRef
    - Reset
    - reset_parsing_context
    linkageType: ''
    returnType: int
    signature: int Socket::WaitAndReset(int32_t expected_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1061,1
    - Dst: SharedPart*::recent_error_count::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1063,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1065
      start: 1060
    functionDepth: 0
    functionLinenumber: 1060
    functionLinenumberEnd: 1065
    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:1068,1
    - Dst: SharedPart*::recent_error_count::load
      Src: /src/brpc/src/brpc/socket.cpp:1070,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1073
      start: 1067
    functionDepth: 0
    functionLinenumber: 1067
    functionLinenumberEnd: 1073
    functionName: Socket::recent_error_count
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::recent_error_count::load
    - GetSharedPart
    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:1076,1
    - Dst: SharedPart*::circuit_breaker::isolated_times
      Src: /src/brpc/src/brpc/socket.cpp:1078,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1081
      start: 1075
    functionDepth: 0
    functionLinenumber: 1075
    functionLinenumberEnd: 1081
    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:1084,1
    - Dst: OnCallEnd
      Src: /src/brpc/src/brpc/socket.cpp:1084,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1085,1
    - Dst: Socket::main_socket_id
      Src: /src/brpc/src/brpc/socket.cpp:1085,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1086,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1083
    functionDepth: 1
    functionLinenumber: 1083
    functionLinenumberEnd: 1089
    functionName: Socket::FeedbackCircuitBreaker
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - GetOrNewSharedPart
    - OnCallEnd
    - LOG
    - Socket::main_socket_id
    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:1092,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:1093,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:1096,1
    - Dst: shall_fail_me_at_server_stop
      Src: /src/brpc/src/brpc/socket.cpp:1099,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1103,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:1106,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - idle_seconds
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1091
    functionDepth: 1
    functionLinenumber: 1091
    functionLinenumberEnd: 1107
    functionName: Socket::ReleaseReferenceIfIdle
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - last_active_time_us
    - butil::cpuwide_time_us
    - shall_fail_me_at_server_stop
    - ReleaseAdditionalReference
    - 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:1111,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1112
      start: 1110
    functionDepth: 1
    functionLinenumber: 1110
    functionLinenumberEnd: 1112
    functionName: Socket::SetFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 30
    functionsReached:
    - Socket::SetFailed
    linkageType: ''
    returnType: int
    signature: int Socket::SetFailed()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/socket.cpp:1118,1
    - Dst: butil::string_vprintf
      Src: /src/brpc/src/brpc/socket.cpp:1119,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/socket.cpp:1120,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1122,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - error_code
    - error_fmt
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1123
      start: 1114
    functionDepth: 2
    functionLinenumber: 1114
    functionLinenumberEnd: 1123
    functionName: Socket::SetFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 30
    functionsReached:
    - va_start
    - butil::string_vprintf
    - brpc::Stream::SetFailed
    - va_end
    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:1127,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1131,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1132
      start: 1125
    functionDepth: 0
    functionLinenumber: 1125
    functionLinenumberEnd: 1132
    functionName: Socket::SetFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 30
    functionsReached:
    - SocketUniquePtr::SetFailed
    - Address
    linkageType: ''
    returnType: int
    signature: int Socket::SetFailed(SocketId id)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: pthread_mutex_lock
      Src: /src/brpc/src/brpc/socket.cpp:1135,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:1136,1
    - Dst: bthread_id_list_add
      Src: /src/brpc/src/brpc/socket.cpp:1137,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1138,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/socket.cpp:1140,1
    - Dst: non_zero_error_code
      Src: /src/brpc/src/brpc/socket.cpp:1143,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1145,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:1146,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - id
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1148
      start: 1134
    functionDepth: 5
    functionLinenumber: 1134
    functionLinenumberEnd: 1148
    functionName: Socket::NotifyOnFailed
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - bthread_id_error2
    - bthread_id_error
    - Failed
    - pthread_mutex_lock
    - non_zero_error_code
    - pthread_mutex_unlock
    - bthread_id_list_add
    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:1152,1
    - Dst: address_resource
      Src: /src/brpc/src/brpc/socket.cpp:1153,1
    - Dst: Socket*::versioned_ref
      Src: /src/brpc/src/brpc/socket.cpp:1155,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1156,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/socket.cpp:1156,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1158,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1161,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/socket.cpp:1161,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:1163,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - id
    - nref
    argTypes:
    - SocketId
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1169
      start: 1151
    functionDepth: 0
    functionLinenumber: 1151
    functionLinenumberEnd: 1169
    functionName: Socket::Status
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 3
    functionsReached:
    - VersionOfVRefId
    - SlotOfVRefId<Socket>
    - address_resource
    - NRefOfVRef
    - VersionOfVRef
    - Socket*::versioned_ref
    linkageType: ''
    returnType: int
    signature: int Socket::Status(SocketId id, int32_t* nref)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:1182,1
    - Dst: Socket::WriteRequest*::data::empty
      Src: /src/brpc/src/brpc/socket.cpp:1187,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:1192,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/socket.cpp:1200,1
    - Dst: sched_yield
      Src: /src/brpc/src/brpc/socket.cpp:1211,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:1217,1
    - Dst: WriteRequest*::Setup
      Src: /src/brpc/src/brpc/socket.cpp:1226,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: 1232
      start: 1179
    functionDepth: 1
    functionLinenumber: 1179
    functionLinenumberEnd: 1232
    functionName: Socket::IsWriteComplete
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - WriteRequest*::Setup
    - sched_yield
    - compare_exchange_strong
    - Socket::WriteRequest*::data::empty
    - CHECK
    - CHECK_NE
    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:1235,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:1240,1
    - Dst: RegisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1241,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/socket.cpp:1245,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/brpc/socket.cpp:1253,1
    - Dst: UnregisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1253,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 3
    argNames:
    - fd
    - pollin
    - abstime
    argTypes:
    - int
    - bool
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1257
      start: 1234
    functionDepth: 4
    functionLinenumber: 1234
    functionLinenumberEnd: 1257
    functionName: Socket::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ValidFileDescriptor
    - load
    - bthread::butex_wait
    - UnregisterEvent
    - RegisterEvent
    - butil::ignore_result
    linkageType: ''
    returnType: int
    signature: int Socket::WaitEpollOut(int fd, bool pollin, const timespec* abstime)
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/brpc/socket.cpp:1268,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:1268,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1269,1
    - Dst: socket
      Src: /src/brpc/src/brpc/socket.cpp:1272,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1274,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1277,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/socket.cpp:1277,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1279,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/socket.cpp:1279,1
    - Dst: SetSocketBufferOptions
      Src: /src/brpc/src/brpc/socket.cpp:1281,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket.cpp:1282,1
    - Dst: setsockopt
      Src: /src/brpc/src/brpc/socket.cpp:1284,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/socket.cpp:1285,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:1285,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1286,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1291,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:1296,1
    - Dst: butil::endpoint2sockaddr
      Src: /src/brpc/src/brpc/socket.cpp:1298,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:1298,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1299,1
    - Dst: ::bind
      Src: /src/brpc/src/brpc/socket.cpp:1302,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1303,1
    - Dst: strerror
      Src: /src/brpc/src/brpc/socket.cpp:1303,1
    - Dst: test_listen_connect
      Src: /src/brpc/src/brpc/socket.cpp:1307,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1310,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:1310,1
    - Dst: EpollOutRequest::EpollOutRequest
      Src: /src/brpc/src/brpc/socket.cpp:1314,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1316,1
    - Dst: bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:1327,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/socket.cpp:1329,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1330,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1338,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:1338,1
    - Dst: SocketUniquePtr::_io_event::RegisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1342,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1344,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1345,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1346,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/socket.cpp:1357,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1361,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1361,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1362,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1362,1
    - Dst: Socket::WaitEpollOut
      Src: /src/brpc/src/brpc/socket.cpp:1368,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1369,1
    - Dst: Socket::CheckConnected
      Src: /src/brpc/src/brpc/socket.cpp:1372,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/socket.cpp:1376,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 78
    argCount: 2
    argNames:
    - abstime
    - data
    argTypes:
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1377
      start: 1259
    functionDepth: 6
    functionLinenumber: 1259
    functionLinenumberEnd: 1377
    functionName: Socket::Connect
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - strerror
    - Address
    - butil::make_close_on_exec
    - LOG
    - Socket::CheckConnected
    - empty
    - CHECK_EQ
    - bthread_tag
    - remote_side
    - PLOG
    - Socket::Create
    - bthread_timer_add
    - local_side
    - SocketUniquePtr::SetFailed
    - socket
    - setsockopt
    - Socket::WaitEpollOut
    - c_str
    - size
    - ::bind
    - butil::endpoint2sockaddr
    - EpollOutRequest::EpollOutRequest
    - test_listen_connect
    - butil::fd_guard::release
    - berror
    - butil::make_non_blocking
    - SetSocketBufferOptions
    - SocketUniquePtr::_io_event::RegisterEvent
    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:1385,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1386,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/socket.cpp:1390,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:1396,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1397,1
    - Dst: butil::get_local_side
      Src: /src/brpc/src/brpc/socket.cpp:1397,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1398,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:1398,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:1399,1
    - Dst: SSLHandshake
      Src: /src/brpc/src/brpc/socket.cpp:1404,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - sockfd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1379
    functionDepth: 1
    functionLinenumber: 1379
    functionLinenumberEnd: 1405
    functionName: Socket::CheckConnected
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - PLOG
    - remote_side
    - butil::get_local_side
    - LOG
    - butil::EndPoint::EndPoint
    - getsockopt
    - CHECK_EQ
    - id
    - CHECK_NE
    - SSLHandshake
    linkageType: ''
    returnType: int
    signature: int Socket::CheckConnected(int sockfd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:1410,1
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:1412,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - abstime
    - data
    argTypes:
    - timespec*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1414
      start: 1407
    functionDepth: 7
    functionLinenumber: 1407
    functionLinenumberEnd: 1414
    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:1417,1
    - Dst: set_bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:1421,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/socket.cpp:1421,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/socket.cpp:1424,1
    - Dst: WriteRequest*::set_socket
      Src: /src/brpc/src/brpc/socket.cpp:1425,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:1425,1
    - Dst: Socket::DoConnect
      Src: /src/brpc/src/brpc/socket.cpp:1426,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket.cpp:1429,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - abstime
    - req
    argTypes:
    - timespec*
    - WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1431
      start: 1416
    functionDepth: 8
    functionLinenumber: 1416
    functionLinenumberEnd: 1431
    functionName: Socket::ConnectIfNot
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - load
    - WriteRequest*::set_socket
    - SocketUniquePtr::release
    - SocketUniquePtr::get
    - ReAddress
    - bthread_self_tag
    - Socket::DoConnect
    - set_bthread_tag
    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:1434,1
    - Dst: bthread::butex_wake_except
      Src: /src/brpc/src/brpc/socket.cpp:1435,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1436
      start: 1433
    functionDepth: 4
    functionLinenumber: 1433
    functionLinenumberEnd: 1436
    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:1440,1
    - Dst: AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket.cpp:1446,1
    - Dst: dynamic_cast<EpollOutRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1451,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/socket.cpp:1451,1
    - Dst: SocketUniquePtr::HandleEpollOutRequest
      Src: /src/brpc/src/brpc/socket.cpp:1453,1
    - Dst: SocketUniquePtr::_epollout_butex::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1458,1
    - Dst: bthread::butex_wake_except
      Src: /src/brpc/src/brpc/socket.cpp:1459,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - user_data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1438
    functionDepth: 4
    functionLinenumber: 1438
    functionLinenumberEnd: 1461
    functionName: Socket::OnOutputEvent
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::user
    - AddressFailedAsWell
    - reinterpret_cast<SocketId>
    - bthread::butex_wake_except
    - SocketUniquePtr::HandleEpollOutRequest
    - dynamic_cast<EpollOutRequest*>
    - SocketUniquePtr::_epollout_butex::fetch_add
    linkageType: ''
    returnType: int
    signature: "int Socket::OnOutputEvent(void* user_data, uint32_t,\n                          const
      bthread_attr_t&)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:1466,1
    - Dst: dynamic_cast<EpollOutRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1469,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/socket.cpp:1469,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1471,1
    - Dst: SocketUniquePtr::HandleEpollOutRequest
      Src: /src/brpc/src/brpc/socket.cpp:1474,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1463
    functionDepth: 1
    functionLinenumber: 1463
    functionLinenumberEnd: 1475
    functionName: Socket::HandleEpollOutTimeout
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::user
    - Address
    - LOG
    - SocketUniquePtr::HandleEpollOutRequest
    - dynamic_cast<EpollOutRequest*>
    linkageType: ''
    returnType: void
    signature: void Socket::HandleEpollOutTimeout(void* arg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1481,1
    - Dst: butil::ignore_result
      Src: /src/brpc/src/brpc/socket.cpp:1486,1
    - Dst: UnregisterEvent
      Src: /src/brpc/src/brpc/socket.cpp:1486,1
    - Dst: EpollOutRequest*::on_epollout_event
      Src: /src/brpc/src/brpc/socket.cpp:1487,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - error_code
    - req
    argTypes:
    - int
    - EpollOutRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1488
      start: 1477
    functionDepth: 2
    functionLinenumber: 1477
    functionLinenumberEnd: 1488
    functionName: Socket::HandleEpollOutRequest
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - UnregisterEvent
    - EpollOutRequest*::on_epollout_event
    - butil::ignore_result
    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:1491,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1493,1
    - Dst: Socket*::GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1494,1
    - Dst: SharedPart*::num_continuous_connect_timeouts::store
      Src: /src/brpc/src/brpc/socket.cpp:1496,1
    - Dst: WriteRequest*::Setup
      Src: /src/brpc/src/brpc/socket.cpp:1499,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/socket.cpp:1502,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket.cpp:1503,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1505,1
    - Dst: Socket::KeepWrite
      Src: /src/brpc/src/brpc/socket.cpp:1506,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1509,1
    - Dst: SocketUniquePtr::GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:1511,1
    - Dst: SharedPart*::num_continuous_connect_timeouts::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:1512,1
    - Dst: SharedPart*::num_continuous_connect_timeouts::store
      Src: /src/brpc/src/brpc/socket.cpp:1517,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1523,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/socket.cpp:1524,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1524,1
    - Dst: SocketUniquePtr::ReleaseAllFailedWriteRequests
      Src: /src/brpc/src/brpc/socket.cpp:1525,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - err
    - data
    argTypes:
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1527
      start: 1490
    functionDepth: 4
    functionLinenumber: 1490
    functionLinenumberEnd: 1527
    functionName: Socket::AfterAppConnected
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - WriteRequest*::get_socket
    - WriteRequest*::Setup
    - SharedPart*::num_continuous_connect_timeouts::fetch_add
    - static_cast<WriteRequest*>
    - PLOG
    - Socket*::GetSharedPart
    - berror
    - SocketUniquePtr::GetOrNewSharedPart
    - bthread_attr_set_name
    - SharedPart*::num_continuous_connect_timeouts::store
    - SocketUniquePtr::SetFailed
    - Socket::KeepWrite
    - SocketUniquePtr::description
    - bthread_start_background
    - SocketUniquePtr::ReleaseAllFailedWriteRequests
    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:1531,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1533
      start: 1529
    functionDepth: 0
    functionLinenumber: 1529
    functionLinenumberEnd: 1533
    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:1536,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1537,1
    - Dst: Socket*::ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:1538,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/socket.cpp:1545,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket.cpp:1546,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/socket.cpp:1546,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/socket.cpp:1547,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1550,1
    - Dst: Socket::CheckConnectedAndKeepWrite
      Src: /src/brpc/src/brpc/socket.cpp:1554,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - fd
    - err
    - data
    argTypes:
    - int
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1556
      start: 1535
    functionDepth: 4
    functionLinenumber: 1535
    functionLinenumberEnd: 1556
    functionName: Socket::KeepWriteIfConnected
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - WriteRequest*::get_socket
    - Socket*::ssl_state
    - static_cast<WriteRequest*>
    - PLOG
    - std::unique_ptr::release
    - bthread_attr_set_name
    - Socket::CheckConnectedAndKeepWrite
    - bthread_start_background
    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:1560,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1561,1
    - Dst: CHECK_GE
      Src: /src/brpc/src/brpc/socket.cpp:1563,1
    - Dst: Socket*::CheckConnected
      Src: /src/brpc/src/brpc/socket.cpp:1565,1
    - Dst: Socket*::ResetFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1566,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/socket.cpp:1567,1
    - Dst: Socket*::_app_connect::StartConnect
      Src: /src/brpc/src/brpc/socket.cpp:1571,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1571,1
    - Dst: Socket::AfterAppConnected
      Src: /src/brpc/src/brpc/socket.cpp:1574,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/socket.cpp:1577,1
    - Dst: Socket::AfterAppConnected
      Src: /src/brpc/src/brpc/socket.cpp:1582,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 3
    argNames:
    - fd
    - err
    - data
    argTypes:
    - int
    - int
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1584
      start: 1558
    functionDepth: 5
    functionLinenumber: 1558
    functionLinenumberEnd: 1584
    functionName: Socket::CheckConnectedAndKeepWrite
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - WriteRequest*::get_socket
    - Socket*::_app_connect::StartConnect
    - static_cast<WriteRequest*>
    - butil::fd_guard::release
    - CHECK_GE
    - Socket*::CheckConnected
    - Socket*::CreatedByConnect
    - Socket*::ResetFileDescriptor
    - Socket::AfterAppConnected
    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:1588,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - id_wait
    - ec
    argTypes:
    - bthread_id_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1594
      start: 1586
    functionDepth: 1
    functionLinenumber: 1586
    functionLinenumberEnd: 1594
    functionName: SetError
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 18
    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:1597,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:1598,1
    - Dst: non_zero_error_code
      Src: /src/brpc/src/brpc/socket.cpp:1599,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1602,1
    - Dst: bthread_id_error2
      Src: /src/brpc/src/brpc/socket.cpp:1603,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1606,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/socket.cpp:1611,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - id_wait
    argTypes:
    - bthread_id_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1614
      start: 1596
    functionDepth: 5
    functionLinenumber: 1596
    functionLinenumberEnd: 1614
    functionName: Socket::ConductError
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_error2
    - Failed
    - pthread_mutex_lock
    - non_zero_error_code
    - pthread_mutex_unlock
    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:1617,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:1620,1
    - Dst: SSL_get_peer_certificate
      Src: /src/brpc/src/brpc/socket.cpp:1621,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1622
      start: 1616
    functionDepth: 1
    functionLinenumber: 1616
    functionLinenumberEnd: 1622
    functionName: Socket::GetPeerCertificate
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ssl_state
    - BAIDU_SCOPED_LOCK
    - SSL_get_peer_certificate
    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: Socket::StartWrite
      Src: /src/brpc/src/brpc/socket.cpp:1664,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 28
    argCount: 2
    argNames:
    - data
    - options_in
    argTypes:
    - butil::IOBuf*
    - WriteOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1665
      start: 1624
    functionDepth: 6
    functionLinenumber: 1624
    functionLinenumberEnd: 1665
    functionName: Socket::Write
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - WriteRequest*::clear_and_set_control_bits
    - Failed
    - Socket::StartWrite
    - LOG
    - WriteRequest*::set_pipelined_count_and_user_message
    - Socket::ConductError
    - SetError
    - butil::get_object<WriteRequest>
    - WriteRequest*::data::swap
    - butil::IOBuf*::empty
    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: Socket::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:
    - WriteRequest*::clear_and_set_control_bits
    - release
    - Failed
    - Socket::StartWrite
    - LOG
    - WriteRequest*::set_pipelined_count_and_user_message
    - Socket::ConductError
    - butil::get_object<WriteRequest>
    - SetError
    linkageType: ''
    returnType: int
    signature: int Socket::Write(SocketMessagePtr<>& msg, const WriteOptions* options_in)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:1707,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/socket.cpp:1721,1
    - Dst: WriteRequest*::need_shutdown_write
      Src: /src/brpc/src/brpc/socket.cpp:1733,1
    - Dst: Socket::ConnectIfNot
      Src: /src/brpc/src/brpc/socket.cpp:1736,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1739,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket.cpp:1739,1
    - Dst: WriteRequest*::Setup
      Src: /src/brpc/src/brpc/socket.cpp:1750,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:1752,1
    - Dst: CutMessageIntoFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1762,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:1762,1
    - Dst: CutFromIOBuf
      Src: /src/brpc/src/brpc/socket.cpp:1764,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:1771,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1772,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket.cpp:1773,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1773,1
    - Dst: Socket::AddOutputBytes
      Src: /src/brpc/src/brpc/socket.cpp:1777,1
    - Dst: Socket::IsWriteComplete
      Src: /src/brpc/src/brpc/socket.cpp:1779,1
    - Dst: Socket::ReturnSuccessfulWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:1780,1
    - Dst: ReAddress
      Src: /src/brpc/src/brpc/socket.cpp:1785,1
    - Dst: WriteRequest*::set_socket
      Src: /src/brpc/src/brpc/socket.cpp:1786,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket.cpp:1786,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/socket.cpp:1787,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1789,1
    - Dst: Socket::KeepWrite
      Src: /src/brpc/src/brpc/socket.cpp:1790,1
    - Dst: Socket::ReleaseAllFailedWriteRequests
      Src: /src/brpc/src/brpc/socket.cpp:1798,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 61
    argCount: 2
    argNames:
    - req
    - ' opt'
    argTypes:
    - WriteRequest*
    - WriteOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1801
      start: 1704
    functionDepth: 9
    functionLinenumber: 1704
    functionLinenumberEnd: 1801
    functionName: Socket::StartWrite
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 2
    functionsReached:
    - WriteRequest*::Setup
    - ssl_state
    - Socket::AddOutputBytes
    - bthread_attr_set_name
    - LOG
    - CutMessageIntoFileDescriptor
    - description
    - WriteRequest*::need_shutdown_write
    - SocketUniquePtr::release
    - Socket::KeepWrite
    - PLOG_IF
    - ReAddress
    - Socket::ConnectIfNot
    - Socket::SetFailed
    - WriteRequest*::set_socket
    - berror
    - Socket::ReturnSuccessfulWriteRequest
    - Socket::IsWriteComplete
    - fd
    - CutFromIOBuf
    - exchange
    - Socket::ReleaseAllFailedWriteRequests
    - bthread_start_background
    linkageType: ''
    returnType: int
    signature: int Socket::StartWrite(WriteRequest* req, const WriteOptions& opt)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<WriteRequest*>
      Src: /src/brpc/src/brpc/socket.cpp:1807,1
    - Dst: WriteRequest*::get_socket
      Src: /src/brpc/src/brpc/socket.cpp:1808,1
    - Dst: WriteRequest*::data::empty
      Src: /src/brpc/src/brpc/socket.cpp:1817,1
    - Dst: WriteRequest*::need_shutdown_write
      Src: /src/brpc/src/brpc/socket.cpp:1819,1
    - Dst: SocketUniquePtr::ReturnSuccessfulWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:1821,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1824,1
    - Dst: SocketUniquePtr::DoWrite
      Src: /src/brpc/src/brpc/socket.cpp:1828,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1832,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:1833,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/socket.cpp:1834,1
    - Dst: berror
      Src: /src/brpc/src/brpc/socket.cpp:1834,1
    - Dst: SocketUniquePtr::AddOutputBytes
      Src: /src/brpc/src/brpc/socket.cpp:1838,1
    - Dst: WriteRequest*::data::empty
      Src: /src/brpc/src/brpc/socket.cpp:1841,1
    - Dst: WriteRequest*::need_shutdown_write
      Src: /src/brpc/src/brpc/socket.cpp:1843,1
    - Dst: SocketUniquePtr::ReturnSuccessfulWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:1845,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1851,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/socket.cpp:1865,1
    - Dst: SocketUniquePtr::_transport::HasOnEdgeTrigger
      Src: /src/brpc/src/brpc/socket.cpp:1866,1
    - Dst: SocketUniquePtr::_transport::WaitEpollOut
      Src: /src/brpc/src/brpc/socket.cpp:1867,1
    - Dst: SocketUniquePtr::IsWriteComplete
      Src: /src/brpc/src/brpc/socket.cpp:1878,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1879,1
    - Dst: SocketUniquePtr::ReturnSuccessfulWriteRequest
      Src: /src/brpc/src/brpc/socket.cpp:1880,1
    - Dst: SocketUniquePtr::ReleaseAllFailedWriteRequests
      Src: /src/brpc/src/brpc/socket.cpp:1886,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 50
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1888
      start: 1805
    functionDepth: 2
    functionLinenumber: 1805
    functionLinenumberEnd: 1888
    functionName: Socket::KeepWrite
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 2
    functionsReached:
    - WriteRequest*::get_socket
    - SocketUniquePtr::DoWrite
    - SocketUniquePtr::IsWriteComplete
    - static_cast<WriteRequest*>
    - PLOG
    - SocketUniquePtr::ReturnSuccessfulWriteRequest
    - berror
    - butil::milliseconds_from_now
    - LOG
    - SocketUniquePtr::_transport::HasOnEdgeTrigger
    - SocketUniquePtr::_transport::WaitEpollOut
    - SocketUniquePtr::SetFailed
    - WriteRequest*::need_shutdown_write
    - CHECK_EQ
    - SocketUniquePtr::description
    - SocketUniquePtr::AddOutputBytes
    - SocketUniquePtr::ReleaseAllFailedWriteRequests
    - WriteRequest*::data::empty
    linkageType: ''
    returnType: void
    signature: void * Socket::KeepWrite(void* void_arg)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: WriteRequest*::need_shutdown_write
      Src: /src/brpc/src/brpc/socket.cpp:1897,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:1904,1
    - Dst: CutMessageIntoFileDescriptor
      Src: /src/brpc/src/brpc/socket.cpp:1907,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:1907,1
    - Dst: CutFromIOBufList
      Src: /src/brpc/src/brpc/socket.cpp:1909,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:1913,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:1913,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:1916,1
    - Dst: CutMessageIntoSSLChannel
      Src: /src/brpc/src/brpc/socket.cpp:1917,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:1922,1
    - Dst: butil::IOBuf::cut_multiple_into_SSL_channel
      Src: /src/brpc/src/brpc/socket.cpp:1923,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/socket.cpp:1939,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:1941,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:1941,1
    - Dst: SSLError
      Src: /src/brpc/src/brpc/socket.cpp:1942,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/socket.cpp:1946,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:1946,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 43
    argCount: 1
    argNames:
    - req
    argTypes:
    - WriteRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1952
      start: 1890
    functionDepth: 1
    functionLinenumber: 1890
    functionLinenumberEnd: 1952
    functionName: Socket::DoWrite
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - ssl_state
    - SSLError
    - BAIDU_SCOPED_LOCK
    - PLOG
    - ERR_get_error
    - CutFromIOBufList
    - fd
    - LOG
    - CutMessageIntoFileDescriptor
    - WriteRequest*::need_shutdown_write
    - CHECK_EQ
    - butil::IOBuf::cut_multiple_into_SSL_channel
    - CutMessageIntoSSLChannel
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t Socket::DoWrite(WriteRequest* req)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2091,1
    - Dst: DetectSSLState
      Src: /src/brpc/src/brpc/socket.cpp:2093,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2093,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2094,1
    - Dst: SSLHandshake
      Src: /src/brpc/src/brpc/socket.cpp:2104,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2104,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2111,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2119,1
    - Dst: append_from_file_descriptor
      Src: /src/brpc/src/brpc/socket.cpp:2124,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2124,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:2127,1
    - Dst: ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2127,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2131,1
    - Dst: append_from_SSL_channel
      Src: /src/brpc/src/brpc/socket.cpp:2132,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/socket.cpp:2149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2153,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2160,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2160,1
    - Dst: SSLError
      Src: /src/brpc/src/brpc/socket.cpp:2161,1
    - Dst: BIO_fd_non_fatal_error
      Src: /src/brpc/src/brpc/socket.cpp:2168,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/socket.cpp:2170,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:2170,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 63
    argCount: 1
    argNames:
    - size_hint
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2177
      start: 2090
    functionDepth: 1
    functionLinenumber: 2090
    functionLinenumberEnd: 2177
    functionName: Socket::DoRead
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - CHECK_EQ
    - append_from_SSL_channel
    - ssl_state
    - SSLError
    - BAIDU_SCOPED_LOCK
    - ERR_get_error
    - PLOG_IF
    - CHECK
    - fd
    - LOG
    - BIO_fd_non_fatal_error
    - SSLHandshake
    - append_from_file_descriptor
    - DetectSSLState
    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:2182,1
    - Dst: bthread_id_trylock
      Src: /src/brpc/src/brpc/socket.cpp:2188,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/socket.cpp:2194,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2195,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - auth_error
    argTypes:
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2199
      start: 2179
    functionDepth: 5
    functionLinenumber: 2179
    functionLinenumberEnd: 2199
    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:2205,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2210,1
    - Dst: description
      Src: /src/brpc/src/brpc/socket.cpp:2210,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/socket.cpp:2212,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/socket.cpp:2212,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - error_code
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2214
      start: 2201
    functionDepth: 6
    functionLinenumber: 2201
    functionLinenumberEnd: 2214
    functionName: Socket::SetAuthentication
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - compare_exchange_strong
    - bthread_id_unlock_and_destroy
    - description
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Socket::SetAuthentication(int error_code)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2218,1
    - Dst: AuthContext::AuthContext
      Src: /src/brpc/src/brpc/socket.cpp:2222,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2223,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2225
      start: 2216
    functionDepth: 1
    functionLinenumber: 2216
    functionLinenumberEnd: 2225
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: reinterpret_cast<SocketId>
      Src: /src/brpc/src/brpc/socket.cpp:2229,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:2231,1
    - Dst: SocketUniquePtr::_transport::HasOnEdgeTrigger
      Src: /src/brpc/src/brpc/socket.cpp:2234,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/socket.cpp:2239,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2241,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2243,1
    - Dst: SocketUniquePtr::_nevent::fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2254,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/socket.cpp:2261,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/socket.cpp:2265,1
    - Dst: Socket*::_transport::ProcessEvent
      Src: /src/brpc/src/brpc/socket.cpp:2268,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 3
    argNames:
    - user_data
    - events
    - ' thread_attr'
    argTypes:
    - void*
    - uint32_t
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2271
      start: 2227
    functionDepth: 2
    functionLinenumber: 2227
    functionLinenumberEnd: 2271
    functionName: Socket::OnInputEvent
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket*::_transport::ProcessEvent
    - SocketUniquePtr::fd
    - SocketUniquePtr::release
    - Address
    - CHECK
    - SocketUniquePtr::_transport::HasOnEdgeTrigger
    - reinterpret_cast<SocketId>
    - bthread_self_tag
    - SocketUniquePtr::_nevent::fetch_add
    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:2275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2277
      start: 2273
    functionDepth: 0
    functionLinenumber: 2273
    functionLinenumberEnd: 2277
    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:2280,1
    - Dst: SharedPart*::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/socket.cpp:2282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - now_ms
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2284
      start: 2279
    functionDepth: 0
    functionLinenumber: 2279
    functionLinenumberEnd: 2284
    functionName: Socket::UpdateStatsEverySecond
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::UpdateStatsEverySecond
    - GetSharedPart
    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: 2288
      start: 2288
    functionDepth: 0
    functionLinenumber: 2288
    functionLinenumberEnd: 2288
    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:2293,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - obj
    argTypes:
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2293
      start: 2293
    functionDepth: 1
    functionLinenumber: 2293
    functionLinenumberEnd: 2293
    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:2298,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' os'
    - ' obj'
    argTypes:
    - std::ostream
    - ObjectPtr<T>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2301
      start: 2296
    functionDepth: 1
    functionLinenumber: 2296
    functionLinenumberEnd: 2301
    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: 25
    BranchProfiles: []
    Callsites:
    - Dst: AddressFailedAsWell
      Src: /src/brpc/src/brpc/socket.cpp:2305,1
    - Dst: SocketUniquePtr::versioned_ref
      Src: /src/brpc/src/brpc/socket.cpp:2319,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2324,1
    - Dst: SocketUniquePtr::_pipeline_q::size
      Src: /src/brpc/src/brpc/socket.cpp:2326,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2330,1
    - Dst: bthread::get_sizes
      Src: /src/brpc/src/brpc/socket.cpp:2332,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/socket.cpp:2333,1
    - Dst: SocketUniquePtr::preferred_index
      Src: /src/brpc/src/brpc/socket.cpp:2336,1
    - Dst: SocketUniquePtr::GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2337,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:2338,1
    - Dst: SharedPart*::ref_count
      Src: /src/brpc/src/brpc/socket.cpp:2340,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2342,1
    - Dst: SocketPool*::ListSockets
      Src: /src/brpc/src/brpc/socket.cpp:2346,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/socket.cpp:2347,1
    - Dst: SocketPool*::_numfree::load
      Src: /src/brpc/src/brpc/socket.cpp:2354,1
    - Dst: SocketPool*::_numinflight::load
      Src: /src/brpc/src/brpc/socket.cpp:2356,1
    - Dst: SharedPart*::in_size::load
      Src: /src/brpc/src/brpc/socket.cpp:2361,1
    - Dst: SharedPart*::in_num_messages::load
      Src: /src/brpc/src/brpc/socket.cpp:2362,1
    - Dst: SharedPart*::out_size::load
      Src: /src/brpc/src/brpc/socket.cpp:2363,1
    - Dst: SharedPart*::out_num_messages::load
      Src: /src/brpc/src/brpc/socket.cpp:2364,1
    - Dst: SocketUniquePtr::_fd::load
      Src: /src/brpc/src/brpc/socket.cpp:2367,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/socket.cpp:2368,1
    - Dst: SocketUniquePtr::_nevent::load
      Src: /src/brpc/src/brpc/socket.cpp:2371,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2374,1
    - Dst: ShowObject
      Src: /src/brpc/src/brpc/socket.cpp:2378,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/socket.cpp:2379,1
    - Dst: dynamic_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/socket.cpp:2381,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/socket.cpp:2381,1
    - Dst: InputMessenger*::NameOfProtocol
      Src: /src/brpc/src/brpc/socket.cpp:2383,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2385,1
    - Dst: SocketUniquePtr::_read_buf::size
      Src: /src/brpc/src/brpc/socket.cpp:2390,1
    - Dst: SocketUniquePtr::parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2402,1
    - Dst: dynamic_cast<Describable*>
      Src: /src/brpc/src/brpc/socket.cpp:2403,1
    - Dst: butil::class_name_str
      Src: /src/brpc/src/brpc/socket.cpp:2405,1
    - Dst: Describable*::Describe
      Src: /src/brpc/src/brpc/socket.cpp:2409,1
    - Dst: ShowObject
      Src: /src/brpc/src/brpc/socket.cpp:2412,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/socket.cpp:2414,1
    - Dst: SocketUniquePtr::_ninprocess::load
      Src: /src/brpc/src/brpc/socket.cpp:2418,1
    - Dst: SocketUniquePtr::_auth_flag_error::load
      Src: /src/brpc/src/brpc/socket.cpp:2419,1
    - Dst: SocketUniquePtr::_logoff_flag::load
      Src: /src/brpc/src/brpc/socket.cpp:2422,1
    - Dst: SocketUniquePtr::additional_ref_status
      Src: /src/brpc/src/brpc/socket.cpp:2424,1
    - Dst: SocketUniquePtr::_total_streams_unconsumed_size::load
      Src: /src/brpc/src/brpc/socket.cpp:2426,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::load
      Src: /src/brpc/src/brpc/socket.cpp:2428,1
    - Dst: SocketUniquePtr::_agent_socket_id::load
      Src: /src/brpc/src/brpc/socket.cpp:2430,1
    - Dst: SocketUniquePtr::_write_head::load
      Src: /src/brpc/src/brpc/socket.cpp:2437,1
    - Dst: SSLStateToString
      Src: /src/brpc/src/brpc/socket.cpp:2438,1
    - Dst: SocketUniquePtr::_ssl_ctx::get
      Src: /src/brpc/src/brpc/socket.cpp:2439,1
    - Dst: SocketSSLContext*::sni_name::empty
      Src: /src/brpc/src/brpc/socket.cpp:2442,1
    - Dst: Print
      Src: /src/brpc/src/brpc/socket.cpp:2448,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2457,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2466,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2470,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2480,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2484,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2494,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2498,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2508,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2517,1
    - Dst: getsockopt
      Src: /src/brpc/src/brpc/socket.cpp:2537,1
    - Dst: SocketUniquePtr::_transport::Debug
      Src: /src/brpc/src/brpc/socket.cpp:2572,1
    - Dst: SocketUniquePtr::_io_event::bthread_tag
      Src: /src/brpc/src/brpc/socket.cpp:2575,1
    CyclomaticComplexity: 28
    EdgeCount: 28
    ICount: 115
    argCount: 2
    argNames:
    - ' os'
    - id
    argTypes:
    - std::ostream
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2576
      start: 2303
    functionDepth: 2
    functionLinenumber: 2303
    functionLinenumberEnd: 2576
    functionName: Socket::DebugSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::_agent_socket_id::load
    - SharedPart*::out_size::load
    - dynamic_cast<InputMessenger*>
    - SharedPart*::in_size::load
    - Describable*::Describe
    - NRefOfVRef
    - SocketSSLContext*::sni_name::empty
    - SocketUniquePtr::ssl_state
    - SocketUniquePtr::_fd::load
    - std::vector::size
    - SocketUniquePtr::id
    - getsockopt
    - SocketPool*::_numinflight::load
    - SocketUniquePtr::_read_buf::size
    - SocketUniquePtr::_write_head::load
    - SocketUniquePtr::_nevent::load
    - SharedPart*::in_num_messages::load
    - SocketUniquePtr::_transport::Debug
    - SocketUniquePtr::_io_event::bthread_tag
    - SharedPart*::out_num_messages::load
    - dynamic_cast<Describable*>
    - SocketUniquePtr::_pipeline_q::size
    - SocketUniquePtr::parsing_context
    - Print
    - InputMessenger*::NameOfProtocol
    - SocketUniquePtr::additional_ref_status
    - SocketUniquePtr::_ssl_ctx::get
    - SSLStateToString
    - SocketPool*::ListSockets
    - SocketUniquePtr::preferred_index
    - SharedPart*::socket_pool::load
    - BAIDU_SCOPED_LOCK
    - AddressFailedAsWell
    - butil::cpuwide_time_us
    - ShowObject
    - SocketUniquePtr::_auth_flag_error::load
    - SocketUniquePtr::_logoff_flag::load
    - arraysize
    - SocketUniquePtr::_ninflight_app_health_check::load
    - bthread::get_sizes
    - SocketPool*::_numfree::load
    - SocketUniquePtr::_ninprocess::load
    - SocketUniquePtr::user
    - SocketUniquePtr::versioned_ref
    - SocketUniquePtr::GetSharedPart
    - butil::class_name_str
    - SharedPart*::ref_count
    - SocketUniquePtr::_total_streams_unconsumed_size::load
    - VersionOfVRef
    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:2580,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/socket.cpp:2583,1
    - Dst: Socket::Connect
      Src: /src/brpc/src/brpc/socket.cpp:2584,1
    - Dst: bvar::FileDumper::close
      Src: /src/brpc/src/brpc/socket.cpp:2586,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2590
      start: 2578
    functionDepth: 7
    functionLinenumber: 2578
    functionLinenumberEnd: 2590
    functionName: Socket::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - bvar::FileDumper::close
    - butil::milliseconds_from_now
    - LOG
    - Socket::Connect
    linkageType: ''
    returnType: int
    signature: int Socket::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2593,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:2594,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2595,1
    - Dst: std::set<StreamId>::set<StreamId>
      Src: /src/brpc/src/brpc/socket.cpp:2599,1
    - Dst: insert
      Src: /src/brpc/src/brpc/socket.cpp:2601,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2602,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2604
      start: 2592
    functionDepth: 0
    functionLinenumber: 2592
    functionLinenumberEnd: 2604
    functionName: Socket::AddStream
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - insert
    - std::set<StreamId>::set<StreamId>
    - Failed
    - unlock
    - lock
    linkageType: ''
    returnType: int
    signature: int Socket::AddStream(StreamId stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2607,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2609,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2610,1
    - Dst: erase
      Src: /src/brpc/src/brpc/socket.cpp:2613,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2614,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - StreamId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2616
      start: 2606
    functionDepth: 1
    functionLinenumber: 2606
    functionLinenumberEnd: 2616
    functionName: Socket::RemoveStream
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - erase
    - unlock
    - CHECK
    - lock
    linkageType: ''
    returnType: int
    signature: int Socket::RemoveStream(StreamId stream_id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DCHECK
      Src: /src/brpc/src/brpc/socket.cpp:2619,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/socket.cpp:2619,1
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2621,1
    - Dst: std::set::swap
      Src: /src/brpc/src/brpc/socket.cpp:2626,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2628,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/socket.cpp:2629,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/socket.cpp:2630,1
    - Dst: brpc::Stream::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2631,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/socket.cpp:2631,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - error_code
    - ' error_text'
    argTypes:
    - int
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2633
      start: 2618
    functionDepth: 2
    functionLinenumber: 2618
    functionLinenumberEnd: 2633
    functionName: Socket::ResetAllStreams
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - Failed
    - unlock
    - c_str
    - DCHECK
    - std::set::swap
    - std::set::begin
    - lock
    - brpc::Stream::SetFailed
    - std::set::end
    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:2636,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2637
      start: 2635
    functionDepth: 0
    functionLinenumber: 2635
    functionLinenumberEnd: 2637
    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:2640,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2641
      start: 2639
    functionDepth: 1
    functionLinenumber: 2639
    functionLinenumberEnd: 2641
    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: 2650
      start: 2645
    functionDepth: 0
    functionLinenumber: 2645
    functionLinenumberEnd: 2650
    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:2653,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket.cpp:2654,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2656,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2657,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2660
      start: 2652
    functionDepth: 3
    functionLinenumber: 2652
    functionLinenumberEnd: 2660
    functionName: SocketPool::~SocketPool()
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - begin
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::ReleaseAdditionalReference
    - end
    linkageType: ''
    returnType: void
    signature: void SocketPool::~SocketPool()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2683,1
    - Dst: empty
      Src: /src/brpc/src/brpc/socket.cpp:2684,1
    - Dst: back
      Src: /src/brpc/src/brpc/socket.cpp:2687,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/socket.cpp:2688,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2690,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2693,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2694,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket.cpp:2702,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/socket.cpp:2703,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2704,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2708
      start: 2662
    functionDepth: 3
    functionLinenumber: 2662
    functionLinenumberEnd: 2708
    functionName: SocketPool::GetSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - BAIDU_SCOPED_LOCK
    - back
    - fetch_sub
    - fetch_add
    - brpc::SetTrackMeAddress
    - get_client_side_messenger
    - empty
    linkageType: ''
    returnType: int
    signature: int SocketPool::GetSocket(SocketUniquePtr* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2715,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/socket.cpp:2717,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/socket.cpp:2718,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/socket.cpp:2719,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2722,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2723,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2725,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 1
    argNames:
    - sock
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2726
      start: 2710
    functionDepth: 1
    functionLinenumber: 2710
    functionLinenumberEnd: 2726
    functionName: SocketPool::ReturnSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - BAIDU_SCOPED_LOCK
    - fetch_sub
    - fetch_add
    - Socket*::id
    - push_back
    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:2729,1
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2732,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:2733,1
    - Dst: size
      Src: /src/brpc/src/brpc/socket.cpp:2734,1
    - Dst: std::vector<SocketId>*::capacity
      Src: /src/brpc/src/brpc/socket.cpp:2737,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2738,1
    - Dst: std::vector<SocketId>*::reserve
      Src: /src/brpc/src/brpc/socket.cpp:2739,1
    - Dst: lock
      Src: /src/brpc/src/brpc/socket.cpp:2740,1
    - Dst: std::vector<SocketId>*::insert
      Src: /src/brpc/src/brpc/socket.cpp:2743,1
    - Dst: std::vector<SocketId>*::end
      Src: /src/brpc/src/brpc/socket.cpp:2743,1
    - Dst: begin
      Src: /src/brpc/src/brpc/socket.cpp:2743,1
    - Dst: end
      Src: /src/brpc/src/brpc/socket.cpp:2743,1
    - Dst: std::vector<SocketId>*::push_back
      Src: /src/brpc/src/brpc/socket.cpp:2746,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/socket.cpp:2749,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - out
    - max_count
    argTypes:
    - std::vector<SocketId>*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2750
      start: 2728
    functionDepth: 1
    functionLinenumber: 2728
    functionLinenumberEnd: 2750
    functionName: SocketPool::ListSockets
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - begin
    - std::vector<SocketId>*::clear
    - std::vector<SocketId>*::reserve
    - std::vector<SocketId>*::end
    - end
    - unlock
    - std::vector<SocketId>*::push_back
    - std::vector<SocketId>*::insert
    - lock
    - size
    - std::vector<SocketId>*::capacity
    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:2754,1
    - Dst: id
      Src: /src/brpc/src/brpc/socket.cpp:2756,1
    - Dst: SharedPart::SharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2756,1
    - Dst: SharedPart*::AddRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2757,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2759,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2761,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2762,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2767
      start: 2752
    functionDepth: 1
    functionLinenumber: 2752
    functionLinenumberEnd: 2767
    functionName: Socket::GetOrNewSharedPartSlower
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart::SharedPart
    - compare_exchange_strong
    - SharedPart*::RemoveRefManually
    - CHECK
    - GetSharedPart
    - SharedPart*::AddRefManually
    - id
    linkageType: ''
    returnType: Socket::SharedPart
    signature: Socket::SharedPart * Socket::GetOrNewSharedPartSlower()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2770,1
    - Dst: SharedPart*::AddRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2771,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:2773,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2775,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - main_socket
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2777
      start: 2769
    functionDepth: 0
    functionLinenumber: 2769
    functionLinenumberEnd: 2777
    functionName: Socket::ShareStats
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::AddRefManually
    - Socket*::GetOrNewSharedPart
    - SharedPart*::RemoveRefManually
    - exchange
    linkageType: ''
    returnType: void
    signature: void Socket::ShareStats(Socket* main_socket)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2781,1
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2784,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2786,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2790,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:2793,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:2794,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:2794,1
    - Dst: user
      Src: /src/brpc/src/brpc/socket.cpp:2795,1
    - Dst: SocketPool::SocketPool
      Src: /src/brpc/src/brpc/socket.cpp:2802,1
    - Dst: SharedPart*::socket_pool::compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2804,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2807,1
    - Dst: SocketPool*::GetSocket
      Src: /src/brpc/src/brpc/socket.cpp:2811,1
    - Dst: Socket::ShareStats
      Src: /src/brpc/src/brpc/socket.cpp:2814,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/socket.cpp:2815,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2815,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/socket.cpp:2816,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 32
    argCount: 1
    argNames:
    - pooled_socket
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2820
      start: 2779
    functionDepth: 1
    functionLinenumber: 2779
    functionLinenumberEnd: 2820
    functionName: Socket::GetPooledSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::socket_pool::load
    - butil::EndPoint
    - GetOrNewSharedPart
    - remote_side
    - user
    - parsing_context
    - local_side
    - CHECK
    - LOG
    - SharedPart*::socket_pool::compare_exchange_strong
    - SocketPool::SocketPool
    - SocketPool*::GetSocket
    - Socket::ShareStats
    linkageType: ''
    returnType: int
    signature: int Socket::GetPooledSocket(SocketUniquePtr* pooled_socket)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:2823,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2825,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2826,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2829,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2831,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:2832,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2833,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
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:2844,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:2848,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2848,1
    - Dst: SocketPool*::ReturnSocket
      Src: /src/brpc/src/brpc/socket.cpp:2849,1
    - Dst: SharedPart*::RemoveRefManually
      Src: /src/brpc/src/brpc/socket.cpp:2850,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2852
      start: 2822
    functionDepth: 2
    functionLinenumber: 2822
    functionLinenumberEnd: 2852
    functionName: Socket::ReturnToPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - SharedPart*::socket_pool::load
    - parsing_context
    - store
    - SharedPart*::RemoveRefManually
    - CHECK
    - butil::cpuwide_time_us
    - LOG
    - SocketPool*::ReturnSocket
    - exchange
    linkageType: ''
    returnType: int
    signature: int Socket::ReturnToPool()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2855,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2857,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2860
      start: 2854
    functionDepth: 0
    functionLinenumber: 2854
    functionLinenumberEnd: 2860
    functionName: Socket::HasSocketPool
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::socket_pool::load
    - GetSharedPart
    linkageType: ''
    returnType: bool
    signature: bool Socket::HasSocketPool() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<SocketId>*::clear
      Src: /src/brpc/src/brpc/socket.cpp:2863,1
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2864,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2868,1
    - Dst: SocketPool*::ListSockets
      Src: /src/brpc/src/brpc/socket.cpp:2872,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 2
    argNames:
    - out
    - max_count
    argTypes:
    - std::vector<SocketId>*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2873
      start: 2862
    functionDepth: 1
    functionLinenumber: 2862
    functionLinenumberEnd: 2873
    functionName: Socket::ListPooledSockets
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::socket_pool::load
    - SocketPool*::ListSockets
    - GetSharedPart
    - std::vector<SocketId>*::clear
    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:2876,1
    - Dst: SharedPart*::socket_pool::load
      Src: /src/brpc/src/brpc/socket.cpp:2880,1
    - Dst: SocketPool*::_numfree::load
      Src: /src/brpc/src/brpc/socket.cpp:2884,1
    - Dst: SocketPool*::_numinflight::load
      Src: /src/brpc/src/brpc/socket.cpp:2885,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - numfree
    - numinflight
    argTypes:
    - int*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2887
      start: 2875
    functionDepth: 0
    functionLinenumber: 2875
    functionLinenumberEnd: 2887
    functionName: Socket::GetPooledSocketStats
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - SharedPart*::socket_pool::load
    - GetSharedPart
    - SocketPool*::_numfree::load
    - SocketPool*::_numinflight::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:2891,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:2896,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/socket.cpp:2897,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:2897,1
    - Dst: user
      Src: /src/brpc/src/brpc/socket.cpp:2898,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/socket.cpp:2905,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:2906,1
    - Dst: Socket::ShareStats
      Src: /src/brpc/src/brpc/socket.cpp:2909,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - short_socket
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2911
      start: 2889
    functionDepth: 1
    functionLinenumber: 2889
    functionLinenumberEnd: 2911
    functionName: Socket::GetShortSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - butil::EndPoint
    - remote_side
    - user
    - get_client_side_messenger
    - local_side
    - Address
    - LOG
    - Socket::ShareStats
    linkageType: ''
    returnType: int
    signature: int Socket::GetShortSocket(SocketUniquePtr* short_socket)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2914,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:2917,1
    - Dst: checkfn
      Src: /src/brpc/src/brpc/socket.cpp:2918,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:2918,1
    - Dst: SocketUniquePtr*::swap
      Src: /src/brpc/src/brpc/socket.cpp:2919,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2922,1
    - Dst: Socket::GetShortSocket
      Src: /src/brpc/src/brpc/socket.cpp:2925,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/socket.cpp:2926,1
    - Dst: checkfn
      Src: /src/brpc/src/brpc/socket.cpp:2929,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/socket.cpp:2929,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2932,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/socket.cpp:2935,1
    - Dst: SocketUniquePtr::id
      Src: /src/brpc/src/brpc/socket.cpp:2936,1
    - Dst: SocketUniquePtr*::swap
      Src: /src/brpc/src/brpc/socket.cpp:2937,1
    - Dst: SocketUniquePtr::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/socket.cpp:2940,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 25
    argCount: 1
    argNames:
    - out
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2943
      start: 2913
    functionDepth: 2
    functionLinenumber: 2913
    functionLinenumberEnd: 2943
    functionName: Socket::GetAgentSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - checkfn
    - load
    - compare_exchange_strong
    - SocketUniquePtr::get
    - Address
    - LOG
    - SocketUniquePtr::id
    - SocketUniquePtr*::swap
    - Socket::GetShortSocket
    - SocketUniquePtr::ReleaseAdditionalReference
    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:2946,1
    - Dst: Address
      Src: /src/brpc/src/brpc/socket.cpp:2950,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - out
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2951
      start: 2945
    functionDepth: 0
    functionLinenumber: 2945
    functionLinenumberEnd: 2951
    functionName: Socket::PeekAgentSocket
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - load
    - Address
    linkageType: ''
    returnType: int
    signature: int Socket::PeekAgentSocket(SocketUniquePtr* out) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/socket.cpp:2954,1
    - Dst: BAIDU_CASSERT
      Src: /src/brpc/src/brpc/socket.cpp:2955,1
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2957,1
    - Dst: memset
      Src: /src/brpc/src/brpc/socket.cpp:2961,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - s
    argTypes:
    - SocketStat*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2963
      start: 2953
    functionDepth: 1
    functionLinenumber: 2953
    functionLinenumberEnd: 2963
    functionName: Socket::GetStat
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - memset
    - GetSharedPart
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void Socket::GetStat(SocketStat* s) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2966,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2966,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2967
      start: 2965
    functionDepth: 0
    functionLinenumber: 2965
    functionLinenumberEnd: 2967
    functionName: Socket::AddInputBytes
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - GetOrNewSharedPart
    linkageType: ''
    returnType: void
    signature: void Socket::AddInputBytes(size_t bytes)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: GetOrNewSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2969,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2969,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2970
      start: 2968
    functionDepth: 0
    functionLinenumber: 2968
    functionLinenumberEnd: 2970
    functionName: Socket::AddInputMessages
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - GetOrNewSharedPart
    linkageType: ''
    returnType: void
    signature: void Socket::AddInputMessages(size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/socket.cpp:2973,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2977
      start: 2971
    functionDepth: 0
    functionLinenumber: 2971
    functionLinenumberEnd: 2977
    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:2979,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/socket.cpp:2979,1
    - Dst: store
      Src: /src/brpc/src/brpc/socket.cpp:2980,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/socket.cpp:2980,1
    - Dst: Socket::CancelUnwrittenBytes
      Src: /src/brpc/src/brpc/socket.cpp:2982,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - bytes
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2983
      start: 2978
    functionDepth: 1
    functionLinenumber: 2978
    functionLinenumberEnd: 2983
    functionName: Socket::AddOutputBytes
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - GetOrNewSharedPart
    - store
    - fetch_add
    - butil::cpuwide_time_us
    - Socket::CancelUnwrittenBytes
    linkageType: ''
    returnType: void
    signature: void Socket::AddOutputBytes(size_t bytes)
  - 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:
    - count
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2986
      start: 2984
    functionDepth: 0
    functionLinenumber: 2984
    functionLinenumberEnd: 2986
    functionName: Socket::AddOutputMessages
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 1
    functionsReached:
    - fetch_add
    - GetOrNewSharedPart
    linkageType: ''
    returnType: void
    signature: void Socket::AddOutputMessages(size_t count)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetSharedPart
      Src: /src/brpc/src/brpc/socket.cpp:2989,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2994
      start: 2988
    functionDepth: 0
    functionLinenumber: 2988
    functionLinenumberEnd: 2994
    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:2997,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.cpp:2998,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/socket.cpp:2999,1
    - Dst: Socket::ReturnToPool
      Src: /src/brpc/src/brpc/socket.cpp:3002,1
    - Dst: Socket::SetFailed
      Src: /src/brpc/src/brpc/socket.cpp:3004,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3007
      start: 2996
    functionDepth: 3
    functionLinenumber: 2996
    functionLinenumberEnd: 3007
    functionName: Socket::OnProgressiveReadCompleted
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - Socket::SetFailed
    - load
    - Socket::ReturnToPool
    - is_read_progressive
    - 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: 3011
      start: 3009
    functionDepth: 0
    functionLinenumber: 3009
    functionLinenumberEnd: 3011
    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:3015,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3017
      start: 3013
    functionDepth: 0
    functionLinenumber: 3013
    functionLinenumberEnd: 3017
    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:3025,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:3026,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:3030,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:3031,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' sock'
    argTypes:
    - ostream
    - brpc::Socket
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3037
      start: 3023
    functionDepth: 0
    functionLinenumber: 3023
    functionLinenumberEnd: 3037
    functionName: '& operator<<(ostream& os, const brpc::Socket& sock)'
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - local_side
    - id
    - remote_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:3025,1
    - Dst: fd
      Src: /src/brpc/src/brpc/socket.cpp:3026,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/socket.cpp:3030,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/socket.cpp:3031,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' os'
    - ' sock'
    argTypes:
    - ostream
    - brpc::Socket
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3037
      start: 3023
    functionDepth: 0
    functionLinenumber: 3023
    functionLinenumberEnd: 3037
    functionName: '& operator<<(ostream& os, const brpc::Socket& sock)'
    functionSourceFile: /src/brpc/src/brpc/socket.cpp
    functionUses: 0
    functionsReached:
    - local_side
    - id
    - remote_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:
    - sputc
    - sputn
    - size
    - 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:
    - sputc
    - sputn
    - size
    - 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::SharedCtor
    - brpc::SerializedRequest::MergeFrom
    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::SharedCtor
    - brpc::SerializedRequest::MergeFrom
    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: 0
    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: 0
    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:
    - remove_last_char
    - std::string::append
    - butil::StringPiece::data
    - std::string::push_back
    - butil::StringPiece::size
    - empty
    - std::string::reserve
    - size
    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::StringPiece::remove_prefix
    - butil::StringSplitter::field
    - RestfulMethodPath*::postfix::push_back
    - LOG
    - RestfulMethodPath*::service_name::assign
    - RestfulMethodPath*::postfix::append
    - brpc::is_url_char
    - RestfulMethodPath*::prefix::push_back
    - RestfulMethodPath*::prefix::append
    - butil::StringPiece::substr
    - RestfulMethodPath*::prefix::empty
    - brpc::DebugPrinter
    - RestfulMethodPath*::postfix::clear
    - RestfulMethodPath*::postfix::empty
    - butil::StringPiece::trim_spaces
    - RestfulMethodPath*::postfix::reserve
    - RestfulMethodPath*::service_name::clear
    - butil::StringPiece::size
    - butil::StringPiece::data
    - VLOG
    - RestfulMethodPath*::prefix::reserve
    - RestfulMethodPath*::prefix::clear
    - butil::StringSplitter::length
    - butil::StringPiece::empty
    - butil::StringPiece::back
    - butil::StringPiece::find
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::empty
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - LOG
    - brpc::size
    - std::vector<RestfulMapping>*::clear
    - butil::StringPiece::size
    - butil::BasicStringPiece::BasicStringPiece
    - data
    - std::vector<RestfulMapping>*::reserve
    - brpc::ParseRestfulPath
    - RestfulMapping::method_name::assign
    - std::vector<RestfulMapping>*::push_back
    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:
    - find
    - DedupMap::const_iterator::second::method::full_name
    - end
    - LOG
    - to_string
    - google::protobuf::MethodDescriptor*::full_name
    - google::protobuf::Service*::GetDescriptor
    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:
    - clear
    - begin
    - end
    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:
    - postfix::rend
    - prefix::compare
    - std::lexicographical_compare
    - 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:
    - begin
    - reserve
    - end
    - clear
    - CompareItemInPathList
    - brpc::RestfulMap::size
    - VLOG_IS_ON
    - VLOG
    - std::ostringstream::str
    - std::sort
    - push_back
    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: 0
    functionLinenumber: 359
    functionLinenumberEnd: 372
    functionName: brpc::RemoveLastComponent
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::empty
    - butil::StringPiece*::rfind
    - butil::StringPiece*::remove_suffix
    - butil::StringPiece*::back
    - butil::StringPiece*::size
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string::append
    - std::string::push_back
    - brpc::size
    - data
    - std::string::reserve
    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:
    - clear
    - erase
    - empty
    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:
    - butil::StringPiece::remove_prefix
    - PrefixLess
    - butil::StringPiece::ends_with
    - std::string*::clear
    - LOG
    - std::string*::assign
    - empty
    - postfix::size
    - butil::StringPiece::remove_suffix
    - begin
    - butil::StringPiece::starts_with
    - RemoveLastComponent
    - DebugPrinter
    - VLOG
    - butil::StringPiece::data
    - butil::StringPiece::size
    - prefix::size
    - end
    - butil::StringPiece::empty
    - std::upper_bound
    - NormalizeSlashes
    - 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: 0
    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: 0
    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:
    - remove_last_char
    - std::string::append
    - butil::StringPiece::data
    - std::string::push_back
    - butil::StringPiece::size
    - empty
    - std::string::reserve
    - size
    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::StringPiece::remove_prefix
    - butil::StringSplitter::field
    - RestfulMethodPath*::postfix::push_back
    - LOG
    - RestfulMethodPath*::service_name::assign
    - RestfulMethodPath*::postfix::append
    - brpc::is_url_char
    - RestfulMethodPath*::prefix::push_back
    - RestfulMethodPath*::prefix::append
    - butil::StringPiece::substr
    - RestfulMethodPath*::prefix::empty
    - brpc::DebugPrinter
    - RestfulMethodPath*::postfix::clear
    - RestfulMethodPath*::postfix::empty
    - butil::StringPiece::trim_spaces
    - RestfulMethodPath*::postfix::reserve
    - RestfulMethodPath*::service_name::clear
    - butil::StringPiece::size
    - butil::StringPiece::data
    - VLOG
    - RestfulMethodPath*::prefix::reserve
    - RestfulMethodPath*::prefix::clear
    - butil::StringSplitter::length
    - butil::StringPiece::empty
    - butil::StringPiece::back
    - butil::StringPiece::find
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::empty
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - LOG
    - brpc::size
    - std::vector<RestfulMapping>*::clear
    - butil::StringPiece::size
    - butil::BasicStringPiece::BasicStringPiece
    - data
    - std::vector<RestfulMapping>*::reserve
    - brpc::ParseRestfulPath
    - RestfulMapping::method_name::assign
    - std::vector<RestfulMapping>*::push_back
    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:
    - find
    - DedupMap::const_iterator::second::method::full_name
    - end
    - LOG
    - to_string
    - google::protobuf::MethodDescriptor*::full_name
    - google::protobuf::Service*::GetDescriptor
    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:
    - clear
    - begin
    - end
    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:
    - postfix::rend
    - prefix::compare
    - std::lexicographical_compare
    - 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:
    - begin
    - reserve
    - end
    - clear
    - CompareItemInPathList
    - brpc::RestfulMap::size
    - VLOG_IS_ON
    - VLOG
    - std::ostringstream::str
    - std::sort
    - push_back
    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: 0
    functionLinenumber: 359
    functionLinenumberEnd: 372
    functionName: brpc::RemoveLastComponent
    functionSourceFile: /src/brpc/src/brpc/restful.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::empty
    - butil::StringPiece*::rfind
    - butil::StringPiece*::remove_suffix
    - butil::StringPiece*::back
    - butil::StringPiece*::size
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string::append
    - std::string::push_back
    - brpc::size
    - data
    - std::string::reserve
    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:
    - clear
    - erase
    - empty
    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:
    - butil::StringPiece::remove_prefix
    - PrefixLess
    - butil::StringPiece::ends_with
    - std::string*::clear
    - LOG
    - std::string*::assign
    - empty
    - postfix::size
    - butil::StringPiece::remove_suffix
    - begin
    - butil::StringPiece::starts_with
    - RemoveLastComponent
    - DebugPrinter
    - VLOG
    - butil::StringPiece::data
    - butil::StringPiece::size
    - prefix::size
    - end
    - butil::StringPiece::empty
    - std::upper_bound
    - NormalizeSlashes
    - 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
    - BAIDU_SCOPED_LOCK
    - LOG
    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:
    - exit
    - brpc::Extension<T>::Register
    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:
    - begin
    - typename butil::CaseIgnoredFlatMap<T*>::iterator::first::data
    - BAIDU_SCOPED_LOCK
    - end
    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
    - BAIDU_SCOPED_LOCK
    - LOG
    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:
    - exit
    - brpc::Extension<T>::Register
    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:
    - begin
    - typename butil::CaseIgnoredFlatMap<T*>::iterator::first::data
    - BAIDU_SCOPED_LOCK
    - end
    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:87,1
    - Dst: std::setw
      Src: /src/brpc/src/brpc/server.cpp:88,1
    - Dst: std::setfill
      Src: /src/brpc/src/brpc/server.cpp:88,1
    - Dst: fill
      Src: /src/brpc/src/brpc/server.cpp:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - ' os'
    - ' tm'
    argTypes:
    - std::ostream
    - timeval
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 91
    functionName: '& operator<<(std::ostream& os, const timeval& tm)'
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::setw
    - std::setfill
    - fill
    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: 114
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 114
    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: 162
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 162
    functionName: brpc::ServerOptions::ServerOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerOptions::ServerOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/server.cpp:166,1
    - Dst: ServerSSLOptions::ServerSSLOptions
      Src: /src/brpc/src/brpc/server.cpp:166,1
    - Dst: get
      Src: /src/brpc/src/brpc/server.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::ServerOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 8
    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: 177
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 177
    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: 187
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 187
    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:190,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::GetUptime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - butil::microseconds_to_timeval
    - butil::cpuwide_time_us
    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:195,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/server.cpp:198,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/server.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 201
    functionName: brpc::PrintStartTime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - localtime_r
    - static_cast<Server*>
    - strftime
    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:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 205
    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:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 209
    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:213,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 211
    functionDepth: 2
    functionLinenumber: 211
    functionLinenumberEnd: 220
    functionName: brpc::PrintSupportedProtocols
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListProtocols
    linkageType: ''
    returnType: void
    signature: void PrintSupportedProtocols(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListCompressHandler
      Src: /src/brpc/src/brpc/server.cpp:224,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:225,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 231
    functionName: brpc::PrintSupportedCompressions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListCompressHandler
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void PrintSupportedCompressions(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListChecksumHandler
      Src: /src/brpc/src/brpc/server.cpp:235,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 242
    functionName: brpc::PrintSupportedChecksums
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListChecksumHandler
    linkageType: ''
    returnType: void
    signature: void PrintSupportedChecksums(std::ostream& os, void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/server.cpp:248,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/server.cpp:249,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 256
    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:278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    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:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 286
    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:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 292
    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:295,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 294
    functionDepth: 2
    functionLinenumber: 294
    functionLinenumberEnd: 301
    functionName: brpc::GetSessionLocalDataCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    - bvar::Vector::Vector
    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:304,1
    - Dst: static_cast<int*>
      Src: /src/brpc/src/brpc/server.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 305
    functionName: brpc::cast_no_barrier_int
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_Load
    - static_cast<int*>
    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:308,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/server.cpp:309,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/src/brpc/server.cpp:309,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/server.cpp:311,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 313
    functionName: brpc::Server::ServerPrefix
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::listen_address
    - std::string
    - server_info_name::empty
    - butil::string_printf
    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:316,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:318,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/server.cpp:319,1
    - Dst: Server*::_nerror_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:323,1
    - Dst: Server*::_eps_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:325,1
    - Dst: Server*::_concurrency_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:327,1
    - Dst: Server*::session_local_data_pool
      Src: /src/brpc/src/brpc/server.cpp:346,1
    - Dst: bvar::PassiveStatus::expose_as
      Src: /src/brpc/src/brpc/server.cpp:347,1
    - Dst: bvar::PassiveStatus::set_vector_names
      Src: /src/brpc/src/brpc/server.cpp:348,1
    - Dst: Server*::_method_map::begin
      Src: /src/brpc/src/brpc/server.cpp:352,1
    - Dst: Server*::_method_map::end
      Src: /src/brpc/src/brpc/server.cpp:353,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:357,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/brpc/server.cpp:358,1
    - Dst: MethodMap::iterator::second::method::full_name
      Src: /src/brpc/src/brpc/server.cpp:358,1
    - Dst: MethodMap::iterator::second::status::Expose
      Src: /src/brpc/src/brpc/server.cpp:359,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:362,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:363,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:363,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:365,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:366,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:366,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:370,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:371,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:371,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:375,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:378,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:382,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:386,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/server.cpp:387,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:391,1
    - Dst: Server*::_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:395,1
    - Dst: Server*::_internal_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:398,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/server.cpp:400,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:401,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:403,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:404,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:407,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:409,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:410,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 315
    functionDepth: 3
    functionLinenumber: 315
    functionLinenumberEnd: 414
    functionName: brpc::Server::UpdateDerivedVars
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::_internal_am::ListConnections
    - SocketUniquePtr::UpdateStatsEverySecond
    - MethodMap::iterator::second::method::full_name
    - LOG
    - std::vector::size
    - Server*::options
    - static_cast<Server*>
    - Server*::_nerror_bvar::expose_as
    - Server*::session_local_data_pool
    - Server*::_concurrency_bvar::expose_as
    - std::string::push_back
    - Server*::_method_map::begin
    - bvar::PassiveStatus::expose_as
    - MethodMap::iterator::second::status::Expose
    - PLOG_IF
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - Server*::_method_map::end
    - Server*::_eps_bvar::expose_as
    - std::string::resize
    - bvar::PassiveStatus::set_vector_names
    - bvar::to_underscored_name
    - Server*::ServerPrefix
    - bthread_usleep
    - butil::cpuwide_time_ms
    - Expose
    - Server*::_am::ListConnections
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void * Server::UpdateDerivedVars(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:418,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:418,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/server.cpp:420,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 424
    functionName: Server::ServiceProperty::service_name() const
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - GetDescriptor
    - butil::EnsureString
    - service_name
    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:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 426
    functionDepth: 1
    functionLinenumber: 426
    functionLinenumberEnd: 447
    functionName: brpc::Server::Server
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 159
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void Server::Server(ProfilerLinker)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/server.cpp:450,1
    - Dst: Join
      Src: /src/brpc/src/brpc/server.cpp:451,1
    - Dst: ClearServices
      Src: /src/brpc/src/brpc/server.cpp:452,1
    - Dst: Server::FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:453,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:485,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:486,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:486,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 499
    functionName: Server::~Server()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - pid_file::c_str
    - Join
    - Server::FreeSSLContexts
    - ClearServices
    - unlink
    - Stop
    - pid_file::empty
    linkageType: ''
    returnType: void
    signature: void Server::~Server()
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:503,1
    - Dst: StatusService::StatusService
      Src: /src/brpc/src/brpc/server.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:504,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:507,1
    - Dst: VarsService::VarsService
      Src: /src/brpc/src/brpc/server.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:508,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:511,1
    - Dst: ConnectionsService::ConnectionsService
      Src: /src/brpc/src/brpc/server.cpp:511,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:512,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:515,1
    - Dst: FlagsService::FlagsService
      Src: /src/brpc/src/brpc/server.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:516,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:519,1
    - Dst: RpczService::RpczService
      Src: /src/brpc/src/brpc/server.cpp:519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:520,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:523,1
    - Dst: HotspotsService::HotspotsService
      Src: /src/brpc/src/brpc/server.cpp:523,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:524,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:527,1
    - Dst: IndexService::IndexService
      Src: /src/brpc/src/brpc/server.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:528,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:533,1
    - Dst: VersionService::VersionService
      Src: /src/brpc/src/brpc/server.cpp:533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:534,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:537,1
    - Dst: HealthService::HealthService
      Src: /src/brpc/src/brpc/server.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:538,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:541,1
    - Dst: ProtobufsService::ProtobufsService
      Src: /src/brpc/src/brpc/server.cpp:541,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:542,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:545,1
    - Dst: BadMethodService::BadMethodService
      Src: /src/brpc/src/brpc/server.cpp:545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:546,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:549,1
    - Dst: ListService::ListService
      Src: /src/brpc/src/brpc/server.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:550,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:553,1
    - Dst: PrometheusMetricsService::PrometheusMetricsService
      Src: /src/brpc/src/brpc/server.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:554,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:558,1
    - Dst: ThreadsService::ThreadsService
      Src: /src/brpc/src/brpc/server.cpp:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:559,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:562,1
    - Dst: MemoryService::MemoryService
      Src: /src/brpc/src/brpc/server.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:563,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:568,1
    - Dst: VLogService::VLogService
      Src: /src/brpc/src/brpc/server.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:569,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:574,1
    - Dst: PProfService::PProfService
      Src: /src/brpc/src/brpc/server.cpp:574,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:575,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:579,1
    - Dst: DirService::DirService
      Src: /src/brpc/src/brpc/server.cpp:579,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:580,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:583,1
    - Dst: BthreadsService::BthreadsService
      Src: /src/brpc/src/brpc/server.cpp:583,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:584,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:587,1
    - Dst: IdsService::IdsService
      Src: /src/brpc/src/brpc/server.cpp:587,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:588,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:591,1
    - Dst: SocketsService::SocketsService
      Src: /src/brpc/src/brpc/server.cpp:591,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:592,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:595,1
    - Dst: GetFaviconService::GetFaviconService
      Src: /src/brpc/src/brpc/server.cpp:595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:596,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:599,1
    - Dst: GetJsService::GetJsService
      Src: /src/brpc/src/brpc/server.cpp:599,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:600,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:603,1
    - Dst: GrpcHealthCheckService::GrpcHealthCheckService
      Src: /src/brpc/src/brpc/server.cpp:603,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:604,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 98
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 501
    functionDepth: 1
    functionLinenumber: 501
    functionLinenumberEnd: 608
    functionName: brpc::Server::AddBuiltinServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - BthreadsService::BthreadsService
    - LOG
    - VLogService::VLogService
    - ProtobufsService::ProtobufsService
    - HotspotsService::HotspotsService
    - HealthService::HealthService
    - ListService::ListService
    - IndexService::IndexService
    - IdsService::IdsService
    - VersionService::VersionService
    - GetJsService::GetJsService
    - StatusService::StatusService
    - MemoryService::MemoryService
    - GrpcHealthCheckService::GrpcHealthCheckService
    - VarsService::VarsService
    - PrometheusMetricsService::PrometheusMetricsService
    - brpc::Server::AddBuiltinService
    - FlagsService::FlagsService
    - GetFaviconService::GetFaviconService
    - BadMethodService::BadMethodService
    - DirService::DirService
    - SocketsService::SocketsService
    - PProfService::PProfService
    - ConnectionsService::ConnectionsService
    - RpczService::RpczService
    - ThreadsService::ThreadsService
    linkageType: ''
    returnType: int
    signature: int Server::AddBuiltinServices()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:614,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:614,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 615
    functionName: brpc::is_http_protocol
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE is_http_protocol(const char* name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:618,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: brpc::is_rdma_handshake_protocol
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE is_rdma_handshake_protocol(const char* name)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: enabled_protocols::c_str
      Src: /src/brpc/src/brpc/server.cpp:623,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:625,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:625,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/server.cpp:626,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:628,1
    - Dst: Acceptor::Acceptor
      Src: /src/brpc/src/brpc/server.cpp:629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:631,1
    - Dst: ListProtocols
      Src: /src/brpc/src/brpc/server.cpp:636,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:637,1
    - Dst: is_http_protocol
      Src: /src/brpc/src/brpc/server.cpp:643,1
    - Dst: is_rdma_handshake_protocol
      Src: /src/brpc/src/brpc/server.cpp:644,1
    - Dst: std::set::erase
      Src: /src/brpc/src/brpc/server.cpp:645,1
    - Dst: Acceptor*::AddHandler
      Src: /src/brpc/src/brpc/server.cpp:656,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:657,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:663,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/server.cpp:666,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/server.cpp:667,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:672,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:672,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 676
    functionName: brpc::Server::BuildAcceptor
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::set::empty
    - std::set::erase
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - Acceptor::Acceptor
    - std::set::insert
    - LOG
    - is_http_protocol
    - Acceptor*::AddHandler
    - std::ostringstream::str
    - std::set::begin
    - std::vector::size
    - ListProtocols
    - enabled_protocols::c_str
    - std::set::end
    - is_rdma_handshake_protocol
    linkageType: ''
    returnType: Acceptor
    signature: Acceptor * Server::BuildAcceptor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/server.cpp:682,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 689
    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:693,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:699,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:700,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:700,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:701,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/server.cpp:705,1
    - Dst: Protocol*::support_server
      Src: /src/brpc/src/brpc/server.cpp:706,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:707,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:710,1
    - Dst: ALPNProtocolToString
      Src: /src/brpc/src/brpc/server.cpp:710,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/server.cpp:712,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - options
    argTypes:
    - ServerSSLOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 691
    functionDepth: 1
    functionLinenumber: 691
    functionLinenumberEnd: 714
    functionName: brpc::Server::InitALPNOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - Protocol*::support_server
    - std::move
    - std::string::append
    - LOG
    - ALPNProtocolToString
    - data
    - FindProtocol
    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:717,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 716
    functionDepth: 0
    functionLinenumber: 716
    functionLinenumberEnd: 718
    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:720,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - void_factory
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 719
    functionDepth: 0
    functionLinenumber: 719
    functionLinenumberEnd: 721
    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:734,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 732
    functionDepth: 2
    functionLinenumber: 732
    functionLinenumberEnd: 740
    functionName: brpc::BthreadInitEntry
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - BthreadInitArgs*::bthread_init_fn
    linkageType: ''
    returnType: void
    signature: void * BthreadInitEntry(void* void_args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::Stop
      Src: /src/brpc/src/brpc/server.cpp:745,1
    - Dst: Server*::Join
      Src: /src/brpc/src/brpc/server.cpp:746,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 743
    functionDepth: 0
    functionLinenumber: 743
    functionLinenumberEnd: 748
    functionName: operator()(Server* s) const
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::Stop
    - Server*::Join
    linkageType: ''
    returnType: void
    signature: void operator()(Server* s) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getsockname
      Src: /src/brpc/src/brpc/server.cpp:754,1
    - Dst: ntohs
      Src: /src/brpc/src/brpc/server.cpp:757,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 751
    functionDepth: 0
    functionLinenumber: 751
    functionLinenumberEnd: 758
    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:762,1
    - Dst: AdaptiveMaxConcurrency::UNLIMITED
      Src: /src/brpc/src/brpc/server.cpp:762,1
    - Dst: ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/server.cpp:767,1
    - Dst: type
      Src: /src/brpc/src/brpc/server.cpp:767,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:769,1
    - Dst: value
      Src: /src/brpc/src/brpc/server.cpp:769,1
    - Dst: ConcurrencyLimiter*::New
      Src: /src/brpc/src/brpc/server.cpp:772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:774,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' amc'
    - out
    argTypes:
    - AdaptiveMaxConcurrency
    - ConcurrencyLimiter**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 760
    functionDepth: 1
    functionLinenumber: 760
    functionLinenumberEnd: 779
    functionName: brpc::Server::CreateConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - ConcurrencyLimiter*::New
    - LOG
    - AdaptiveMaxConcurrency::UNLIMITED
    - value
    - ConcurrencyLimiterExtension
    - type
    linkageType: ''
    returnType: bool
    signature: "bool Server::CreateConcurrencyLimiter(const AdaptiveMaxConcurrency&
      amc,\n                                      ConcurrencyLimiter** out)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:794,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:797,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:800,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:801,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:802,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:804,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:805,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:805,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:809,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:813,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:816,1
    - Dst: DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/src/brpc/server.cpp:827,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' dst'
    - ' src'
    argTypes:
    - ServerOptions
    - ServerOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 785
    functionDepth: 1
    functionLinenumber: 785
    functionLinenumberEnd: 829
    functionName: brpc::copy_and_fill_server_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - pid_file::c_str
    - unlink
    - pid_file::empty
    - FREE_PTR_IF_NOT_REUSED
    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: 792
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 792
    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: 65
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:843,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:847,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:848,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:848,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:851,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:854,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:854,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:857,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:857,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:858,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:858,1
    - Dst: h2_settings::IsValid
      Src: /src/brpc/src/brpc/server.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:875,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:881,1
    - Dst: brpc::TransportFactory::ContextInitOrDie
      Src: /src/brpc/src/brpc/server.cpp:886,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:888,1
    - Dst: copy_and_fill_server_options
      Src: /src/brpc/src/brpc/server.cpp:892,1
    - Dst: http_master_service::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:898,1
    - Dst: google::protobuf::ServiceDescriptor*::FindMethodByName
      Src: /src/brpc/src/brpc/server.cpp:900,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:902,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:905,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:906,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:907,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:911,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:912,1
    - Dst: SimpleDataPool::SimpleDataPool
      Src: /src/brpc/src/brpc/server.cpp:924,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:926,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:930,1
    - Dst: Reserve
      Src: /src/brpc/src/brpc/server.cpp:932,1
    - Dst: bthread_keytable_pool_t::bthread_keytable_pool_t
      Src: /src/brpc/src/brpc/server.cpp:942,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/src/brpc/server.cpp:943,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:944,1
    - Dst: bthread_key_create2
      Src: /src/brpc/src/brpc/server.cpp:953,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:955,1
    - Dst: bthread_keytable_pool_reserve
      Src: /src/brpc/src/brpc/server.cpp:959,1
    - Dst: brpc::Server::ThreadLocalOptions
      Src: /src/brpc/src/brpc/server.cpp:966,1
    - Dst: BthreadInitArgs::BthreadInitArgs
      Src: /src/brpc/src/brpc/server.cpp:974,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:985,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:993,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1001,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1011,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1016,1
    - Dst: FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:1022,1
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1023,1
    - Dst: brpc::Server::InitALPNOptions
      Src: /src/brpc/src/brpc/server.cpp:1027,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1027,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1030,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/server.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1032,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1035,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1038,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1040,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1041,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1047,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/src/brpc/server.cpp:1056,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1057,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1064,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1070,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1071,1
    - Dst: ServiceMap::const_iterator::second::restful_map::PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1073,1
    - Dst: PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1077,1
    - Dst: bthread_setconcurrency_by_tag
      Src: /src/brpc/src/brpc/server.cpp:1087,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1090,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1091,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1093,1
    - Dst: AdaptiveMaxConcurrency*::type
      Src: /src/brpc/src/brpc/server.cpp:1096,1
    - Dst: AdaptiveMaxConcurrency::UNLIMITED
      Src: /src/brpc/src/brpc/server.cpp:1096,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1101,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1104,1
    - Dst: MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1105,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1108,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1112,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1120,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1143,1
    - Dst: get_port_from_fd
      Src: /src/brpc/src/brpc/server.cpp:1150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1152,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1157,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1159,1
    - Dst: time
      Src: /src/brpc/src/brpc/server.cpp:1168,1
    - Dst: brpc::Server::GenerateVersionIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1169,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/server.cpp:1170,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1173,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1176,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1189,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1204,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1210,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1215,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1218,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1221,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1224,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1227,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/server.cpp:1230,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1233,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1240,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1240,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1252,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:1252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1255,1
    - Dst: butil::my_hostname
      Src: /src/brpc/src/brpc/server.cpp:1255,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1258,1
    - Dst: SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:1262,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1262,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/server.cpp:1262,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/server.cpp:1264,1
    CyclomaticComplexity: 86
    EdgeCount: 86
    ICount: 298
    argCount: 3
    argNames:
    - ' endpoint'
    - ' port_range'
    - opt
    argTypes:
    - butil::EndPoint
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1266
      start: 831
    functionDepth: 4
    functionLinenumber: 831
    functionLinenumberEnd: 1266
    functionName: brpc::Server::StartInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bthread_join
    - SimpleDataPool::SimpleDataPool
    - bthread_keytable_pool_reserve
    - std::unique_ptr::release
    - copy_and_fill_server_options
    - LOG
    - bthread_attr_set_name
    - SetTrackMeAddress
    - FreeSSLContexts
    - CHECK_EQ
    - butil::is_endpoint_extended
    - AddCertificate
    - brpc::Server::ThreadLocalOptions
    - begin
    - version
    - google::protobuf::MethodDescriptor*::output_type
    - h2_settings::IsValid
    - http_master_service::GetDescriptor
    - bthread_keytable_pool_t::bthread_keytable_pool_t
    - bthread_start_background
    - google::protobuf::ServiceDescriptor*::FindMethodByName
    - size
    - google::protobuf::MethodDescriptor*::input_type
    - bthread_key_create2
    - butil::EndPoint
    - fetch_add
    - butil::my_ip
    - bthread_setconcurrency_by_tag
    - AdaptiveMaxConcurrency::UNLIMITED
    - brpc::Server::InitALPNOptions
    - AdaptiveMaxConcurrency*::type
    - PrepareForFinding
    - bthread_keytable_pool_init
    - brpc::Server::GenerateVersionIfNeeded
    - MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
    - brpc::Server::InitializeOnce
    - std::ostringstream::str
    - brpc::Server::SetServiceMaxConcurrency
    - status_str
    - time
    - brpc::Server::PutPidFileIfNeeded
    - brpc::Server::AddBuiltinServices
    - certificate::empty
    - BthreadInitArgs::BthreadInitArgs
    - bthread_usleep
    - brpc::Server::status
    - end
    - brpc::Server::CreateConcurrencyLimiter
    - brpc::Server::BuildAcceptor
    - butil::fd_guard::release
    - butil::my_hostname
    - Reserve
    - get_port_from_fd
    - has_ssl_options
    - mutable_ssl_options
    - ServiceMap::const_iterator::second::restful_map::PrepareForFinding
    - StartAccept
    - MethodMap::iterator::second::status::SetConcurrencyLimiter
    - brpc::TransportFactory::ContextInitOrDie
    - Reset
    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:1269,1
    - Dst: PortRange
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' endpoint'
    - opt
    argTypes:
    - butil::EndPoint
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1268
    functionDepth: 5
    functionLinenumber: 1268
    functionLinenumberEnd: 1271
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 155
    functionsReached:
    - brpc::Server::StartInternal
    - PortRange
    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:1274,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1275,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1276,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1277,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1280,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ip_port_str
    - opt
    argTypes:
    - char*
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1281
      start: 1273
    functionDepth: 1
    functionLinenumber: 1273
    functionLinenumberEnd: 1281
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 156
    functionsReached:
    - brpc::Server::Start
    - hostname2endpoint
    - LOG
    - butil::EndPoint::EndPoint
    - str2endpoint
    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:1285,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1288,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1288,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - port
    - opt
    argTypes:
    - int
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1283
    functionDepth: 1
    functionLinenumber: 1283
    functionLinenumberEnd: 1289
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 157
    functionsReached:
    - butil::EndPoint
    - LOG
    - brpc::Server::Start
    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:1294,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/server.cpp:1295,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1296,1
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1299,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ip_str
    - port_range
    - opt
    argTypes:
    - char*
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1300
      start: 1291
    functionDepth: 5
    functionLinenumber: 1291
    functionLinenumberEnd: 1300
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 157
    functionsReached:
    - butil::EndPoint
    - butil::str2ip
    - LOG
    - brpc::Server::StartInternal
    - 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:1303,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - port_range
    - opt
    argTypes:
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1304
      start: 1302
    functionDepth: 5
    functionLinenumber: 1302
    functionLinenumberEnd: 1304
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 157
    functionsReached:
    - butil::EndPoint
    - brpc::Server::StartInternal
    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:1312,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1312,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1315,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1322
      start: 1306
    functionDepth: 1
    functionLinenumber: 1306
    functionLinenumberEnd: 1322
    functionName: brpc::Server::Stop
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 60
    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:1330,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/src/brpc/server.cpp:1333,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:1339,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1347,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/src/brpc/server.cpp:1347,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1357,1
    - Dst: bthread_key_delete
      Src: /src/brpc/src/brpc/server.cpp:1357,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/server.cpp:1365,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1366,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/server.cpp:1370,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1373
      start: 1325
    functionDepth: 3
    functionLinenumber: 1325
    functionLinenumberEnd: 1373
    functionName: brpc::Server::Join
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 61
    functionsReached:
    - bthread_join
    - fetch_sub
    - CHECK_EQ
    - brpc::Server::Join
    - bthread_stop
    - bthread_keytable_pool_destroy
    - bthread_key_delete
    - Reset
    linkageType: ''
    returnType: int
    signature: int Server::Join()
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1379,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1382,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1383,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1384,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1384,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:1389,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1390,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1390,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1393,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1394,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1394,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1395,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1395,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1395,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1399,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1400,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1400,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1406,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1407,1
    - Dst: ServiceProperty*::service_name
      Src: /src/brpc/src/brpc/server.cpp:1408,1
    - Dst: google::protobuf::ServiceDescriptor*::file
      Src: /src/brpc/src/brpc/server.cpp:1413,1
    - Dst: dynamic_cast<Tabbed*>
      Src: /src/brpc/src/brpc/server.cpp:1415,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1416,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:1417,1
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/server.cpp:1432,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1433,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1433,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1434,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1434,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1441,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1441,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:1442,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1443,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1443,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1444,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1447,1
    - Dst: brpc::Server::RemoveMethodsOf
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1456,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1456,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1457,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1457,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:1467,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/server.cpp:1468,1
    - Dst: ParseRestfulMappings
      Src: /src/brpc/src/brpc/server.cpp:1471,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1472,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1473,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/server.cpp:1476,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1478,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1479,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:1497,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1499,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1499,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1502,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1503,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1508,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1510,1
    - Dst: AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1518,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1521,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1523,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1527,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1527,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1529,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1530,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1532,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1532,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1536,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1537,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1540,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1542,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1547,1
    - Dst: RestfulMap*::AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1557,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1559,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1560,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1565,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1569,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1569,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1571,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1572,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1574,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1574,1
    - Dst: TabInfoList::TabInfoList
      Src: /src/brpc/src/brpc/server.cpp:1588,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1590,1
    - Dst: Tabbed*::GetTabInfo
      Src: /src/brpc/src/brpc/server.cpp:1591,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1592,1
    - Dst: valid
      Src: /src/brpc/src/brpc/server.cpp:1595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1596,1
    - Dst: resize
      Src: /src/brpc/src/brpc/server.cpp:1598,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1599,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: 1605
      start: 1375
    functionDepth: 1
    functionLinenumber: 1375
    functionLinenumberEnd: 1605
    functionName: brpc::Server::AddServiceInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - butil::EnsureString
    - ServiceProperty*::service_name
    - Tabbed*::GetTabInfo
    - ParseRestfulMappings
    - std::string::append
    - LOG
    - std::vector::size
    - empty
    - TabInfoList::TabInfoList
    - resize
    - brpc::Server::RemoveService
    - version
    - path::to_string
    - RestfulMap::RestfulMap
    - std::string::push_back
    - MethodStatus::MethodStatus
    - google::protobuf::ServiceDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - size
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::ServiceDescriptor*::method_count
    - RestfulMap*::AddMethod
    - butil::StringPiece::trim_spaces
    - google::protobuf::ServiceDescriptor*::file
    - brpc::Server::InitializeOnce
    - google::protobuf::MethodDescriptor*::name
    - status_str
    - MethodProperty*::http_url::append
    - MethodProperty*::http_url::empty
    - valid
    - brpc::Server::RemoveMethodsOf
    - brpc::Server::status
    - butil::StringPiece::empty
    - AddMethod
    - dynamic_cast<Tabbed*>
    - google::protobuf::MethodDescriptor*::full_name
    - std::vector::empty
    - seek
    - std::string::reserve
    - std::string::string
    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: 1618
      start: 1607
    functionDepth: 0
    functionLinenumber: 1607
    functionLinenumberEnd: 1618
    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:1624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - service
    - ownership
    argTypes:
    - google::protobuf::Service*
    - ServiceOwnership
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1625
      start: 1620
    functionDepth: 2
    functionLinenumber: 1620
    functionLinenumberEnd: 1625
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 128
    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:1634,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1636,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: 1637
      start: 1627
    functionDepth: 2
    functionLinenumber: 1627
    functionLinenumberEnd: 1637
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 128
    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:1641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service
    - ' options'
    argTypes:
    - google::protobuf::Service*
    - ServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1639
    functionDepth: 2
    functionLinenumber: 1639
    functionLinenumberEnd: 1642
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 128
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       const
      ServiceOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1647,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1656
      start: 1644
    functionDepth: 2
    functionLinenumber: 1644
    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::field
    - RemoveByPathString
    - std::string::append
    - LOG
    - FindServicePropertyByName
    - MethodProperty*::http_url::c_str
    - butil::StringPiece::CopyToString
    - std::string::push_back
    - google::protobuf::ServiceDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - std::string::clear
    - google::protobuf::ServiceDescriptor*::method
    - ServiceProperty*::restful_map::RemoveByPathString
    - google::protobuf::ServiceDescriptor*::method_count
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - butil::StringPiece::size
    - google::protobuf::ServiceDescriptor*::file
    - erase
    - google::protobuf::MethodDescriptor*::name
    - butil::StringSplitter::length
    - google::protobuf::MethodDescriptor*::full_name
    - seek
    - std::string::reserve
    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: butil::EnsureString
      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*::full_name
    - version
    - brpc::Server::RemoveMethodsOf
    - butil::EnsureString
    - brpc::Server::status
    - LOG
    - erase
    - google::protobuf::ServiceDescriptor*::name
    - seek
    - google::protobuf::Service*::GetDescriptor
    - status_str
    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:
    - begin
    - version
    - brpc::Server::status
    - end
    - clear
    - 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::service_count
    - ConnectionCount
    - brpc::Server::builtin_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:
    - begin
    - std::vector<google::protobuf::Service*>*::reserve
    - std::vector<google::protobuf::Service*>*::push_back
    - end
    - ServiceMap::const_iterator::second::is_user_service
    - brpc::Server::service_count
    - std::vector<google::protobuf::Service*>*::clear
    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:
    - begin
    - reserve
    - end
    - butil::class_name_str
    - append
    - empty
    - ServiceMap::const_iterator::second::is_user_service
    - brpc::Server::service_count
    - push_back
    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:
    - std::string::c_str
    - PLOG
    - pid_file::clear
    - mkdir
    - pid_file::empty
    - pid_file::substr
    - pid_file::find
    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: 114
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 114
    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: 162
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 162
    functionName: brpc::ServerOptions::ServerOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 59
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ServerOptions::ServerOptions()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/server.cpp:166,1
    - Dst: ServerSSLOptions::ServerSSLOptions
      Src: /src/brpc/src/brpc/server.cpp:166,1
    - Dst: get
      Src: /src/brpc/src/brpc/server.cpp:168,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::ServerOptions::mutable_ssl_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 8
    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: 177
      start: 171
    functionDepth: 0
    functionLinenumber: 171
    functionLinenumberEnd: 177
    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: 187
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 187
    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:190,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:190,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 1
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::GetUptime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - butil::microseconds_to_timeval
    - butil::cpuwide_time_us
    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:195,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/server.cpp:198,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/server.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 201
    functionName: brpc::PrintStartTime
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - localtime_r
    - static_cast<Server*>
    - strftime
    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:204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 205
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 205
    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:208,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 209
    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:213,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:214,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 211
    functionDepth: 2
    functionLinenumber: 211
    functionLinenumberEnd: 220
    functionName: brpc::PrintSupportedProtocols
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListProtocols
    linkageType: ''
    returnType: void
    signature: void PrintSupportedProtocols(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListCompressHandler
      Src: /src/brpc/src/brpc/server.cpp:224,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:225,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 231
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 231
    functionName: brpc::PrintSupportedCompressions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::ListCompressHandler
    - std::vector::size
    linkageType: ''
    returnType: void
    signature: void PrintSupportedCompressions(std::ostream& os, void*)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ListChecksumHandler
      Src: /src/brpc/src/brpc/server.cpp:235,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 242
      start: 233
    functionDepth: 1
    functionLinenumber: 233
    functionLinenumberEnd: 242
    functionName: brpc::PrintSupportedChecksums
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListChecksumHandler
    linkageType: ''
    returnType: void
    signature: void PrintSupportedChecksums(std::ostream& os, void*)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: IsHeapProfilerEnabled
      Src: /src/brpc/src/brpc/server.cpp:248,1
    - Dst: has_TCMALLOC_SAMPLE_PARAMETER
      Src: /src/brpc/src/brpc/server.cpp:249,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 256
      start: 244
    functionDepth: 1
    functionLinenumber: 244
    functionLinenumberEnd: 256
    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:278,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 280
      start: 276
    functionDepth: 0
    functionLinenumber: 276
    functionLinenumberEnd: 280
    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:284,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 282
    functionDepth: 0
    functionLinenumber: 282
    functionLinenumberEnd: 286
    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:290,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 292
      start: 288
    functionDepth: 0
    functionLinenumber: 288
    functionLinenumberEnd: 292
    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:295,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:297,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 294
    functionDepth: 2
    functionLinenumber: 294
    functionLinenumberEnd: 301
    functionName: brpc::GetSessionLocalDataCount
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Server*>
    - bvar::Vector::Vector
    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:304,1
    - Dst: static_cast<int*>
      Src: /src/brpc/src/brpc/server.cpp:304,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 303
    functionDepth: 0
    functionLinenumber: 303
    functionLinenumberEnd: 305
    functionName: brpc::cast_no_barrier_int
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - butil::subtle::NoBarrier_Load
    - static_cast<int*>
    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:308,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/server.cpp:309,1
    - Dst: brpc::Server::listen_address
      Src: /src/brpc/src/brpc/server.cpp:309,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/server.cpp:311,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 307
    functionDepth: 1
    functionLinenumber: 307
    functionLinenumberEnd: 313
    functionName: brpc::Server::ServerPrefix
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - brpc::Server::listen_address
    - std::string
    - server_info_name::empty
    - butil::string_printf
    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:316,1
    - Dst: static_cast<Server*>
      Src: /src/brpc/src/brpc/server.cpp:318,1
    - Dst: Server*::ServerPrefix
      Src: /src/brpc/src/brpc/server.cpp:319,1
    - Dst: Server*::_nerror_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:323,1
    - Dst: Server*::_eps_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:325,1
    - Dst: Server*::_concurrency_bvar::expose_as
      Src: /src/brpc/src/brpc/server.cpp:327,1
    - Dst: Server*::session_local_data_pool
      Src: /src/brpc/src/brpc/server.cpp:346,1
    - Dst: bvar::PassiveStatus::expose_as
      Src: /src/brpc/src/brpc/server.cpp:347,1
    - Dst: bvar::PassiveStatus::set_vector_names
      Src: /src/brpc/src/brpc/server.cpp:348,1
    - Dst: Server*::_method_map::begin
      Src: /src/brpc/src/brpc/server.cpp:352,1
    - Dst: Server*::_method_map::end
      Src: /src/brpc/src/brpc/server.cpp:353,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/server.cpp:356,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:357,1
    - Dst: bvar::to_underscored_name
      Src: /src/brpc/src/brpc/server.cpp:358,1
    - Dst: MethodMap::iterator::second::method::full_name
      Src: /src/brpc/src/brpc/server.cpp:358,1
    - Dst: MethodMap::iterator::second::status::Expose
      Src: /src/brpc/src/brpc/server.cpp:359,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:362,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:363,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:363,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:365,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:366,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:366,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:370,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/server.cpp:371,1
    - Dst: Expose
      Src: /src/brpc/src/brpc/server.cpp:371,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:375,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:378,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:382,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:386,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/server.cpp:387,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/server.cpp:391,1
    - Dst: Server*::_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:395,1
    - Dst: Server*::_internal_am::ListConnections
      Src: /src/brpc/src/brpc/server.cpp:398,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/server.cpp:400,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:401,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:403,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:404,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:407,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:409,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/server.cpp:410,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 56
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 414
      start: 315
    functionDepth: 3
    functionLinenumber: 315
    functionLinenumberEnd: 414
    functionName: brpc::Server::UpdateDerivedVars
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::_internal_am::ListConnections
    - SocketUniquePtr::UpdateStatsEverySecond
    - MethodMap::iterator::second::method::full_name
    - LOG
    - std::vector::size
    - Server*::options
    - static_cast<Server*>
    - Server*::_nerror_bvar::expose_as
    - Server*::session_local_data_pool
    - Server*::_concurrency_bvar::expose_as
    - std::string::push_back
    - Server*::_method_map::begin
    - bvar::PassiveStatus::expose_as
    - MethodMap::iterator::second::status::Expose
    - PLOG_IF
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - Server*::_method_map::end
    - Server*::_eps_bvar::expose_as
    - std::string::resize
    - bvar::PassiveStatus::set_vector_names
    - bvar::to_underscored_name
    - Server*::ServerPrefix
    - bthread_usleep
    - butil::cpuwide_time_ms
    - Expose
    - Server*::_am::ListConnections
    - std::string::size
    linkageType: ''
    returnType: void
    signature: void * Server::UpdateDerivedVars(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:418,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:418,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/server.cpp:420,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 424
    functionName: Server::ServiceProperty::service_name() const
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - GetDescriptor
    - butil::EnsureString
    - service_name
    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:445,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 447
      start: 426
    functionDepth: 1
    functionLinenumber: 426
    functionLinenumberEnd: 447
    functionName: brpc::Server::Server
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 159
    functionsReached:
    - BAIDU_CASSERT
    linkageType: ''
    returnType: void
    signature: void Server::Server(ProfilerLinker)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/server.cpp:450,1
    - Dst: Join
      Src: /src/brpc/src/brpc/server.cpp:451,1
    - Dst: ClearServices
      Src: /src/brpc/src/brpc/server.cpp:452,1
    - Dst: Server::FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:453,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:485,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:486,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:486,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 38
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 449
    functionDepth: 1
    functionLinenumber: 449
    functionLinenumberEnd: 499
    functionName: Server::~Server()
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - pid_file::c_str
    - Join
    - Server::FreeSSLContexts
    - ClearServices
    - unlink
    - Stop
    - pid_file::empty
    linkageType: ''
    returnType: void
    signature: void Server::~Server()
  - BBCount: 25
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:503,1
    - Dst: StatusService::StatusService
      Src: /src/brpc/src/brpc/server.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:504,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:507,1
    - Dst: VarsService::VarsService
      Src: /src/brpc/src/brpc/server.cpp:507,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:508,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:511,1
    - Dst: ConnectionsService::ConnectionsService
      Src: /src/brpc/src/brpc/server.cpp:511,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:512,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:515,1
    - Dst: FlagsService::FlagsService
      Src: /src/brpc/src/brpc/server.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:516,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:519,1
    - Dst: RpczService::RpczService
      Src: /src/brpc/src/brpc/server.cpp:519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:520,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:523,1
    - Dst: HotspotsService::HotspotsService
      Src: /src/brpc/src/brpc/server.cpp:523,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:524,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:527,1
    - Dst: IndexService::IndexService
      Src: /src/brpc/src/brpc/server.cpp:527,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:528,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:533,1
    - Dst: VersionService::VersionService
      Src: /src/brpc/src/brpc/server.cpp:533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:534,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:537,1
    - Dst: HealthService::HealthService
      Src: /src/brpc/src/brpc/server.cpp:537,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:538,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:541,1
    - Dst: ProtobufsService::ProtobufsService
      Src: /src/brpc/src/brpc/server.cpp:541,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:542,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:545,1
    - Dst: BadMethodService::BadMethodService
      Src: /src/brpc/src/brpc/server.cpp:545,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:546,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:549,1
    - Dst: ListService::ListService
      Src: /src/brpc/src/brpc/server.cpp:549,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:550,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:553,1
    - Dst: PrometheusMetricsService::PrometheusMetricsService
      Src: /src/brpc/src/brpc/server.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:554,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:558,1
    - Dst: ThreadsService::ThreadsService
      Src: /src/brpc/src/brpc/server.cpp:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:559,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:562,1
    - Dst: MemoryService::MemoryService
      Src: /src/brpc/src/brpc/server.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:563,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:568,1
    - Dst: VLogService::VLogService
      Src: /src/brpc/src/brpc/server.cpp:568,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:569,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:574,1
    - Dst: PProfService::PProfService
      Src: /src/brpc/src/brpc/server.cpp:574,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:575,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:579,1
    - Dst: DirService::DirService
      Src: /src/brpc/src/brpc/server.cpp:579,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:580,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:583,1
    - Dst: BthreadsService::BthreadsService
      Src: /src/brpc/src/brpc/server.cpp:583,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:584,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:587,1
    - Dst: IdsService::IdsService
      Src: /src/brpc/src/brpc/server.cpp:587,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:588,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:591,1
    - Dst: SocketsService::SocketsService
      Src: /src/brpc/src/brpc/server.cpp:591,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:592,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:595,1
    - Dst: GetFaviconService::GetFaviconService
      Src: /src/brpc/src/brpc/server.cpp:595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:596,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:599,1
    - Dst: GetJsService::GetJsService
      Src: /src/brpc/src/brpc/server.cpp:599,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:600,1
    - Dst: brpc::Server::AddBuiltinService
      Src: /src/brpc/src/brpc/server.cpp:603,1
    - Dst: GrpcHealthCheckService::GrpcHealthCheckService
      Src: /src/brpc/src/brpc/server.cpp:603,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:604,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 98
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 608
      start: 501
    functionDepth: 3
    functionLinenumber: 501
    functionLinenumberEnd: 608
    functionName: brpc::Server::AddBuiltinServices
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - BthreadsService::BthreadsService
    - LOG
    - VLogService::VLogService
    - ProtobufsService::ProtobufsService
    - HotspotsService::HotspotsService
    - HealthService::HealthService
    - ListService::ListService
    - IndexService::IndexService
    - IdsService::IdsService
    - VersionService::VersionService
    - GetJsService::GetJsService
    - StatusService::StatusService
    - MemoryService::MemoryService
    - GrpcHealthCheckService::GrpcHealthCheckService
    - VarsService::VarsService
    - PrometheusMetricsService::PrometheusMetricsService
    - brpc::Server::AddBuiltinService
    - FlagsService::FlagsService
    - GetFaviconService::GetFaviconService
    - BadMethodService::BadMethodService
    - DirService::DirService
    - SocketsService::SocketsService
    - PProfService::PProfService
    - ConnectionsService::ConnectionsService
    - RpczService::RpczService
    - ThreadsService::ThreadsService
    linkageType: ''
    returnType: int
    signature: int Server::AddBuiltinServices()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:614,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:614,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 610
    functionDepth: 0
    functionLinenumber: 610
    functionLinenumberEnd: 615
    functionName: brpc::is_http_protocol
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE is_http_protocol(const char* name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/server.cpp:618,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 619
      start: 617
    functionDepth: 0
    functionLinenumber: 617
    functionLinenumberEnd: 619
    functionName: brpc::is_rdma_handshake_protocol
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    linkageType: ''
    returnType: BUTIL_FORCE_INLINE
    signature: BUTIL_FORCE_INLINE is_rdma_handshake_protocol(const char* name)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: enabled_protocols::c_str
      Src: /src/brpc/src/brpc/server.cpp:623,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:625,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:625,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/server.cpp:626,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:628,1
    - Dst: Acceptor::Acceptor
      Src: /src/brpc/src/brpc/server.cpp:629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:631,1
    - Dst: ListProtocols
      Src: /src/brpc/src/brpc/server.cpp:636,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:637,1
    - Dst: is_http_protocol
      Src: /src/brpc/src/brpc/server.cpp:643,1
    - Dst: is_rdma_handshake_protocol
      Src: /src/brpc/src/brpc/server.cpp:644,1
    - Dst: std::set::erase
      Src: /src/brpc/src/brpc/server.cpp:645,1
    - Dst: Acceptor*::AddHandler
      Src: /src/brpc/src/brpc/server.cpp:656,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:657,1
    - Dst: std::set::empty
      Src: /src/brpc/src/brpc/server.cpp:663,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/server.cpp:666,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/server.cpp:667,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:672,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:672,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 39
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 676
      start: 621
    functionDepth: 1
    functionLinenumber: 621
    functionLinenumberEnd: 676
    functionName: brpc::Server::BuildAcceptor
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - std::set::empty
    - std::set::erase
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - Acceptor::Acceptor
    - std::set::insert
    - LOG
    - is_http_protocol
    - Acceptor*::AddHandler
    - std::ostringstream::str
    - std::set::begin
    - std::vector::size
    - ListProtocols
    - enabled_protocols::c_str
    - std::set::end
    - is_rdma_handshake_protocol
    linkageType: ''
    returnType: Acceptor
    signature: Acceptor * Server::BuildAcceptor()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GlobalInitializeOrDie
      Src: /src/brpc/src/brpc/server.cpp:682,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 678
    functionDepth: 0
    functionLinenumber: 678
    functionLinenumberEnd: 689
    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:693,1
    - Dst: data
      Src: /src/brpc/src/brpc/server.cpp:699,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/server.cpp:700,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/server.cpp:700,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:701,1
    - Dst: FindProtocol
      Src: /src/brpc/src/brpc/server.cpp:705,1
    - Dst: Protocol*::support_server
      Src: /src/brpc/src/brpc/server.cpp:706,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:707,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:710,1
    - Dst: ALPNProtocolToString
      Src: /src/brpc/src/brpc/server.cpp:710,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/server.cpp:712,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 1
    argNames:
    - options
    argTypes:
    - ServerSSLOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 691
    functionDepth: 1
    functionLinenumber: 691
    functionLinenumberEnd: 714
    functionName: brpc::Server::InitALPNOptions
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 1
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - Protocol*::support_server
    - std::move
    - std::string::append
    - LOG
    - ALPNProtocolToString
    - data
    - FindProtocol
    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:717,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 718
      start: 716
    functionDepth: 0
    functionLinenumber: 716
    functionLinenumberEnd: 718
    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:720,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - data
    - void_factory
    argTypes:
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 721
      start: 719
    functionDepth: 0
    functionLinenumber: 719
    functionLinenumberEnd: 721
    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:734,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 732
    functionDepth: 2
    functionLinenumber: 732
    functionLinenumberEnd: 740
    functionName: brpc::BthreadInitEntry
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - bthread_usleep
    - BthreadInitArgs*::bthread_init_fn
    linkageType: ''
    returnType: void
    signature: void * BthreadInitEntry(void* void_args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Server*::Stop
      Src: /src/brpc/src/brpc/server.cpp:745,1
    - Dst: Server*::Join
      Src: /src/brpc/src/brpc/server.cpp:746,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - s
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 743
    functionDepth: 0
    functionLinenumber: 743
    functionLinenumberEnd: 748
    functionName: operator()(Server* s) const
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - Server*::Stop
    - Server*::Join
    linkageType: ''
    returnType: void
    signature: void operator()(Server* s) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: getsockname
      Src: /src/brpc/src/brpc/server.cpp:754,1
    - Dst: ntohs
      Src: /src/brpc/src/brpc/server.cpp:757,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 758
      start: 751
    functionDepth: 0
    functionLinenumber: 751
    functionLinenumberEnd: 758
    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:762,1
    - Dst: AdaptiveMaxConcurrency::UNLIMITED
      Src: /src/brpc/src/brpc/server.cpp:762,1
    - Dst: ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/server.cpp:767,1
    - Dst: type
      Src: /src/brpc/src/brpc/server.cpp:767,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:769,1
    - Dst: value
      Src: /src/brpc/src/brpc/server.cpp:769,1
    - Dst: ConcurrencyLimiter*::New
      Src: /src/brpc/src/brpc/server.cpp:772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:774,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' amc'
    - out
    argTypes:
    - AdaptiveMaxConcurrency
    - ConcurrencyLimiter**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 779
      start: 760
    functionDepth: 1
    functionLinenumber: 760
    functionLinenumberEnd: 779
    functionName: brpc::Server::CreateConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - ConcurrencyLimiter*::New
    - LOG
    - AdaptiveMaxConcurrency::UNLIMITED
    - value
    - ConcurrencyLimiterExtension
    - type
    linkageType: ''
    returnType: bool
    signature: "bool Server::CreateConcurrencyLimiter(const AdaptiveMaxConcurrency&
      amc,\n                                      ConcurrencyLimiter** out)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:794,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:797,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:800,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:801,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:802,1
    - Dst: pid_file::empty
      Src: /src/brpc/src/brpc/server.cpp:804,1
    - Dst: unlink
      Src: /src/brpc/src/brpc/server.cpp:805,1
    - Dst: pid_file::c_str
      Src: /src/brpc/src/brpc/server.cpp:805,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:809,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:813,1
    - Dst: FREE_PTR_IF_NOT_REUSED
      Src: /src/brpc/src/brpc/server.cpp:816,1
    - Dst: DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
      Src: /src/brpc/src/brpc/server.cpp:827,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' dst'
    - ' src'
    argTypes:
    - ServerOptions
    - ServerOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 785
    functionDepth: 1
    functionLinenumber: 785
    functionLinenumberEnd: 829
    functionName: brpc::copy_and_fill_server_options
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 0
    functionsReached:
    - DefaultRpcPBMessageFactory::DefaultRpcPBMessageFactory
    - pid_file::c_str
    - unlink
    - pid_file::empty
    - FREE_PTR_IF_NOT_REUSED
    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: 792
      start: 787
    functionDepth: 0
    functionLinenumber: 787
    functionLinenumberEnd: 792
    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: 65
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:843,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:847,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:848,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:848,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:851,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:854,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:854,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:857,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:857,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:858,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:858,1
    - Dst: h2_settings::IsValid
      Src: /src/brpc/src/brpc/server.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:875,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:881,1
    - Dst: brpc::TransportFactory::ContextInitOrDie
      Src: /src/brpc/src/brpc/server.cpp:886,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:888,1
    - Dst: copy_and_fill_server_options
      Src: /src/brpc/src/brpc/server.cpp:892,1
    - Dst: http_master_service::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:898,1
    - Dst: google::protobuf::ServiceDescriptor*::FindMethodByName
      Src: /src/brpc/src/brpc/server.cpp:900,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:902,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:905,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:906,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/server.cpp:907,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:910,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:911,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/server.cpp:912,1
    - Dst: SimpleDataPool::SimpleDataPool
      Src: /src/brpc/src/brpc/server.cpp:924,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:926,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:930,1
    - Dst: Reserve
      Src: /src/brpc/src/brpc/server.cpp:932,1
    - Dst: bthread_keytable_pool_t::bthread_keytable_pool_t
      Src: /src/brpc/src/brpc/server.cpp:942,1
    - Dst: bthread_keytable_pool_init
      Src: /src/brpc/src/brpc/server.cpp:943,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:944,1
    - Dst: bthread_key_create2
      Src: /src/brpc/src/brpc/server.cpp:953,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:955,1
    - Dst: bthread_keytable_pool_reserve
      Src: /src/brpc/src/brpc/server.cpp:959,1
    - Dst: brpc::Server::ThreadLocalOptions
      Src: /src/brpc/src/brpc/server.cpp:966,1
    - Dst: BthreadInitArgs::BthreadInitArgs
      Src: /src/brpc/src/brpc/server.cpp:974,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:985,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/server.cpp:993,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1001,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1011,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1016,1
    - Dst: FreeSSLContexts
      Src: /src/brpc/src/brpc/server.cpp:1022,1
    - Dst: has_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1023,1
    - Dst: brpc::Server::InitALPNOptions
      Src: /src/brpc/src/brpc/server.cpp:1027,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1027,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1030,1
    - Dst: certificate::empty
      Src: /src/brpc/src/brpc/server.cpp:1031,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1032,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1035,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1038,1
    - Dst: mutable_ssl_options
      Src: /src/brpc/src/brpc/server.cpp:1040,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1041,1
    - Dst: AddCertificate
      Src: /src/brpc/src/brpc/server.cpp:1042,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1047,1
    - Dst: brpc::Server::AddBuiltinServices
      Src: /src/brpc/src/brpc/server.cpp:1056,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1057,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1064,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1070,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1071,1
    - Dst: ServiceMap::const_iterator::second::restful_map::PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1073,1
    - Dst: PrepareForFinding
      Src: /src/brpc/src/brpc/server.cpp:1077,1
    - Dst: bthread_setconcurrency_by_tag
      Src: /src/brpc/src/brpc/server.cpp:1087,1
    - Dst: begin
      Src: /src/brpc/src/brpc/server.cpp:1090,1
    - Dst: end
      Src: /src/brpc/src/brpc/server.cpp:1091,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1093,1
    - Dst: AdaptiveMaxConcurrency*::type
      Src: /src/brpc/src/brpc/server.cpp:1096,1
    - Dst: AdaptiveMaxConcurrency::UNLIMITED
      Src: /src/brpc/src/brpc/server.cpp:1096,1
    - Dst: brpc::Server::CreateConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1101,1
    - Dst: MethodMap::iterator::second::status::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1104,1
    - Dst: MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
      Src: /src/brpc/src/brpc/server.cpp:1105,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1108,1
    - Dst: brpc::Server::SetServiceMaxConcurrency
      Src: /src/brpc/src/brpc/server.cpp:1112,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1120,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1143,1
    - Dst: get_port_from_fd
      Src: /src/brpc/src/brpc/server.cpp:1150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1152,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1157,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1159,1
    - Dst: time
      Src: /src/brpc/src/brpc/server.cpp:1168,1
    - Dst: brpc::Server::GenerateVersionIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1169,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/server.cpp:1170,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1173,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1176,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1189,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1204,1
    - Dst: brpc::Server::BuildAcceptor
      Src: /src/brpc/src/brpc/server.cpp:1208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1210,1
    - Dst: StartAccept
      Src: /src/brpc/src/brpc/server.cpp:1215,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1218,1
    - Dst: butil::fd_guard::release
      Src: /src/brpc/src/brpc/server.cpp:1221,1
    - Dst: brpc::Server::PutPidFileIfNeeded
      Src: /src/brpc/src/brpc/server.cpp:1224,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1227,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/server.cpp:1230,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/server.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1233,1
    - Dst: butil::is_endpoint_extended
      Src: /src/brpc/src/brpc/server.cpp:1238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1240,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1240,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1252,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/server.cpp:1252,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1255,1
    - Dst: butil::my_hostname
      Src: /src/brpc/src/brpc/server.cpp:1255,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1258,1
    - Dst: SetTrackMeAddress
      Src: /src/brpc/src/brpc/server.cpp:1262,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1262,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/server.cpp:1262,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/server.cpp:1264,1
    CyclomaticComplexity: 86
    EdgeCount: 86
    ICount: 298
    argCount: 3
    argNames:
    - ' endpoint'
    - ' port_range'
    - opt
    argTypes:
    - butil::EndPoint
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1266
      start: 831
    functionDepth: 4
    functionLinenumber: 831
    functionLinenumberEnd: 1266
    functionName: brpc::Server::StartInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 3
    functionsReached:
    - bthread_join
    - SimpleDataPool::SimpleDataPool
    - bthread_keytable_pool_reserve
    - std::unique_ptr::release
    - copy_and_fill_server_options
    - LOG
    - bthread_attr_set_name
    - SetTrackMeAddress
    - FreeSSLContexts
    - CHECK_EQ
    - butil::is_endpoint_extended
    - AddCertificate
    - brpc::Server::ThreadLocalOptions
    - begin
    - version
    - google::protobuf::MethodDescriptor*::output_type
    - h2_settings::IsValid
    - http_master_service::GetDescriptor
    - bthread_keytable_pool_t::bthread_keytable_pool_t
    - bthread_start_background
    - google::protobuf::ServiceDescriptor*::FindMethodByName
    - size
    - google::protobuf::MethodDescriptor*::input_type
    - bthread_key_create2
    - butil::EndPoint
    - fetch_add
    - butil::my_ip
    - bthread_setconcurrency_by_tag
    - AdaptiveMaxConcurrency::UNLIMITED
    - brpc::Server::InitALPNOptions
    - AdaptiveMaxConcurrency*::type
    - PrepareForFinding
    - bthread_keytable_pool_init
    - brpc::Server::GenerateVersionIfNeeded
    - MethodMap::iterator::second::max_concurrency::SetConcurrencyLimiter
    - brpc::Server::InitializeOnce
    - std::ostringstream::str
    - brpc::Server::SetServiceMaxConcurrency
    - status_str
    - time
    - brpc::Server::PutPidFileIfNeeded
    - brpc::Server::AddBuiltinServices
    - certificate::empty
    - BthreadInitArgs::BthreadInitArgs
    - bthread_usleep
    - brpc::Server::status
    - end
    - brpc::Server::CreateConcurrencyLimiter
    - brpc::Server::BuildAcceptor
    - butil::fd_guard::release
    - butil::my_hostname
    - Reserve
    - get_port_from_fd
    - has_ssl_options
    - mutable_ssl_options
    - ServiceMap::const_iterator::second::restful_map::PrepareForFinding
    - StartAccept
    - MethodMap::iterator::second::status::SetConcurrencyLimiter
    - brpc::TransportFactory::ContextInitOrDie
    - Reset
    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:1269,1
    - Dst: PortRange
      Src: /src/brpc/src/brpc/server.cpp:1270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' endpoint'
    - opt
    argTypes:
    - butil::EndPoint
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1271
      start: 1268
    functionDepth: 5
    functionLinenumber: 1268
    functionLinenumberEnd: 1271
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 157
    functionsReached:
    - brpc::Server::StartInternal
    - PortRange
    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:1274,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1275,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/server.cpp:1276,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1277,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1280,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ip_port_str
    - opt
    argTypes:
    - char*
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1281
      start: 1273
    functionDepth: 1
    functionLinenumber: 1273
    functionLinenumberEnd: 1281
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 158
    functionsReached:
    - brpc::Server::Start
    - hostname2endpoint
    - LOG
    - butil::EndPoint::EndPoint
    - str2endpoint
    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:1285,1
    - Dst: brpc::Server::Start
      Src: /src/brpc/src/brpc/server.cpp:1288,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1288,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - port
    - opt
    argTypes:
    - int
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1289
      start: 1283
    functionDepth: 1
    functionLinenumber: 1283
    functionLinenumberEnd: 1289
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 159
    functionsReached:
    - butil::EndPoint
    - LOG
    - brpc::Server::Start
    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:1294,1
    - Dst: butil::hostname2ip
      Src: /src/brpc/src/brpc/server.cpp:1295,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1296,1
    - Dst: brpc::Server::StartInternal
      Src: /src/brpc/src/brpc/server.cpp:1299,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 3
    argNames:
    - ip_str
    - port_range
    - opt
    argTypes:
    - char*
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1300
      start: 1291
    functionDepth: 5
    functionLinenumber: 1291
    functionLinenumberEnd: 1300
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 159
    functionsReached:
    - butil::EndPoint
    - butil::str2ip
    - LOG
    - brpc::Server::StartInternal
    - 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:1303,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/server.cpp:1303,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - port_range
    - opt
    argTypes:
    - PortRange
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1304
      start: 1302
    functionDepth: 5
    functionLinenumber: 1302
    functionLinenumberEnd: 1304
    functionName: brpc::Server::Start
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 159
    functionsReached:
    - butil::EndPoint
    - brpc::Server::StartInternal
    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:1312,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1312,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1315,1
    - Dst: StopAccept
      Src: /src/brpc/src/brpc/server.cpp:1319,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - timeout_ms
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1322
      start: 1306
    functionDepth: 1
    functionLinenumber: 1306
    functionLinenumberEnd: 1322
    functionName: brpc::Server::Stop
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 60
    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:1330,1
    - Dst: brpc::Server::Join
      Src: /src/brpc/src/brpc/server.cpp:1333,1
    - Dst: Reset
      Src: /src/brpc/src/brpc/server.cpp:1339,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1347,1
    - Dst: bthread_keytable_pool_destroy
      Src: /src/brpc/src/brpc/server.cpp:1347,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/server.cpp:1357,1
    - Dst: bthread_key_delete
      Src: /src/brpc/src/brpc/server.cpp:1357,1
    - Dst: bthread_stop
      Src: /src/brpc/src/brpc/server.cpp:1365,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/server.cpp:1366,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/server.cpp:1370,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1373
      start: 1325
    functionDepth: 3
    functionLinenumber: 1325
    functionLinenumberEnd: 1373
    functionName: brpc::Server::Join
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 62
    functionsReached:
    - bthread_join
    - fetch_sub
    - CHECK_EQ
    - brpc::Server::Join
    - bthread_stop
    - bthread_keytable_pool_destroy
    - bthread_key_delete
    - Reset
    linkageType: ''
    returnType: int
    signature: int Server::Join()
  - BBCount: 31
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1379,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/server.cpp:1382,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1383,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1384,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1384,1
    - Dst: brpc::Server::InitializeOnce
      Src: /src/brpc/src/brpc/server.cpp:1389,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1390,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1390,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1393,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1394,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1394,1
    - Dst: version
      Src: /src/brpc/src/brpc/server.cpp:1395,1
    - Dst: status_str
      Src: /src/brpc/src/brpc/server.cpp:1395,1
    - Dst: brpc::Server::status
      Src: /src/brpc/src/brpc/server.cpp:1395,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1399,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1400,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1400,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1403,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1406,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1407,1
    - Dst: ServiceProperty*::service_name
      Src: /src/brpc/src/brpc/server.cpp:1408,1
    - Dst: google::protobuf::ServiceDescriptor*::file
      Src: /src/brpc/src/brpc/server.cpp:1413,1
    - Dst: dynamic_cast<Tabbed*>
      Src: /src/brpc/src/brpc/server.cpp:1415,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/server.cpp:1416,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/server.cpp:1417,1
    - Dst: MethodStatus::MethodStatus
      Src: /src/brpc/src/brpc/server.cpp:1432,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1433,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1433,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1434,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1434,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1440,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1441,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1441,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/server.cpp:1442,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/server.cpp:1443,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1443,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1444,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1447,1
    - Dst: brpc::Server::RemoveMethodsOf
      Src: /src/brpc/src/brpc/server.cpp:1448,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1456,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1456,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1457,1
    - Dst: google::protobuf::ServiceDescriptor*::name
      Src: /src/brpc/src/brpc/server.cpp:1457,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/server.cpp:1467,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/server.cpp:1468,1
    - Dst: ParseRestfulMappings
      Src: /src/brpc/src/brpc/server.cpp:1471,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1472,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1473,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/server.cpp:1476,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1478,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1479,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/server.cpp:1497,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/server.cpp:1499,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1499,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1502,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1503,1
    - Dst: empty
      Src: /src/brpc/src/brpc/server.cpp:1508,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1510,1
    - Dst: AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1518,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1521,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1523,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1527,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1527,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1529,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1530,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1532,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1532,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1536,1
    - Dst: seek
      Src: /src/brpc/src/brpc/server.cpp:1537,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1540,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1542,1
    - Dst: RestfulMap::RestfulMap
      Src: /src/brpc/src/brpc/server.cpp:1547,1
    - Dst: RestfulMap*::AddMethod
      Src: /src/brpc/src/brpc/server.cpp:1557,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1559,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/server.cpp:1560,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1565,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1569,1
    - Dst: std::string::string
      Src: /src/brpc/src/brpc/server.cpp:1569,1
    - Dst: MethodProperty*::http_url::empty
      Src: /src/brpc/src/brpc/server.cpp:1571,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1572,1
    - Dst: MethodProperty*::http_url::append
      Src: /src/brpc/src/brpc/server.cpp:1574,1
    - Dst: path::to_string
      Src: /src/brpc/src/brpc/server.cpp:1574,1
    - Dst: TabInfoList::TabInfoList
      Src: /src/brpc/src/brpc/server.cpp:1588,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1590,1
    - Dst: Tabbed*::GetTabInfo
      Src: /src/brpc/src/brpc/server.cpp:1591,1
    - Dst: size
      Src: /src/brpc/src/brpc/server.cpp:1592,1
    - Dst: valid
      Src: /src/brpc/src/brpc/server.cpp:1595,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/server.cpp:1596,1
    - Dst: resize
      Src: /src/brpc/src/brpc/server.cpp:1598,1
    - Dst: brpc::Server::RemoveService
      Src: /src/brpc/src/brpc/server.cpp:1599,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: 1605
      start: 1375
    functionDepth: 3
    functionLinenumber: 1375
    functionLinenumberEnd: 1605
    functionName: brpc::Server::AddServiceInternal
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 6
    functionsReached:
    - butil::EnsureString
    - ServiceProperty*::service_name
    - Tabbed*::GetTabInfo
    - ParseRestfulMappings
    - std::string::append
    - LOG
    - std::vector::size
    - empty
    - TabInfoList::TabInfoList
    - resize
    - brpc::Server::RemoveService
    - version
    - path::to_string
    - RestfulMap::RestfulMap
    - std::string::push_back
    - MethodStatus::MethodStatus
    - google::protobuf::ServiceDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - size
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::ServiceDescriptor*::method_count
    - RestfulMap*::AddMethod
    - butil::StringPiece::trim_spaces
    - google::protobuf::ServiceDescriptor*::file
    - brpc::Server::InitializeOnce
    - google::protobuf::MethodDescriptor*::name
    - status_str
    - MethodProperty*::http_url::append
    - MethodProperty*::http_url::empty
    - valid
    - brpc::Server::RemoveMethodsOf
    - brpc::Server::status
    - butil::StringPiece::empty
    - AddMethod
    - dynamic_cast<Tabbed*>
    - google::protobuf::MethodDescriptor*::full_name
    - std::vector::empty
    - seek
    - std::string::reserve
    - std::string::string
    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: 1618
      start: 1607
    functionDepth: 0
    functionLinenumber: 1607
    functionLinenumberEnd: 1618
    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:1624,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - service
    - ownership
    argTypes:
    - google::protobuf::Service*
    - ServiceOwnership
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1625
      start: 1620
    functionDepth: 2
    functionLinenumber: 1620
    functionLinenumberEnd: 1625
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 128
    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:1634,1
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1636,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: 1637
      start: 1627
    functionDepth: 2
    functionLinenumber: 1627
    functionLinenumberEnd: 1637
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 128
    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:1641,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - service
    - ' options'
    argTypes:
    - google::protobuf::Service*
    - ServiceOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1639
    functionDepth: 2
    functionLinenumber: 1639
    functionLinenumberEnd: 1642
    functionName: brpc::Server::AddService
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 128
    functionsReached:
    - brpc::Server::AddServiceInternal
    linkageType: ''
    returnType: int
    signature: "int Server::AddService(google::protobuf::Service* service,\n                       const
      ServiceOptions& options)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Server::AddServiceInternal
      Src: /src/brpc/src/brpc/server.cpp:1647,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - service
    argTypes:
    - google::protobuf::Service*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1656
      start: 1644
    functionDepth: 2
    functionLinenumber: 1644
    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::field
    - RemoveByPathString
    - std::string::append
    - LOG
    - FindServicePropertyByName
    - MethodProperty*::http_url::c_str
    - butil::StringPiece::CopyToString
    - std::string::push_back
    - google::protobuf::ServiceDescriptor*::name
    - google::protobuf::Service*::GetDescriptor
    - std::string::clear
    - google::protobuf::ServiceDescriptor*::method
    - ServiceProperty*::restful_map::RemoveByPathString
    - google::protobuf::ServiceDescriptor*::method_count
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - butil::StringPiece::size
    - google::protobuf::ServiceDescriptor*::file
    - erase
    - google::protobuf::MethodDescriptor*::name
    - butil::StringSplitter::length
    - google::protobuf::MethodDescriptor*::full_name
    - seek
    - std::string::reserve
    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: butil::EnsureString
      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*::full_name
    - version
    - brpc::Server::RemoveMethodsOf
    - butil::EnsureString
    - brpc::Server::status
    - LOG
    - erase
    - google::protobuf::ServiceDescriptor*::name
    - seek
    - google::protobuf::Service*::GetDescriptor
    - status_str
    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:
    - begin
    - version
    - brpc::Server::status
    - end
    - clear
    - 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::service_count
    - ConnectionCount
    - brpc::Server::builtin_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:
    - begin
    - std::vector<google::protobuf::Service*>*::reserve
    - std::vector<google::protobuf::Service*>*::push_back
    - end
    - ServiceMap::const_iterator::second::is_user_service
    - brpc::Server::service_count
    - std::vector<google::protobuf::Service*>*::clear
    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:
    - begin
    - reserve
    - end
    - butil::class_name_str
    - append
    - empty
    - ServiceMap::const_iterator::second::is_user_service
    - brpc::Server::service_count
    - push_back
    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:
    - std::string::c_str
    - PLOG
    - pid_file::clear
    - mkdir
    - pid_file::empty
    - pid_file::substr
    - pid_file::find
    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:
    - Join
    - bthread_usleep
    - Stop
    - IsAskedToQuit
    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
    - CHECK
    - bthread_get_assigned_data
    - bthread_getspecific
    - CHECK_EQ
    - Server::ThreadLocalOptions*::thread_local_data_factory::CreateData
    - BAIDU_UNLIKELY
    - 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:
    - tab_name::c_str
    - path::c_str
    - size
    - tabs_li
    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: 2
    functionLinenumber: 1958
    functionLinenumberEnd: 1986
    functionName: StartDummyServerAt
    functionSourceFile: /src/brpc/src/brpc/server.cpp
    functionUses: 2
    functionsReached:
    - listen_address
    - BAIDU_SCOPED_LOCK
    - Server*::set_version
    - LOG
    - Server*::Start
    - GetProgramName
    - bthread_self_tag
    - butil::string_printf
    - Server::Server
    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:
    - Server::FindMethodPropertyByFullName
    - memcpy
    - std::string::append
    - butil::BasicStringPiece::BasicStringPiece
    - std::string::push_back
    - std::string::reserve
    - data
    - size
    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:
    - Server::FindMethodPropertyByFullName
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::full_name
    - Server::FindServicePropertyByName
    - Server::ServiceProperty*::service::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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_options
    - CreateServerSSLContext
    - SSL_CTX_set_tlsext_servername_callback
    - std::make_shared<SocketSSLContext>
    - std::string::append
    - LOG
    - Modify
    - has_ssl_options
    - seek
    - SSL_CTX_set_tlsext_servername_arg
    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:
    - filters::size
    - LOG
    - strncmp
    - c_str
    - CertMap*::insert
    - CertMap*::seek
    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
    - std::string::append
    - LOG
    - has_ssl_options
    - erase
    - seek
    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:
    - filters::size
    - strncmp
    - CertMap*::erase
    - c_str
    - CertMap*::seek
    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_options
    - SSLContextMap::seek
    - CreateServerSSLContext
    - std::string::append
    - LOG
    - std::make_shared<SocketSSLContext>
    - SSL_CTX_set_tlsext_servername_callback
    - has_ssl_options
    - Modify
    - swap
    - SSLContextMap::init
    - size
    - SSL_CTX_set_tlsext_servername_arg
    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:
    - begin
    - end
    - wildcard_cert_map::clear
    - filters::size
    - LOG
    - c_str
    - strncmp
    - cert_map::clear
    - CertMap*::insert
    - CertMap*::seek
    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:
    - clear
    - Modify
    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:
    - cert_map::clear
    - wildcard_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:
    - LOG
    - IsRunning
    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<BaiduMasterService>
    - butil::class_name_str<NsheadService>
    - options
    - LOG
    - butil::class_name_str<ThriftService>
    - MaxConcurrencyOf
    - seek
    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:
    - Server::MaxConcurrencyOf
    - seek
    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:
    - FindMethodPropertyByFullName
    - LOG
    - MaxConcurrencyOf
    - const_cast<MethodProperty*>
    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:
    - google::protobuf::Service*::GetDescriptor
    - MaxConcurrencyOf
    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:
    - seek
    - MethodProperty*::method::full_name
    - IsRunning
    - LOG
    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:
    - seek
    - LOG
    - IsRunning
    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:
    - Controller*::SetFailed
    - Interceptor*::Accept
    - std::string::c_str
    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:
    - butil::DoublyBufferedData<CertMaps>::ScopedPtr::wildcard_cert_map::seek
    - reinterpret_cast<Server*>
    - SSL_get_servername
    - SSL_set_SSL_CTX
    - Server*::_reload_cert_maps::Read
    - butil::DoublyBufferedData<CertMaps>::ScopedPtr::cert_map::seek
    - 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
    - PLOG
    - epoll_create
    - butil::make_close_on_exec
    - CHECK_EQ
    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
    - Join
    - Stop
    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_attr_set_name
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:81,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:88,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:90,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:90,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 94
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - bthread_attr_set_name
    - LOG
    - berror
    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: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    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:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 107
    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:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 109
    functionDepth: 2
    functionLinenumber: 109
    functionLinenumberEnd: 114
    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:131,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:137,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 142
    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:153,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 158
    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:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 172
    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:185,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 190
    functionName: brpc::EventDispatcher::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    - PLOG
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::RemoveConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:196,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:196,1
    - Dst: EventDispatcher*::Run
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 201
    functionName: brpc::EventDispatcher::RunThis
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - bthread_self
    - bthread::TaskGroup::address_meta
    - 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:208,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:208,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:210,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:210,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:213,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:213,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:226,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:235,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:237,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:238,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:243,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:245,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:246,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 203
    functionDepth: 3
    functionLinenumber: 203
    functionLinenumberEnd: 250
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 2
    functionsReached:
    - ARRAY_SIZE
    - PLOG
    - butil::cpuwide_time_ns
    - brpc::EventDispatcher::CallOutputEventCallback
    - brpc::EventDispatcher::CallInputEventCallback
    - epoll_wait
    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
    - PLOG
    - epoll_create
    - butil::make_close_on_exec
    - CHECK_EQ
    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
    - Join
    - Stop
    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_attr_set_name
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:81,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:88,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:90,1
    - Dst: berror
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:90,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - thread_attr
    argTypes:
    - bthread_attr_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 58
    functionDepth: 4
    functionLinenumber: 58
    functionLinenumberEnd: 94
    functionName: brpc::EventDispatcher::Start
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - bthread_attr_set_name
    - LOG
    - berror
    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: 98
      start: 96
    functionDepth: 0
    functionLinenumber: 96
    functionLinenumberEnd: 98
    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:105,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 100
    functionDepth: 0
    functionLinenumber: 100
    functionLinenumberEnd: 107
    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:111,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 109
    functionDepth: 2
    functionLinenumber: 109
    functionLinenumberEnd: 114
    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:131,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:137,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 116
    functionDepth: 0
    functionLinenumber: 116
    functionLinenumberEnd: 142
    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:153,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 3
    argNames:
    - event_data_id
    - fd
    - pollin
    argTypes:
    - IOEventDataId
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 158
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 158
    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:171,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - event_data_id
    - fd
    argTypes:
    - IOEventDataId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 172
    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:185,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:186,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 190
    functionName: brpc::EventDispatcher::RemoveConsumer
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - epoll_ctl
    - PLOG
    linkageType: ''
    returnType: int
    signature: int EventDispatcher::RemoveConsumer(int fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: bthread::TaskGroup::address_meta
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:196,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:196,1
    - Dst: EventDispatcher*::Run
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 192
    functionDepth: 2
    functionLinenumber: 192
    functionLinenumberEnd: 201
    functionName: brpc::EventDispatcher::RunThis
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 0
    functionsReached:
    - bthread_self
    - bthread::TaskGroup::address_meta
    - 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:208,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:208,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:210,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:210,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:213,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:213,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:226,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:235,1
    - Dst: brpc::EventDispatcher::CallInputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:237,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:238,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:243,1
    - Dst: brpc::EventDispatcher::CallOutputEventCallback
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:245,1
    - Dst: butil::cpuwide_time_ns
      Src: /src/brpc/src/brpc/event_dispatcher_epoll.cpp:246,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 203
    functionDepth: 3
    functionLinenumber: 203
    functionLinenumberEnd: 250
    functionName: brpc::EventDispatcher::Run
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher_epoll.cpp
    functionUses: 2
    functionsReached:
    - ARRAY_SIZE
    - PLOG
    - butil::cpuwide_time_ns
    - brpc::EventDispatcher::CallOutputEventCallback
    - brpc::EventDispatcher::CallInputEventCallback
    - epoll_wait
    linkageType: ''
    returnType: void
    signature: void EventDispatcher::Run()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:46,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.cpp:47,1
    - Dst: brpc::Span::CreateBthreadSpan
      Src: /src/brpc/src/brpc/span.cpp:48,1
    - Dst: std::weak_ptr<Span>::weak_ptr<Span>
      Src: /src/brpc/src/brpc/span.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 1
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: brpc::CreateBthreadSpanAsVoid
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::CreateBthreadSpan
    - butil::gettimeofday_us
    - butil::cpuwide_time_us
    - std::weak_ptr<Span>::weak_ptr<Span>
    linkageType: ''
    returnType: void
    signature: void * CreateBthreadSpanAsVoid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: brpc::DestroyRpczParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - static_cast<std::weak_ptr<Span>*>
    linkageType: ''
    returnType: void
    signature: void DestroyRpczParentSpan(void* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:63,1
    - Dst: std::shared_ptr::set_ending_tid
      Src: /src/brpc/src/brpc/span.cpp:65,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/span.cpp:65,1
    - Dst: brpc::ClearTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 62
    functionDepth: 2
    functionLinenumber: 62
    functionLinenumberEnd: 69
    functionName: brpc::EndBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::set_ending_tid
    - bthread_self
    - brpc::ClearTlsParentSpan
    - brpc::GetTlsParentSpan
    linkageType: ''
    returnType: void
    signature: void EndBthreadSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:73,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:75,1
    - Dst: std::weak_ptr<Span>::weak_ptr<Span>
      Src: /src/brpc/src/brpc/span.cpp:77,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - span
    argTypes:
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 80
    functionName: brpc::SetTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    - std::weak_ptr<Span>::weak_ptr<Span>
    linkageType: ''
    returnType: void
    signature: void SetTlsParentSpan(std::shared_ptr<Span> span)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:84,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:89,1
    - Dst: auto*::lock
      Src: /src/brpc/src/brpc/span.cpp:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 91
    functionName: brpc::GetTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    - auto*::lock
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> GetTlsParentSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:95,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: brpc::ClearTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    linkageType: ''
    returnType: void
    signature: void ClearTlsParentSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:103,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:108,1
    - Dst: auto*::expired
      Src: /src/brpc/src/brpc/span.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 110
    functionName: brpc::HasTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    - auto*::expired
    linkageType: ''
    returnType: bool
    signature: bool HasTlsParentSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Span*::_client_list::clear
      Src: /src/brpc/src/brpc/span.cpp:121,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:122,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/span.cpp:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - r
    argTypes:
    - Span*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 124
    functionName: SpanDeleter::operator()(Span* r) const
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - Span*::_info::clear
    - butil::return_object
    - Span*::_client_list::clear
    linkageType: ''
    returnType: void
    signature: void SpanDeleter::operator()(Span* r) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init_fast_rand_seed
      Src: /src/brpc/src/brpc/span.cpp:163,1
    - Dst: fast_rand
      Src: /src/brpc/src/brpc/span.cpp:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - g
    argTypes:
    - IdGen*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 168
    functionName: brpc::UpdateTLSRandom64
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - fast_rand
    - init_fast_rand_seed
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t UpdateTLSRandom64(IdGen* g)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UpdateTLSRandom64
      Src: /src/brpc/src/brpc/span.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 178
    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:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 188
    functionName: brpc::GenerateTraceId
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::UpdateTLSRandom64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GenerateTraceId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/span.cpp:191,1
    - Dst: pthread_spin_init
      Src: /src/brpc/src/brpc/span.cpp:191,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/span.cpp:193,1
    - Dst: pthread_spin_init
      Src: /src/brpc/src/brpc/span.cpp:193,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: brpc::Span::Span
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Span::Span(Forbidden)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/brpc/span.cpp:198,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/brpc/span.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 200
    functionName: Span::~Span()
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - pthread_spin_destroy
    linkageType: ''
    returnType: void
    signature: void Span::~Span()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:204,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:204,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:205,1
    - Dst: std::shared_ptr::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:225,1
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/span.cpp:226,1
    - Dst: std::shared_ptr::trace_id
      Src: /src/brpc/src/brpc/span.cpp:228,1
    - Dst: std::shared_ptr::span_id
      Src: /src/brpc/src/brpc/span.cpp:229,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:232,1
    - Dst: std::shared_ptr::_client_list::push_back
      Src: /src/brpc/src/brpc/span.cpp:233,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:236,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:239,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: 241
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 241
    functionName: brpc::Span::CreateClientSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::get_object<Span>
    - GenerateSpanId
    - std::shared_ptr::span_id
    - __builtin_expect
    - std::shared_ptr::trace_id
    - GenerateTraceId
    - Forbidden
    - brpc::Span::tls_parent
    - std::shared_ptr::_info::clear
    - std::shared_ptr::_client_list::push_back
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<Span> Span::CreateClientSpan(const std::string& full_method_name,\n
      \                                            int64_t base_real_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/span.cpp:245,1
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:246,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:246,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:247,1
    - Dst: std::shared_ptr::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:267,1
    - Dst: std::shared_ptr::trace_id
      Src: /src/brpc/src/brpc/span.cpp:270,1
    - Dst: std::shared_ptr::span_id
      Src: /src/brpc/src/brpc/span.cpp:271,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:274,1
    - Dst: std::shared_ptr::_client_list::push_back
      Src: /src/brpc/src/brpc/span.cpp:275,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:278,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:282,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: 284
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 284
    functionName: brpc::Span::CreateBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::get_object<Span>
    - GenerateSpanId
    - std::shared_ptr::span_id
    - __builtin_expect
    - std::shared_ptr::trace_id
    - GenerateTraceId
    - Forbidden
    - brpc::Span::tls_parent
    - std::shared_ptr::_info::clear
    - std::shared_ptr::_client_list::push_back
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<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: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    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:296,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:296,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:297,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:301,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:302,1
    - Dst: empty
      Src: /src/brpc/src/brpc/span.cpp:319,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:320,1
    - Dst: std::shared_ptr::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    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: 323
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 323
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - unknown_span_name
    - GenerateSpanId
    - butil::get_object<Span>
    - __builtin_expect
    - empty
    - GenerateTraceId
    - Forbidden
    - std::shared_ptr::_info::clear
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<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:328,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:328,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: 330
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 330
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - brpc::Span::CreateServerSpan
    - unknown_span_name
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<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:333,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 335
    functionName: brpc::Span::ResetServerSpanName
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - empty
    - unknown_span_name
    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:339,1
    - Dst: shared_from_this
      Src: /src/brpc/src/brpc/span.cpp:344,1
    - Dst: SpanContainer::SpanContainer
      Src: /src/brpc/src/brpc/span.cpp:344,1
    - Dst: brpc::Span::submit
      Src: /src/brpc/src/brpc/span.cpp:344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 345
    functionName: brpc::Span::submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - SpanContainer::SpanContainer
    - brpc::Span::EndAsParent
    - brpc::Span::submit
    - shared_from_this
    linkageType: ''
    returnType: void
    signature: void Span::submit(int64_t cpuwide_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:348,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:349,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:350,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:353,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:354,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 356
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - va_start
    - BAIDU_SCOPED_LOCK
    - va_end
    - butil::cpuwide_time_us
    - butil::string_vappendf
    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:359,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:360,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:361,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - fmt
    - args
    argTypes:
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 364
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - BAIDU_SCOPED_LOCK
    - 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:367,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:368,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:369,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 372
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - append
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_us
    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:375,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:376,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:377,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:380,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:382,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - info
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 374
    functionDepth: 1
    functionLinenumber: 374
    functionLinenumberEnd: 384
    functionName: brpc::Span::AnnotateCStr
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - append
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void Span::AnnotateCStr(const char* info, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:389,1
    - Dst: brpc::Span::CountClientSpans
      Src: /src/brpc/src/brpc/span.cpp:391,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 395
    functionName: brpc::Span::CountClientSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::Span::CountClientSpans
    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: 399
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 399
    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:403,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:404,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:405,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:406,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 409
    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: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    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:418,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:418,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:418,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/span.cpp:421,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:421,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/span.cpp:428,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:429,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:430,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:430,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:430,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:435,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/span.cpp:436,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:436,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:436,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: 439
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 439
    functionName: brpc::SpanInfoExtractor::PopAnnotation
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - strtoll
    - butil::StringSplitter::field
    - std::string
    - 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:
    - Dst: brpc::HasTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 441
    functionDepth: 2
    functionLinenumber: 441
    functionLinenumberEnd: 443
    functionName: brpc::CanAnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasTlsParentSpan
    linkageType: ''
    returnType: bool
    signature: bool CanAnnotateSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:446,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:449,1
    - Dst: std::shared_ptr::Annotate
      Src: /src/brpc/src/brpc/span.cpp:450,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:451,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 445
    functionDepth: 2
    functionLinenumber: 445
    functionLinenumberEnd: 453
    functionName: brpc::AnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - va_end
    - va_start
    - brpc::GetTlsParentSpan
    - std::shared_ptr::Annotate
    linkageType: ''
    returnType: void
    signature: void AnnotateSpan(const char* fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:458,1
    - Dst: std::shared_ptr<Span>::Annotate
      Src: /src/brpc/src/brpc/span.cpp:459,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - span
    - fmt
    argTypes:
    - std::shared_ptr<Span>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 462
    functionName: brpc::AnnotateSpanEx
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - std::shared_ptr<Span>::Annotate
    - va_end
    linkageType: ''
    returnType: void
    signature: void AnnotateSpanEx(std::shared_ptr<Span> span, const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 471
    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:478,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:479,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:480,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' db1'
    - ' db2'
    argTypes:
    - SpanDB
    - SpanDB
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 482
    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:491,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:491,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:492,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:492,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 494
    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: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    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: static_cast<const SpanContainer*>
      Src: /src/brpc/src/brpc/span.cpp:514,1
    - Dst: static_cast<const SpanContainer*>
      Src: /src/brpc/src/brpc/span.cpp:515,1
    - Dst: SpanContainer*::span
      Src: /src/brpc/src/brpc/span.cpp:517,1
    - Dst: SpanContainer*::span
      Src: /src/brpc/src/brpc/span.cpp:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1
    - c2
    argTypes:
    - bvar::Collected*
    - bvar::Collected*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 521
    functionName: operator()(const bvar::Collected* c1, const bvar::Collected* c2)
      const
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const SpanContainer*>
    - SpanContainer*::span
    linkageType: ''
    returnType: bool
    signature: bool operator()(const bvar::Collected* c1, const bvar::Collected* c2)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::sort
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: begin
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: end
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: SpanEarlier
      Src: /src/brpc/src/brpc/span.cpp:528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' list'
    argTypes:
    - std::vector<bvar::Collected*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 529
    functionName: brpc::SpanPreprocessor::process
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanEarlier
    - std::sort
    - begin
    - end
    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: 535
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 535
    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: 539
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 539
    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:544,1
    - Dst: AddRefManually
      Src: /src/brpc/src/brpc/span.cpp:548,1
    - Dst: SpanDB*::RemoveRefManually
      Src: /src/brpc/src/brpc/span.cpp:552,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - db
    argTypes:
    - SpanDB*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 541
    functionDepth: 1
    functionLinenumber: 541
    functionLinenumberEnd: 554
    functionName: brpc::ResetSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanDB*::RemoveRefManually
    - BAIDU_SCOPED_LOCK
    - AddRefManually
    linkageType: ''
    returnType: void
    signature: void ResetSpanDB(SpanDB* db)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 2
    functionLinenumber: 556
    functionLinenumberEnd: 559
    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:562,1
    - Dst: SpanPreprocessor::SpanPreprocessor
      Src: /src/brpc/src/brpc/span.cpp:563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 565
    functionName: brpc::StartSpanIndexing
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - atexit
    - SpanPreprocessor::SpanPreprocessor
    linkageType: ''
    returnType: void
    signature: void StartSpanIndexing()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/span.cpp:568,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 572
    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:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - db
    argTypes:
    - butil::intrusive_ptr<SpanDB>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 581
    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: std::shared_ptr<Span>::local_parent
      Src: /src/brpc/src/brpc/span.cpp:589,1
    - Dst: std::shared_ptr<Span>::submit
      Src: /src/brpc/src/brpc/span.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - span
    - cpuwide_time_us
    argTypes:
    - std::shared_ptr<Span>
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 592
    functionName: brpc::Span::Submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 4
    functionsReached:
    - std::shared_ptr<Span>::submit
    - std::shared_ptr<Span>::local_parent
    linkageType: ''
    returnType: void
    signature: void Span::Submit(std::shared_ptr<Span> span, int64_t cpuwide_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RpczSpan*::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: RpczSpan*::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:596,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:596,1
    - Dst: RpczSpan*::set_parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:597,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:597,1
    - Dst: RpczSpan*::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: Span*::log_id
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: RpczSpan*::set_base_cid
      Src: /src/brpc/src/brpc/span.cpp:599,1
    - Dst: Span*::base_cid
      Src: /src/brpc/src/brpc/span.cpp:599,1
    - Dst: RpczSpan*::set_ending_cid
      Src: /src/brpc/src/brpc/span.cpp:600,1
    - Dst: Span*::ending_cid
      Src: /src/brpc/src/brpc/span.cpp:600,1
    - Dst: RpczSpan*::set_remote_ip
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: RpczSpan*::set_remote_port
      Src: /src/brpc/src/brpc/span.cpp:602,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:602,1
    - Dst: RpczSpan*::set_type
      Src: /src/brpc/src/brpc/span.cpp:603,1
    - Dst: Span*::type
      Src: /src/brpc/src/brpc/span.cpp:603,1
    - Dst: RpczSpan*::set_async
      Src: /src/brpc/src/brpc/span.cpp:604,1
    - Dst: Span*::async
      Src: /src/brpc/src/brpc/span.cpp:604,1
    - Dst: RpczSpan*::set_protocol
      Src: /src/brpc/src/brpc/span.cpp:605,1
    - Dst: Span*::protocol
      Src: /src/brpc/src/brpc/span.cpp:605,1
    - Dst: RpczSpan*::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:606,1
    - Dst: Span*::request_size
      Src: /src/brpc/src/brpc/span.cpp:606,1
    - Dst: RpczSpan*::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:607,1
    - Dst: Span*::response_size
      Src: /src/brpc/src/brpc/span.cpp:607,1
    - Dst: RpczSpan*::set_received_real_us
      Src: /src/brpc/src/brpc/span.cpp:608,1
    - Dst: Span*::received_real_us
      Src: /src/brpc/src/brpc/span.cpp:608,1
    - Dst: RpczSpan*::set_start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:609,1
    - Dst: Span*::start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:609,1
    - Dst: RpczSpan*::set_start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:610,1
    - Dst: Span*::start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:610,1
    - Dst: RpczSpan*::set_start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:611,1
    - Dst: Span*::start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:611,1
    - Dst: RpczSpan*::set_sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:612,1
    - Dst: Span*::sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:612,1
    - Dst: RpczSpan*::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:613,1
    - Dst: Span*::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:613,1
    - Dst: RpczSpan*::set_info
      Src: /src/brpc/src/brpc/span.cpp:615,1
    - Dst: Span*::info
      Src: /src/brpc/src/brpc/span.cpp:615,1
    - Dst: RpczSpan*::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:616,1
    - Dst: Span*::error_code
      Src: /src/brpc/src/brpc/span.cpp:616,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 2
    argNames:
    - span
    - out
    argTypes:
    - Span*
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 617
    functionName: brpc::Span2Proto
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - RpczSpan*::set_full_method_name
    - Span*::error_code
    - butil::ip2int
    - RpczSpan*::set_parent_span_id
    - Span*::remote_side
    - RpczSpan*::set_received_real_us
    - Span*::response_size
    - RpczSpan*::set_ending_cid
    - RpczSpan*::set_info
    - Span*::async
    - Span*::trace_id
    - RpczSpan*::set_protocol
    - RpczSpan*::set_span_id
    - Span*::received_real_us
    - RpczSpan*::set_error_code
    - Span*::full_method_name
    - RpczSpan*::set_trace_id
    - Span*::ending_cid
    - RpczSpan*::set_async
    - RpczSpan*::set_type
    - Span*::request_size
    - RpczSpan*::set_sent_real_us
    - Span*::info
    - Span*::protocol
    - RpczSpan*::set_remote_port
    - RpczSpan*::set_start_callback_real_us
    - Span*::parent_span_id
    - Span*::sent_real_us
    - RpczSpan*::set_request_size
    - RpczSpan*::set_start_send_real_us
    - RpczSpan*::set_base_cid
    - Span*::start_parse_real_us
    - Span*::span_id
    - Span*::base_cid
    - RpczSpan*::set_start_parse_real_us
    - Span*::start_send_real_us
    - RpczSpan*::set_log_id
    - RpczSpan*::set_response_size
    - RpczSpan*::set_remote_ip
    - Span*::start_callback_real_us
    - Span*::type
    - Span*::log_id
    linkageType: ''
    returnType: void
    signature: void Span2Proto(const Span* span, RpczSpan* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:620,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:621,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - n
    - buf
    argTypes:
    - uint64_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 619
    functionDepth: 0
    functionLinenumber: 619
    functionLinenumberEnd: 622
    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:625,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/span.cpp:625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 626
    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:631,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:633,1
    - Dst: auto::empty
      Src: /src/brpc/src/brpc/span.cpp:633,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:633,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:634,1
    - Dst: time
      Src: /src/brpc/src/brpc/span.cpp:642,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/span.cpp:644,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/span.cpp:645,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/span.cpp:647,1
    - Dst: getpid
      Src: /src/brpc/src/brpc/span.cpp:648,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:653,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:654,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/span.cpp:658,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:659,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/span.cpp:659,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:664,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:665,1
    - Dst: SpanDB::id_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:665,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:666,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:667,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:667,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:671,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:672,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:673,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:674,1
    - Dst: SpanDB::time_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:674,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:675,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: SpanDB::SpanDB
      Src: /src/brpc/src/brpc/span.cpp:679,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:683,1
    - Dst: brpc::SpanDB::Swap
      Src: /src/brpc/src/brpc/span.cpp:685,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 687
    functionName: brpc::SpanDB::Open
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - SpanDB::id_db_name::append
    - SpanDB::time_db_name::append
    - auto::empty
    - LOG
    - localtime_r
    - getpid
    - butil::CreateDirectoryAndGetError
    - butil::DeleteFile
    - butil::FilePath::value
    - brpc::SpanDB::Swap
    - SpanDB::time_db_name::c_str
    - strftime
    - snprintf
    - SpanDB::SpanDB
    - leveldb::Status::ToString
    - butil::FilePath
    - SpanDB::id_db_name::c_str
    - time
    - butil::FileEnumerator::Next
    - leveldb::Status::ok
    - brpc::SpanDB::Open
    linkageType: ''
    returnType: SpanDB
    signature: SpanDB * SpanDB::Open()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: std::shared_ptr<const Span>::GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:699,1
    - Dst: std::shared_ptr<const Span>::GetEndRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:700,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/span.cpp:703,1
    - Dst: BriefSpan::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:706,1
    - Dst: std::shared_ptr<const Span>::trace_id
      Src: /src/brpc/src/brpc/span.cpp:706,1
    - Dst: BriefSpan::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:707,1
    - Dst: std::shared_ptr<const Span>::span_id
      Src: /src/brpc/src/brpc/span.cpp:707,1
    - Dst: BriefSpan::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:708,1
    - Dst: std::shared_ptr<const Span>::log_id
      Src: /src/brpc/src/brpc/span.cpp:708,1
    - Dst: BriefSpan::set_type
      Src: /src/brpc/src/brpc/span.cpp:709,1
    - Dst: std::shared_ptr<const Span>::type
      Src: /src/brpc/src/brpc/span.cpp:709,1
    - Dst: BriefSpan::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:710,1
    - Dst: std::shared_ptr<const Span>::error_code
      Src: /src/brpc/src/brpc/span.cpp:710,1
    - Dst: BriefSpan::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:711,1
    - Dst: std::shared_ptr<const Span>::request_size
      Src: /src/brpc/src/brpc/span.cpp:711,1
    - Dst: BriefSpan::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:712,1
    - Dst: std::shared_ptr<const Span>::response_size
      Src: /src/brpc/src/brpc/span.cpp:712,1
    - Dst: BriefSpan::set_start_real_us
      Src: /src/brpc/src/brpc/span.cpp:713,1
    - Dst: BriefSpan::set_latency_us
      Src: /src/brpc/src/brpc/span.cpp:714,1
    - Dst: BriefSpan::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:715,1
    - Dst: std::shared_ptr<const Span>::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:715,1
    - Dst: BriefSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:716,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:717,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:718,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:742,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:743,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:745,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:745,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:745,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:746,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:751,1
    - Dst: std::shared_ptr<const Span>::trace_id
      Src: /src/brpc/src/brpc/span.cpp:751,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:752,1
    - Dst: std::shared_ptr<const Span>::span_id
      Src: /src/brpc/src/brpc/span.cpp:752,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:755,1
    - Dst: std::shared_ptr<const Span>::get
      Src: /src/brpc/src/brpc/span.cpp:755,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:767,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/span.cpp:768,1
    - Dst: _client_list::size
      Src: /src/brpc/src/brpc/span.cpp:768,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/span.cpp:771,1
    - Dst: collect_all_spans
      Src: /src/brpc/src/brpc/span.cpp:777,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/span.cpp:780,1
    - Dst: collect_all_spans
      Src: /src/brpc/src/brpc/span.cpp:783,1
    - Dst: std::vector::rbegin
      Src: /src/brpc/src/brpc/span.cpp:789,1
    - Dst: std::vector::rend
      Src: /src/brpc/src/brpc/span.cpp:789,1
    - Dst: auto::get
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: std::shared_ptr<const Span>::get
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: is_active
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: RpczSpan::add_client_spans
      Src: /src/brpc/src/brpc/span.cpp:791,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:792,1
    - Dst: get
      Src: /src/brpc/src/brpc/span.cpp:792,1
    - Dst: RpczSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:796,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:797,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:799,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:799,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:800,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 2
    argNames:
    - span
    - value_buf
    argTypes:
    - std::shared_ptr<const Span>
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 689
    functionDepth: 1
    functionLinenumber: 689
    functionLinenumberEnd: 802
    functionName: brpc::SpanDB::Index
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - RpczSpan::SerializeToString
    - std::shared_ptr<const Span>::trace_id
    - BriefSpan::set_start_real_us
    - leveldb::Slice
    - butil::Status::OK
    - BriefSpan::set_span_id
    - std::shared_ptr<const Span>::GetStartRealTimeUs
    - BriefSpan::set_type
    - std::shared_ptr<const Span>::get
    - Put
    - std::shared_ptr<const Span>::request_size
    - std::vector::reserve
    - std::shared_ptr<const Span>::response_size
    - BriefSpan::set_latency_us
    - std::string*::data
    - auto::get
    - std::string*::size
    - BriefSpan::SerializeToString
    - std::shared_ptr<const Span>::span_id
    - BriefSpan::set_error_code
    - Span2Proto
    - get
    - BriefSpan::set_response_size
    - std::shared_ptr<const Span>::error_code
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - BriefSpan::set_request_size
    - std::shared_ptr<const Span>::full_method_name
    - leveldb::Status::InvalidArgument
    - ToBigEndian
    - std::shared_ptr<const Span>::type
    - RpczSpan::add_client_spans
    - BriefSpan::set_full_method_name
    - _client_list::size
    - std::shared_ptr<const Span>::log_id
    - is_active
    - collect_all_spans
    - BriefSpan::set_log_id
    - std::shared_ptr<const Span>::GetEndRealTimeUs
    - std::vector::rend
    - leveldb::Status::ok
    - std::vector::rbegin
    - BriefSpan::set_trace_id
    linkageType: ''
    returnType: leveldb::Status
    signature: leveldb::Status SpanDB::Index(std::shared_ptr<const Span> span, std::string*
      value_buf)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:807,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:807,1
    - Dst: NewIterator
      Src: /src/brpc/src/brpc/span.cpp:812,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:812,1
    - Dst: leveldb::Iterator*::SeekToFirst
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:815,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:815,1
    - Dst: ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:819,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:819,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:824,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:824,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:824,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:826,1
    - Dst: BriefSpan::trace_id
      Src: /src/brpc/src/brpc/span.cpp:826,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:827,1
    - Dst: BriefSpan::span_id
      Src: /src/brpc/src/brpc/span.cpp:827,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:830,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:831,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:835,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:837,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:837,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:838,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:839,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 805
    functionDepth: 1
    functionLinenumber: 805
    functionLinenumberEnd: 845
    functionName: brpc::SpanDB::RemoveSpansBefore
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - NewIterator
    - leveldb::ReadOptions
    - ToLittleEndian
    - leveldb::Slice
    - leveldb::Iterator*::SeekToFirst
    - BriefSpan::ParseFromArray
    - BriefSpan::span_id
    - ToBigEndian
    - leveldb::Status::InvalidArgument
    - LOG
    - leveldb::Iterator*::Valid
    - leveldb::Status::ok
    - leveldb::Iterator*::Next
    - leveldb::Iterator*::value
    - Delete
    - BriefSpan::trace_id
    - leveldb::Iterator*::key
    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:849,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:853,1
    - Dst: GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:854,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:858,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:860,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:863,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/span.cpp:864,1
    - Dst: butil::intrusive_ptr::Index
      Src: /src/brpc/src/brpc/span.cpp:867,1
    - Dst: shared_from_this
      Src: /src/brpc/src/brpc/span.cpp:867,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:868,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:869,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:869,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:870,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:870,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:870,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:871,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.cpp:877,1
    - Dst: butil::intrusive_ptr::RemoveSpansBefore
      Src: /src/brpc/src/brpc/span.cpp:880,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:883,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:883,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:884,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:884,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:884,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:885,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 890
      start: 848
    functionDepth: 2
    functionLinenumber: 848
    functionLinenumberEnd: 890
    functionName: brpc::Span::dump_to_db
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - StartIndexingIfNeeded
    - GetSpanDB
    - butil::gettimeofday_us
    - butil::intrusive_ptr::reset
    - leveldb::Status::IsNotFound
    - LOG
    - ResetSpanDB
    - butil::intrusive_ptr::Index
    - leveldb::Status::ok
    - butil::intrusive_ptr::RemoveSpansBefore
    - leveldb::Status::IsCorruption
    - shared_from_this
    - brpc::SpanDB::Open
    - leveldb::Status::ToString
    - leveldb::Status::IsIOError
    linkageType: ''
    returnType: void
    signature: void Span::dump_to_db()
  - 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::SpanContainer::destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanContainer::destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dump_to_db
      Src: /src/brpc/src/brpc/span.cpp:910,1
    - Dst: brpc::SpanContainer::destroy
      Src: /src/brpc/src/brpc/span.cpp:912,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - round
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 913
      start: 908
    functionDepth: 0
    functionLinenumber: 908
    functionLinenumberEnd: 913
    functionName: brpc::SpanContainer::dump_and_destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::SpanContainer::destroy
    - dump_to_db
    linkageType: ''
    returnType: void
    signature: void SpanContainer::dump_and_destroy(size_t round)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Collected::submit
      Src: /src/brpc/src/brpc/span.cpp:916,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 917
      start: 915
    functionDepth: 0
    functionLinenumber: 915
    functionLinenumberEnd: 917
    functionName: brpc::SpanContainer::submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - bvar::Collected::submit
    linkageType: ''
    returnType: void
    signature: void SpanContainer::submit(int64_t cpuwide_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SpanContainer::speed_limit
      Src: /src/brpc/src/brpc/span.cpp:921,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 919
    functionDepth: 0
    functionLinenumber: 919
    functionLinenumberEnd: 924
    functionName: brpc::SpanContainer::speed_limit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - brpc::SpanContainer::speed_limit
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * SpanContainer::speed_limit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:929,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:930,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:934,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:935,1
    - Dst: butil::intrusive_ptr::id_db::Get
      Src: /src/brpc/src/brpc/span.cpp:938,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:938,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:939,1
    - Dst: RpczSpan*::ParseFromString
      Src: /src/brpc/src/brpc/span.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:943,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: 947
      start: 928
    functionDepth: 2
    functionLinenumber: 928
    functionLinenumberEnd: 947
    functionName: brpc::FindSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    - leveldb::ReadOptions
    - brpc::ToBigEndian
    - butil::intrusive_ptr::id_db::Get
    - LOG
    - RpczSpan*::ParseFromString
    - leveldb::Status::ok
    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:950,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:951,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:952,1
    - Dst: butil::intrusive_ptr::id_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:955,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:955,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:957,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:958,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:960,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:960,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:960,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:961,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:962,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:962,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:966,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:966,1
    - Dst: RpczSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:971,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:971,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:971,1
    - Dst: std::deque<RpczSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:972,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:974,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - trace_id
    - out
    argTypes:
    - uint64_t
    - std::deque<RpczSpan>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 949
    functionDepth: 2
    functionLinenumber: 949
    functionLinenumberEnd: 978
    functionName: brpc::FindSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::id_db::NewIterator
    - leveldb::ReadOptions
    - brpc::GetSpanDB
    - RpczSpan::ParseFromArray
    - brpc::ToBigEndian
    - std::deque<RpczSpan>*::clear
    - leveldb::Iterator*::Seek
    - LOG
    - leveldb::Iterator*::Valid
    - std::deque<RpczSpan>*::push_back
    - brpc::ToLittleEndian
    - leveldb::Iterator*::Next
    - leveldb::Iterator*::value
    - leveldb::Iterator*::key
    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:982,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:983,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:984,1
    - Dst: butil::intrusive_ptr::time_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:987,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:987,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:989,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:991,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:992,1
    - Dst: leveldb::Iterator*::SeekToLast
      Src: /src/brpc/src/brpc/span.cpp:993,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:997,1
    - Dst: leveldb::Iterator*::Prev
      Src: /src/brpc/src/brpc/span.cpp:997,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:998,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:998,1
    - Dst: BriefSpan::Clear
      Src: /src/brpc/src/brpc/span.cpp:1004,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:1005,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:1005,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:1005,1
    - Dst: SpanFilter*::Keep
      Src: /src/brpc/src/brpc/span.cpp:1006,1
    - Dst: std::deque<BriefSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:1007,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:1013,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: 1017
      start: 980
    functionDepth: 2
    functionLinenumber: 980
    functionLinenumberEnd: 1017
    functionName: brpc::ListSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    - leveldb::ReadOptions
    - leveldb::Iterator*::Prev
    - brpc::ToBigEndian
    - butil::intrusive_ptr::time_db::NewIterator
    - BriefSpan::ParseFromArray
    - leveldb::Iterator*::Seek
    - LOG
    - SpanFilter*::Keep
    - leveldb::Iterator*::Valid
    - leveldb::Iterator*::SeekToLast
    - brpc::ToLittleEndian
    - std::deque<BriefSpan>*::clear
    - std::deque<BriefSpan>*::push_back
    - leveldb::Iterator*::value
    - BriefSpan::Clear
    - leveldb::Iterator*::key
    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:1020,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:1021,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1027,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1027,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1030,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1030,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1037,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1037,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1040,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1040,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1019
    functionDepth: 2
    functionLinenumber: 1019
    functionLinenumberEnd: 1044
    functionName: brpc::DescribeSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    - butil::intrusive_ptr::id_db::GetProperty
    - leveldb::Slice
    - butil::intrusive_ptr::time_db::GetProperty
    linkageType: ''
    returnType: void
    signature: void DescribeSpanDB(std::ostream& os)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:46,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.cpp:47,1
    - Dst: brpc::Span::CreateBthreadSpan
      Src: /src/brpc/src/brpc/span.cpp:48,1
    - Dst: std::weak_ptr<Span>::weak_ptr<Span>
      Src: /src/brpc/src/brpc/span.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 54
    functionName: brpc::CreateBthreadSpanAsVoid
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::Span::CreateBthreadSpan
    - butil::gettimeofday_us
    - butil::cpuwide_time_us
    - std::weak_ptr<Span>::weak_ptr<Span>
    linkageType: ''
    returnType: void
    signature: void * CreateBthreadSpanAsVoid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:58,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 60
    functionName: brpc::DestroyRpczParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - static_cast<std::weak_ptr<Span>*>
    linkageType: ''
    returnType: void
    signature: void DestroyRpczParentSpan(void* ptr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:63,1
    - Dst: std::shared_ptr::set_ending_tid
      Src: /src/brpc/src/brpc/span.cpp:65,1
    - Dst: bthread_self
      Src: /src/brpc/src/brpc/span.cpp:65,1
    - Dst: brpc::ClearTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:68,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 62
    functionDepth: 2
    functionLinenumber: 62
    functionLinenumberEnd: 69
    functionName: brpc::EndBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::set_ending_tid
    - bthread_self
    - brpc::ClearTlsParentSpan
    - brpc::GetTlsParentSpan
    linkageType: ''
    returnType: void
    signature: void EndBthreadSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:73,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:75,1
    - Dst: std::weak_ptr<Span>::weak_ptr<Span>
      Src: /src/brpc/src/brpc/span.cpp:77,1
    - Dst: BAIDU_SET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:78,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - span
    argTypes:
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 80
    functionName: brpc::SetTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - BAIDU_SET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    - std::weak_ptr<Span>::weak_ptr<Span>
    linkageType: ''
    returnType: void
    signature: void SetTlsParentSpan(std::shared_ptr<Span> span)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:84,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:89,1
    - Dst: auto*::lock
      Src: /src/brpc/src/brpc/span.cpp:90,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 91
    functionName: brpc::GetTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 3
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    - auto*::lock
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: std::shared_ptr<Span> GetTlsParentSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:95,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 93
    functionDepth: 1
    functionLinenumber: 93
    functionLinenumberEnd: 99
    functionName: brpc::ClearTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    linkageType: ''
    returnType: void
    signature: void ClearTlsParentSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_GET_VOLATILE_THREAD_LOCAL
      Src: /src/brpc/src/brpc/span.cpp:103,1
    - Dst: static_cast<std::weak_ptr<Span>*>
      Src: /src/brpc/src/brpc/span.cpp:108,1
    - Dst: auto*::expired
      Src: /src/brpc/src/brpc/span.cpp:109,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 101
    functionDepth: 1
    functionLinenumber: 101
    functionLinenumberEnd: 110
    functionName: brpc::HasTlsParentSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_GET_VOLATILE_THREAD_LOCAL
    - static_cast<std::weak_ptr<Span>*>
    - auto*::expired
    linkageType: ''
    returnType: bool
    signature: bool HasTlsParentSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Span*::_client_list::clear
      Src: /src/brpc/src/brpc/span.cpp:121,1
    - Dst: Span*::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:122,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/span.cpp:123,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - r
    argTypes:
    - Span*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 124
    functionName: SpanDeleter::operator()(Span* r) const
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - Span*::_info::clear
    - butil::return_object
    - Span*::_client_list::clear
    linkageType: ''
    returnType: void
    signature: void SpanDeleter::operator()(Span* r) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init_fast_rand_seed
      Src: /src/brpc/src/brpc/span.cpp:163,1
    - Dst: fast_rand
      Src: /src/brpc/src/brpc/span.cpp:165,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - g
    argTypes:
    - IdGen*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 160
    functionDepth: 0
    functionLinenumber: 160
    functionLinenumberEnd: 168
    functionName: brpc::UpdateTLSRandom64
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - fast_rand
    - init_fast_rand_seed
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t UpdateTLSRandom64(IdGen* g)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::UpdateTLSRandom64
      Src: /src/brpc/src/brpc/span.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 178
    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:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 188
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 188
    functionName: brpc::GenerateTraceId
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::UpdateTLSRandom64
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GenerateTraceId()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/span.cpp:191,1
    - Dst: pthread_spin_init
      Src: /src/brpc/src/brpc/span.cpp:191,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/span.cpp:193,1
    - Dst: pthread_spin_init
      Src: /src/brpc/src/brpc/span.cpp:193,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: brpc::Span::Span
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - CHECK_EQ
    linkageType: ''
    returnType: void
    signature: void Span::Span(Forbidden)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/brpc/span.cpp:198,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/brpc/span.cpp:199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 200
    functionName: Span::~Span()
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - pthread_spin_destroy
    linkageType: ''
    returnType: void
    signature: void Span::~Span()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:204,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:204,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:205,1
    - Dst: std::shared_ptr::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:225,1
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/span.cpp:226,1
    - Dst: std::shared_ptr::trace_id
      Src: /src/brpc/src/brpc/span.cpp:228,1
    - Dst: std::shared_ptr::span_id
      Src: /src/brpc/src/brpc/span.cpp:229,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:232,1
    - Dst: std::shared_ptr::_client_list::push_back
      Src: /src/brpc/src/brpc/span.cpp:233,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:236,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:239,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: 241
      start: 202
    functionDepth: 1
    functionLinenumber: 202
    functionLinenumberEnd: 241
    functionName: brpc::Span::CreateClientSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::get_object<Span>
    - GenerateSpanId
    - std::shared_ptr::span_id
    - __builtin_expect
    - std::shared_ptr::trace_id
    - GenerateTraceId
    - Forbidden
    - brpc::Span::tls_parent
    - std::shared_ptr::_info::clear
    - std::shared_ptr::_client_list::push_back
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<Span> Span::CreateClientSpan(const std::string& full_method_name,\n
      \                                            int64_t base_real_us)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Span::tls_parent
      Src: /src/brpc/src/brpc/span.cpp:245,1
    - Dst: butil::get_object<Span>
      Src: /src/brpc/src/brpc/span.cpp:246,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:246,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:247,1
    - Dst: std::shared_ptr::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:267,1
    - Dst: std::shared_ptr::trace_id
      Src: /src/brpc/src/brpc/span.cpp:270,1
    - Dst: std::shared_ptr::span_id
      Src: /src/brpc/src/brpc/span.cpp:271,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:274,1
    - Dst: std::shared_ptr::_client_list::push_back
      Src: /src/brpc/src/brpc/span.cpp:275,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:278,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:282,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: 284
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 284
    functionName: brpc::Span::CreateBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - butil::get_object<Span>
    - GenerateSpanId
    - std::shared_ptr::span_id
    - __builtin_expect
    - std::shared_ptr::trace_id
    - GenerateTraceId
    - Forbidden
    - brpc::Span::tls_parent
    - std::shared_ptr::_info::clear
    - std::shared_ptr::_client_list::push_back
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<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: 290
      start: 286
    functionDepth: 0
    functionLinenumber: 286
    functionLinenumberEnd: 290
    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:296,1
    - Dst: Forbidden
      Src: /src/brpc/src/brpc/span.cpp:296,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/span.cpp:297,1
    - Dst: GenerateTraceId
      Src: /src/brpc/src/brpc/span.cpp:301,1
    - Dst: GenerateSpanId
      Src: /src/brpc/src/brpc/span.cpp:302,1
    - Dst: empty
      Src: /src/brpc/src/brpc/span.cpp:319,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:320,1
    - Dst: std::shared_ptr::_info::clear
      Src: /src/brpc/src/brpc/span.cpp:321,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 25
    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: 323
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 323
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - unknown_span_name
    - GenerateSpanId
    - butil::get_object<Span>
    - __builtin_expect
    - empty
    - GenerateTraceId
    - Forbidden
    - std::shared_ptr::_info::clear
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<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:328,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:328,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: 330
      start: 325
    functionDepth: 1
    functionLinenumber: 325
    functionLinenumberEnd: 330
    functionName: brpc::Span::CreateServerSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - brpc::Span::CreateServerSpan
    - unknown_span_name
    linkageType: ''
    returnType: std::shared_ptr<Span>
    signature: "std::shared_ptr<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:333,1
    - Dst: unknown_span_name
      Src: /src/brpc/src/brpc/span.cpp:334,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 332
    functionDepth: 0
    functionLinenumber: 332
    functionLinenumberEnd: 335
    functionName: brpc::Span::ResetServerSpanName
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - empty
    - unknown_span_name
    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:339,1
    - Dst: shared_from_this
      Src: /src/brpc/src/brpc/span.cpp:344,1
    - Dst: SpanContainer::SpanContainer
      Src: /src/brpc/src/brpc/span.cpp:344,1
    - Dst: brpc::Span::submit
      Src: /src/brpc/src/brpc/span.cpp:344,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 345
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 345
    functionName: brpc::Span::submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - SpanContainer::SpanContainer
    - brpc::Span::EndAsParent
    - brpc::Span::submit
    - shared_from_this
    linkageType: ''
    returnType: void
    signature: void Span::submit(int64_t cpuwide_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/span.cpp:348,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:349,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:350,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:353,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:354,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:355,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 356
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - va_start
    - BAIDU_SCOPED_LOCK
    - va_end
    - butil::cpuwide_time_us
    - butil::string_vappendf
    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:359,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:360,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:361,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/span.cpp:363,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - fmt
    - args
    argTypes:
    - char*
    - va_list
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 364
      start: 358
    functionDepth: 1
    functionLinenumber: 358
    functionLinenumberEnd: 364
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - BAIDU_SCOPED_LOCK
    - 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:367,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:368,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:369,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:371,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 366
    functionDepth: 1
    functionLinenumber: 366
    functionLinenumberEnd: 372
    functionName: brpc::Span::Annotate
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - append
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_us
    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:375,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:376,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/span.cpp:377,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:380,1
    - Dst: append
      Src: /src/brpc/src/brpc/span.cpp:382,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - info
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 374
    functionDepth: 1
    functionLinenumber: 374
    functionLinenumberEnd: 384
    functionName: brpc::Span::AnnotateCStr
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - append
    - BAIDU_SCOPED_LOCK
    - butil::cpuwide_time_us
    linkageType: ''
    returnType: void
    signature: void Span::AnnotateCStr(const char* info, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:389,1
    - Dst: brpc::Span::CountClientSpans
      Src: /src/brpc/src/brpc/span.cpp:391,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 395
      start: 386
    functionDepth: 1
    functionLinenumber: 386
    functionLinenumberEnd: 395
    functionName: brpc::Span::CountClientSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - brpc::Span::CountClientSpans
    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: 399
      start: 397
    functionDepth: 0
    functionLinenumber: 397
    functionLinenumberEnd: 399
    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:403,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:404,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:405,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:406,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/span.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 401
    functionDepth: 0
    functionLinenumber: 401
    functionLinenumberEnd: 409
    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: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    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:418,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:418,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:418,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/span.cpp:421,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:421,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/span.cpp:428,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:429,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:430,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:430,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/span.cpp:430,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:435,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/span.cpp:436,1
    - Dst: field
      Src: /src/brpc/src/brpc/span.cpp:436,1
    - Dst: length
      Src: /src/brpc/src/brpc/span.cpp:436,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: 439
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 439
    functionName: brpc::SpanInfoExtractor::PopAnnotation
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - strtoll
    - butil::StringSplitter::field
    - std::string
    - 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:
    - Dst: brpc::HasTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:442,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 441
    functionDepth: 2
    functionLinenumber: 441
    functionLinenumberEnd: 443
    functionName: brpc::CanAnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasTlsParentSpan
    linkageType: ''
    returnType: bool
    signature: bool CanAnnotateSpan()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::GetTlsParentSpan
      Src: /src/brpc/src/brpc/span.cpp:446,1
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:449,1
    - Dst: std::shared_ptr::Annotate
      Src: /src/brpc/src/brpc/span.cpp:450,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:451,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fmt
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 453
      start: 445
    functionDepth: 2
    functionLinenumber: 445
    functionLinenumberEnd: 453
    functionName: brpc::AnnotateSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - va_end
    - va_start
    - brpc::GetTlsParentSpan
    - std::shared_ptr::Annotate
    linkageType: ''
    returnType: void
    signature: void AnnotateSpan(const char* fmt, ...)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: va_start
      Src: /src/brpc/src/brpc/span.cpp:458,1
    - Dst: std::shared_ptr<Span>::Annotate
      Src: /src/brpc/src/brpc/span.cpp:459,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/span.cpp:460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - span
    - fmt
    argTypes:
    - std::shared_ptr<Span>
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 455
    functionDepth: 0
    functionLinenumber: 455
    functionLinenumberEnd: 462
    functionName: brpc::AnnotateSpanEx
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - va_start
    - std::shared_ptr<Span>::Annotate
    - va_end
    linkageType: ''
    returnType: void
    signature: void AnnotateSpanEx(std::shared_ptr<Span> span, const char* fmt, ...)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 471
    functionDepth: 0
    functionLinenumber: 471
    functionLinenumberEnd: 471
    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:478,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:479,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:480,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/span.cpp:481,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' db1'
    - ' db2'
    argTypes:
    - SpanDB
    - SpanDB
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 482
    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:491,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:491,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:492,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/span.cpp:492,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 494
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 494
    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: 507
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 507
    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: static_cast<const SpanContainer*>
      Src: /src/brpc/src/brpc/span.cpp:514,1
    - Dst: static_cast<const SpanContainer*>
      Src: /src/brpc/src/brpc/span.cpp:515,1
    - Dst: SpanContainer*::span
      Src: /src/brpc/src/brpc/span.cpp:517,1
    - Dst: SpanContainer*::span
      Src: /src/brpc/src/brpc/span.cpp:518,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c1
    - c2
    argTypes:
    - bvar::Collected*
    - bvar::Collected*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 513
    functionDepth: 0
    functionLinenumber: 513
    functionLinenumberEnd: 521
    functionName: operator()(const bvar::Collected* c1, const bvar::Collected* c2)
      const
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const SpanContainer*>
    - SpanContainer*::span
    linkageType: ''
    returnType: bool
    signature: bool operator()(const bvar::Collected* c1, const bvar::Collected* c2)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::sort
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: begin
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: end
      Src: /src/brpc/src/brpc/span.cpp:528,1
    - Dst: SpanEarlier
      Src: /src/brpc/src/brpc/span.cpp:528,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' list'
    argTypes:
    - std::vector<bvar::Collected*>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 525
    functionDepth: 0
    functionLinenumber: 525
    functionLinenumberEnd: 529
    functionName: brpc::SpanPreprocessor::process
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - SpanEarlier
    - std::sort
    - begin
    - end
    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: 535
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 535
    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: 539
      start: 537
    functionDepth: 0
    functionLinenumber: 537
    functionLinenumberEnd: 539
    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:544,1
    - Dst: AddRefManually
      Src: /src/brpc/src/brpc/span.cpp:548,1
    - Dst: SpanDB*::RemoveRefManually
      Src: /src/brpc/src/brpc/span.cpp:552,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - db
    argTypes:
    - SpanDB*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 541
    functionDepth: 1
    functionLinenumber: 541
    functionLinenumberEnd: 554
    functionName: brpc::ResetSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached:
    - SpanDB*::RemoveRefManually
    - BAIDU_SCOPED_LOCK
    - AddRefManually
    linkageType: ''
    returnType: void
    signature: void ResetSpanDB(SpanDB* db)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:558,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 556
    functionDepth: 2
    functionLinenumber: 556
    functionLinenumberEnd: 559
    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:562,1
    - Dst: SpanPreprocessor::SpanPreprocessor
      Src: /src/brpc/src/brpc/span.cpp:563,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 565
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 565
    functionName: brpc::StartSpanIndexing
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - atexit
    - SpanPreprocessor::SpanPreprocessor
    linkageType: ''
    returnType: void
    signature: void StartSpanIndexing()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/span.cpp:568,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 567
    functionDepth: 0
    functionLinenumber: 567
    functionLinenumberEnd: 572
    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:575,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - db
    argTypes:
    - butil::intrusive_ptr<SpanDB>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 581
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 581
    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: std::shared_ptr<Span>::local_parent
      Src: /src/brpc/src/brpc/span.cpp:589,1
    - Dst: std::shared_ptr<Span>::submit
      Src: /src/brpc/src/brpc/span.cpp:590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - span
    - cpuwide_time_us
    argTypes:
    - std::shared_ptr<Span>
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 583
    functionDepth: 0
    functionLinenumber: 583
    functionLinenumberEnd: 592
    functionName: brpc::Span::Submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 4
    functionsReached:
    - std::shared_ptr<Span>::submit
    - std::shared_ptr<Span>::local_parent
    linkageType: ''
    returnType: void
    signature: void Span::Submit(std::shared_ptr<Span> span, int64_t cpuwide_time_us)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: RpczSpan*::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: Span*::trace_id
      Src: /src/brpc/src/brpc/span.cpp:595,1
    - Dst: RpczSpan*::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:596,1
    - Dst: Span*::span_id
      Src: /src/brpc/src/brpc/span.cpp:596,1
    - Dst: RpczSpan*::set_parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:597,1
    - Dst: Span*::parent_span_id
      Src: /src/brpc/src/brpc/span.cpp:597,1
    - Dst: RpczSpan*::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: Span*::log_id
      Src: /src/brpc/src/brpc/span.cpp:598,1
    - Dst: RpczSpan*::set_base_cid
      Src: /src/brpc/src/brpc/span.cpp:599,1
    - Dst: Span*::base_cid
      Src: /src/brpc/src/brpc/span.cpp:599,1
    - Dst: RpczSpan*::set_ending_cid
      Src: /src/brpc/src/brpc/span.cpp:600,1
    - Dst: Span*::ending_cid
      Src: /src/brpc/src/brpc/span.cpp:600,1
    - Dst: RpczSpan*::set_remote_ip
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: butil::ip2int
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:601,1
    - Dst: RpczSpan*::set_remote_port
      Src: /src/brpc/src/brpc/span.cpp:602,1
    - Dst: Span*::remote_side
      Src: /src/brpc/src/brpc/span.cpp:602,1
    - Dst: RpczSpan*::set_type
      Src: /src/brpc/src/brpc/span.cpp:603,1
    - Dst: Span*::type
      Src: /src/brpc/src/brpc/span.cpp:603,1
    - Dst: RpczSpan*::set_async
      Src: /src/brpc/src/brpc/span.cpp:604,1
    - Dst: Span*::async
      Src: /src/brpc/src/brpc/span.cpp:604,1
    - Dst: RpczSpan*::set_protocol
      Src: /src/brpc/src/brpc/span.cpp:605,1
    - Dst: Span*::protocol
      Src: /src/brpc/src/brpc/span.cpp:605,1
    - Dst: RpczSpan*::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:606,1
    - Dst: Span*::request_size
      Src: /src/brpc/src/brpc/span.cpp:606,1
    - Dst: RpczSpan*::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:607,1
    - Dst: Span*::response_size
      Src: /src/brpc/src/brpc/span.cpp:607,1
    - Dst: RpczSpan*::set_received_real_us
      Src: /src/brpc/src/brpc/span.cpp:608,1
    - Dst: Span*::received_real_us
      Src: /src/brpc/src/brpc/span.cpp:608,1
    - Dst: RpczSpan*::set_start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:609,1
    - Dst: Span*::start_parse_real_us
      Src: /src/brpc/src/brpc/span.cpp:609,1
    - Dst: RpczSpan*::set_start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:610,1
    - Dst: Span*::start_callback_real_us
      Src: /src/brpc/src/brpc/span.cpp:610,1
    - Dst: RpczSpan*::set_start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:611,1
    - Dst: Span*::start_send_real_us
      Src: /src/brpc/src/brpc/span.cpp:611,1
    - Dst: RpczSpan*::set_sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:612,1
    - Dst: Span*::sent_real_us
      Src: /src/brpc/src/brpc/span.cpp:612,1
    - Dst: RpczSpan*::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:613,1
    - Dst: Span*::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:613,1
    - Dst: RpczSpan*::set_info
      Src: /src/brpc/src/brpc/span.cpp:615,1
    - Dst: Span*::info
      Src: /src/brpc/src/brpc/span.cpp:615,1
    - Dst: RpczSpan*::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:616,1
    - Dst: Span*::error_code
      Src: /src/brpc/src/brpc/span.cpp:616,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 22
    argCount: 2
    argNames:
    - span
    - out
    argTypes:
    - Span*
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 617
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 617
    functionName: brpc::Span2Proto
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - RpczSpan*::set_full_method_name
    - Span*::error_code
    - butil::ip2int
    - RpczSpan*::set_parent_span_id
    - Span*::remote_side
    - RpczSpan*::set_received_real_us
    - Span*::response_size
    - RpczSpan*::set_ending_cid
    - RpczSpan*::set_info
    - Span*::async
    - Span*::trace_id
    - RpczSpan*::set_protocol
    - RpczSpan*::set_span_id
    - Span*::received_real_us
    - RpczSpan*::set_error_code
    - Span*::full_method_name
    - RpczSpan*::set_trace_id
    - Span*::ending_cid
    - RpczSpan*::set_async
    - RpczSpan*::set_type
    - Span*::request_size
    - RpczSpan*::set_sent_real_us
    - Span*::info
    - Span*::protocol
    - RpczSpan*::set_remote_port
    - RpczSpan*::set_start_callback_real_us
    - Span*::parent_span_id
    - Span*::sent_real_us
    - RpczSpan*::set_request_size
    - RpczSpan*::set_start_send_real_us
    - RpczSpan*::set_base_cid
    - Span*::start_parse_real_us
    - Span*::span_id
    - Span*::base_cid
    - RpczSpan*::set_start_parse_real_us
    - Span*::start_send_real_us
    - RpczSpan*::set_log_id
    - RpczSpan*::set_response_size
    - RpczSpan*::set_remote_ip
    - Span*::start_callback_real_us
    - Span*::type
    - Span*::log_id
    linkageType: ''
    returnType: void
    signature: void Span2Proto(const Span* span, RpczSpan* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:620,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/span.cpp:621,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - n
    - buf
    argTypes:
    - uint64_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 619
    functionDepth: 0
    functionLinenumber: 619
    functionLinenumberEnd: 622
    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:625,1
    - Dst: ntohl
      Src: /src/brpc/src/brpc/span.cpp:625,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 626
    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:631,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:633,1
    - Dst: auto::empty
      Src: /src/brpc/src/brpc/span.cpp:633,1
    - Dst: butil::FileEnumerator::Next
      Src: /src/brpc/src/brpc/span.cpp:633,1
    - Dst: butil::DeleteFile
      Src: /src/brpc/src/brpc/span.cpp:634,1
    - Dst: time
      Src: /src/brpc/src/brpc/span.cpp:642,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/span.cpp:644,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/span.cpp:645,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/span.cpp:647,1
    - Dst: getpid
      Src: /src/brpc/src/brpc/span.cpp:648,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:653,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:654,1
    - Dst: butil::CreateDirectoryAndGetError
      Src: /src/brpc/src/brpc/span.cpp:658,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:659,1
    - Dst: butil::FilePath::value
      Src: /src/brpc/src/brpc/span.cpp:659,1
    - Dst: SpanDB::id_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:664,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:665,1
    - Dst: SpanDB::id_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:665,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:666,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:667,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:667,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:671,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:672,1
    - Dst: SpanDB::time_db_name::append
      Src: /src/brpc/src/brpc/span.cpp:673,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:674,1
    - Dst: SpanDB::time_db_name::c_str
      Src: /src/brpc/src/brpc/span.cpp:674,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:675,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:676,1
    - Dst: SpanDB::SpanDB
      Src: /src/brpc/src/brpc/span.cpp:679,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:683,1
    - Dst: brpc::SpanDB::Swap
      Src: /src/brpc/src/brpc/span.cpp:685,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 628
    functionDepth: 1
    functionLinenumber: 628
    functionLinenumberEnd: 687
    functionName: brpc::SpanDB::Open
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 3
    functionsReached:
    - SpanDB::id_db_name::append
    - SpanDB::time_db_name::append
    - auto::empty
    - LOG
    - localtime_r
    - getpid
    - butil::CreateDirectoryAndGetError
    - butil::DeleteFile
    - butil::FilePath::value
    - brpc::SpanDB::Swap
    - SpanDB::time_db_name::c_str
    - strftime
    - snprintf
    - SpanDB::SpanDB
    - leveldb::Status::ToString
    - butil::FilePath
    - SpanDB::id_db_name::c_str
    - time
    - butil::FileEnumerator::Next
    - leveldb::Status::ok
    - brpc::SpanDB::Open
    linkageType: ''
    returnType: SpanDB
    signature: SpanDB * SpanDB::Open()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: std::shared_ptr<const Span>::GetStartRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:699,1
    - Dst: std::shared_ptr<const Span>::GetEndRealTimeUs
      Src: /src/brpc/src/brpc/span.cpp:700,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/span.cpp:703,1
    - Dst: BriefSpan::set_trace_id
      Src: /src/brpc/src/brpc/span.cpp:706,1
    - Dst: std::shared_ptr<const Span>::trace_id
      Src: /src/brpc/src/brpc/span.cpp:706,1
    - Dst: BriefSpan::set_span_id
      Src: /src/brpc/src/brpc/span.cpp:707,1
    - Dst: std::shared_ptr<const Span>::span_id
      Src: /src/brpc/src/brpc/span.cpp:707,1
    - Dst: BriefSpan::set_log_id
      Src: /src/brpc/src/brpc/span.cpp:708,1
    - Dst: std::shared_ptr<const Span>::log_id
      Src: /src/brpc/src/brpc/span.cpp:708,1
    - Dst: BriefSpan::set_type
      Src: /src/brpc/src/brpc/span.cpp:709,1
    - Dst: std::shared_ptr<const Span>::type
      Src: /src/brpc/src/brpc/span.cpp:709,1
    - Dst: BriefSpan::set_error_code
      Src: /src/brpc/src/brpc/span.cpp:710,1
    - Dst: std::shared_ptr<const Span>::error_code
      Src: /src/brpc/src/brpc/span.cpp:710,1
    - Dst: BriefSpan::set_request_size
      Src: /src/brpc/src/brpc/span.cpp:711,1
    - Dst: std::shared_ptr<const Span>::request_size
      Src: /src/brpc/src/brpc/span.cpp:711,1
    - Dst: BriefSpan::set_response_size
      Src: /src/brpc/src/brpc/span.cpp:712,1
    - Dst: std::shared_ptr<const Span>::response_size
      Src: /src/brpc/src/brpc/span.cpp:712,1
    - Dst: BriefSpan::set_start_real_us
      Src: /src/brpc/src/brpc/span.cpp:713,1
    - Dst: BriefSpan::set_latency_us
      Src: /src/brpc/src/brpc/span.cpp:714,1
    - Dst: BriefSpan::set_full_method_name
      Src: /src/brpc/src/brpc/span.cpp:715,1
    - Dst: std::shared_ptr<const Span>::full_method_name
      Src: /src/brpc/src/brpc/span.cpp:715,1
    - Dst: BriefSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:716,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:717,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:718,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:742,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:743,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:744,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:745,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:745,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:745,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:746,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:751,1
    - Dst: std::shared_ptr<const Span>::trace_id
      Src: /src/brpc/src/brpc/span.cpp:751,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:752,1
    - Dst: std::shared_ptr<const Span>::span_id
      Src: /src/brpc/src/brpc/span.cpp:752,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:755,1
    - Dst: std::shared_ptr<const Span>::get
      Src: /src/brpc/src/brpc/span.cpp:755,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/span.cpp:767,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/span.cpp:768,1
    - Dst: _client_list::size
      Src: /src/brpc/src/brpc/span.cpp:768,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/span.cpp:771,1
    - Dst: collect_all_spans
      Src: /src/brpc/src/brpc/span.cpp:777,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/span.cpp:780,1
    - Dst: collect_all_spans
      Src: /src/brpc/src/brpc/span.cpp:783,1
    - Dst: std::vector::rbegin
      Src: /src/brpc/src/brpc/span.cpp:789,1
    - Dst: std::vector::rend
      Src: /src/brpc/src/brpc/span.cpp:789,1
    - Dst: auto::get
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: std::shared_ptr<const Span>::get
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: is_active
      Src: /src/brpc/src/brpc/span.cpp:790,1
    - Dst: RpczSpan::add_client_spans
      Src: /src/brpc/src/brpc/span.cpp:791,1
    - Dst: Span2Proto
      Src: /src/brpc/src/brpc/span.cpp:792,1
    - Dst: get
      Src: /src/brpc/src/brpc/span.cpp:792,1
    - Dst: RpczSpan::SerializeToString
      Src: /src/brpc/src/brpc/span.cpp:795,1
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:796,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:797,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/span.cpp:799,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/span.cpp:799,1
    - Dst: Put
      Src: /src/brpc/src/brpc/span.cpp:800,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 55
    argCount: 2
    argNames:
    - span
    - value_buf
    argTypes:
    - std::shared_ptr<const Span>
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 689
    functionDepth: 1
    functionLinenumber: 689
    functionLinenumberEnd: 802
    functionName: brpc::SpanDB::Index
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - RpczSpan::SerializeToString
    - std::shared_ptr<const Span>::trace_id
    - BriefSpan::set_start_real_us
    - leveldb::Slice
    - butil::Status::OK
    - BriefSpan::set_span_id
    - std::shared_ptr<const Span>::GetStartRealTimeUs
    - BriefSpan::set_type
    - std::shared_ptr<const Span>::get
    - Put
    - std::shared_ptr<const Span>::request_size
    - std::vector::reserve
    - std::shared_ptr<const Span>::response_size
    - BriefSpan::set_latency_us
    - std::string*::data
    - auto::get
    - std::string*::size
    - BriefSpan::SerializeToString
    - std::shared_ptr<const Span>::span_id
    - BriefSpan::set_error_code
    - Span2Proto
    - get
    - BriefSpan::set_response_size
    - std::shared_ptr<const Span>::error_code
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - BriefSpan::set_request_size
    - std::shared_ptr<const Span>::full_method_name
    - leveldb::Status::InvalidArgument
    - ToBigEndian
    - std::shared_ptr<const Span>::type
    - RpczSpan::add_client_spans
    - BriefSpan::set_full_method_name
    - _client_list::size
    - std::shared_ptr<const Span>::log_id
    - is_active
    - collect_all_spans
    - BriefSpan::set_log_id
    - std::shared_ptr<const Span>::GetEndRealTimeUs
    - std::vector::rend
    - leveldb::Status::ok
    - std::vector::rbegin
    - BriefSpan::set_trace_id
    linkageType: ''
    returnType: leveldb::Status
    signature: leveldb::Status SpanDB::Index(std::shared_ptr<const Span> span, std::string*
      value_buf)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: leveldb::Status::InvalidArgument
      Src: /src/brpc/src/brpc/span.cpp:807,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:807,1
    - Dst: NewIterator
      Src: /src/brpc/src/brpc/span.cpp:812,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:812,1
    - Dst: leveldb::Iterator*::SeekToFirst
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:813,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:815,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:815,1
    - Dst: ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:819,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:819,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:824,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:824,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:824,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:826,1
    - Dst: BriefSpan::trace_id
      Src: /src/brpc/src/brpc/span.cpp:826,1
    - Dst: ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:827,1
    - Dst: BriefSpan::span_id
      Src: /src/brpc/src/brpc/span.cpp:827,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:829,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:830,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:831,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:835,1
    - Dst: Delete
      Src: /src/brpc/src/brpc/span.cpp:837,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:837,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:838,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:839,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 32
    argCount: 1
    argNames:
    - tm
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 805
    functionDepth: 1
    functionLinenumber: 805
    functionLinenumberEnd: 845
    functionName: brpc::SpanDB::RemoveSpansBefore
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - NewIterator
    - leveldb::ReadOptions
    - ToLittleEndian
    - leveldb::Slice
    - leveldb::Iterator*::SeekToFirst
    - BriefSpan::ParseFromArray
    - BriefSpan::span_id
    - ToBigEndian
    - leveldb::Status::InvalidArgument
    - LOG
    - leveldb::Iterator*::Valid
    - leveldb::Status::ok
    - leveldb::Iterator*::Next
    - leveldb::Iterator*::value
    - Delete
    - BriefSpan::trace_id
    - leveldb::Iterator*::key
    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:849,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:853,1
    - Dst: GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:854,1
    - Dst: brpc::SpanDB::Open
      Src: /src/brpc/src/brpc/span.cpp:858,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:860,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:863,1
    - Dst: butil::intrusive_ptr::reset
      Src: /src/brpc/src/brpc/span.cpp:864,1
    - Dst: butil::intrusive_ptr::Index
      Src: /src/brpc/src/brpc/span.cpp:867,1
    - Dst: shared_from_this
      Src: /src/brpc/src/brpc/span.cpp:867,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:868,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:869,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:869,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:870,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:870,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:870,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:871,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/span.cpp:877,1
    - Dst: butil::intrusive_ptr::RemoveSpansBefore
      Src: /src/brpc/src/brpc/span.cpp:880,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:883,1
    - Dst: leveldb::Status::ToString
      Src: /src/brpc/src/brpc/span.cpp:883,1
    - Dst: leveldb::Status::IsNotFound
      Src: /src/brpc/src/brpc/span.cpp:884,1
    - Dst: leveldb::Status::IsIOError
      Src: /src/brpc/src/brpc/span.cpp:884,1
    - Dst: leveldb::Status::IsCorruption
      Src: /src/brpc/src/brpc/span.cpp:884,1
    - Dst: ResetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:885,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 890
      start: 848
    functionDepth: 2
    functionLinenumber: 848
    functionLinenumberEnd: 890
    functionName: brpc::Span::dump_to_db
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - StartIndexingIfNeeded
    - GetSpanDB
    - butil::gettimeofday_us
    - butil::intrusive_ptr::reset
    - leveldb::Status::IsNotFound
    - LOG
    - ResetSpanDB
    - butil::intrusive_ptr::Index
    - leveldb::Status::ok
    - butil::intrusive_ptr::RemoveSpansBefore
    - leveldb::Status::IsCorruption
    - shared_from_this
    - brpc::SpanDB::Open
    - leveldb::Status::ToString
    - leveldb::Status::IsIOError
    linkageType: ''
    returnType: void
    signature: void Span::dump_to_db()
  - 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::SpanContainer::destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SpanContainer::destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dump_to_db
      Src: /src/brpc/src/brpc/span.cpp:910,1
    - Dst: brpc::SpanContainer::destroy
      Src: /src/brpc/src/brpc/span.cpp:912,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - round
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 913
      start: 908
    functionDepth: 0
    functionLinenumber: 908
    functionLinenumberEnd: 913
    functionName: brpc::SpanContainer::dump_and_destroy
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - brpc::SpanContainer::destroy
    - dump_to_db
    linkageType: ''
    returnType: void
    signature: void SpanContainer::dump_and_destroy(size_t round)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::Collected::submit
      Src: /src/brpc/src/brpc/span.cpp:916,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cpuwide_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 917
      start: 915
    functionDepth: 0
    functionLinenumber: 915
    functionLinenumberEnd: 917
    functionName: brpc::SpanContainer::submit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - bvar::Collected::submit
    linkageType: ''
    returnType: void
    signature: void SpanContainer::submit(int64_t cpuwide_us)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SpanContainer::speed_limit
      Src: /src/brpc/src/brpc/span.cpp:921,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 924
      start: 919
    functionDepth: 0
    functionLinenumber: 919
    functionLinenumberEnd: 924
    functionName: brpc::SpanContainer::speed_limit
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 2
    functionsReached:
    - brpc::SpanContainer::speed_limit
    linkageType: ''
    returnType: bvar::CollectorSpeedLimit
    signature: bvar::CollectorSpeedLimit * SpanContainer::speed_limit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:929,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:930,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:934,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:935,1
    - Dst: butil::intrusive_ptr::id_db::Get
      Src: /src/brpc/src/brpc/span.cpp:938,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:938,1
    - Dst: leveldb::Status::ok
      Src: /src/brpc/src/brpc/span.cpp:939,1
    - Dst: RpczSpan*::ParseFromString
      Src: /src/brpc/src/brpc/span.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:943,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: 947
      start: 928
    functionDepth: 2
    functionLinenumber: 928
    functionLinenumberEnd: 947
    functionName: brpc::FindSpan
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    - leveldb::ReadOptions
    - brpc::ToBigEndian
    - butil::intrusive_ptr::id_db::Get
    - LOG
    - RpczSpan*::ParseFromString
    - leveldb::Status::ok
    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:950,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:951,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:952,1
    - Dst: butil::intrusive_ptr::id_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:955,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:955,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:957,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:958,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:960,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:960,1
    - Dst: leveldb::Iterator*::Next
      Src: /src/brpc/src/brpc/span.cpp:960,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:961,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:962,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:962,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:966,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:966,1
    - Dst: RpczSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:971,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:971,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:971,1
    - Dst: std::deque<RpczSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:972,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:974,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 2
    argNames:
    - trace_id
    - out
    argTypes:
    - uint64_t
    - std::deque<RpczSpan>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 978
      start: 949
    functionDepth: 2
    functionLinenumber: 949
    functionLinenumberEnd: 978
    functionName: brpc::FindSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::id_db::NewIterator
    - leveldb::ReadOptions
    - brpc::GetSpanDB
    - RpczSpan::ParseFromArray
    - brpc::ToBigEndian
    - std::deque<RpczSpan>*::clear
    - leveldb::Iterator*::Seek
    - LOG
    - leveldb::Iterator*::Valid
    - std::deque<RpczSpan>*::push_back
    - brpc::ToLittleEndian
    - leveldb::Iterator*::Next
    - leveldb::Iterator*::value
    - leveldb::Iterator*::key
    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:982,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/span.cpp:983,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:984,1
    - Dst: butil::intrusive_ptr::time_db::NewIterator
      Src: /src/brpc/src/brpc/span.cpp:987,1
    - Dst: leveldb::ReadOptions
      Src: /src/brpc/src/brpc/span.cpp:987,1
    - Dst: brpc::ToBigEndian
      Src: /src/brpc/src/brpc/span.cpp:989,1
    - Dst: leveldb::Iterator*::Seek
      Src: /src/brpc/src/brpc/span.cpp:991,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:992,1
    - Dst: leveldb::Iterator*::SeekToLast
      Src: /src/brpc/src/brpc/span.cpp:993,1
    - Dst: leveldb::Iterator*::Valid
      Src: /src/brpc/src/brpc/span.cpp:997,1
    - Dst: leveldb::Iterator*::Prev
      Src: /src/brpc/src/brpc/span.cpp:997,1
    - Dst: brpc::ToLittleEndian
      Src: /src/brpc/src/brpc/span.cpp:998,1
    - Dst: leveldb::Iterator*::key
      Src: /src/brpc/src/brpc/span.cpp:998,1
    - Dst: BriefSpan::Clear
      Src: /src/brpc/src/brpc/span.cpp:1004,1
    - Dst: BriefSpan::ParseFromArray
      Src: /src/brpc/src/brpc/span.cpp:1005,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:1005,1
    - Dst: leveldb::Iterator*::value
      Src: /src/brpc/src/brpc/span.cpp:1005,1
    - Dst: SpanFilter*::Keep
      Src: /src/brpc/src/brpc/span.cpp:1006,1
    - Dst: std::deque<BriefSpan>*::push_back
      Src: /src/brpc/src/brpc/span.cpp:1007,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/span.cpp:1013,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: 1017
      start: 980
    functionDepth: 2
    functionLinenumber: 980
    functionLinenumberEnd: 1017
    functionName: brpc::ListSpans
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    - leveldb::ReadOptions
    - leveldb::Iterator*::Prev
    - brpc::ToBigEndian
    - butil::intrusive_ptr::time_db::NewIterator
    - BriefSpan::ParseFromArray
    - leveldb::Iterator*::Seek
    - LOG
    - SpanFilter*::Keep
    - leveldb::Iterator*::Valid
    - leveldb::Iterator*::SeekToLast
    - brpc::ToLittleEndian
    - std::deque<BriefSpan>*::clear
    - std::deque<BriefSpan>*::push_back
    - leveldb::Iterator*::value
    - BriefSpan::Clear
    - leveldb::Iterator*::key
    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:1020,1
    - Dst: brpc::GetSpanDB
      Src: /src/brpc/src/brpc/span.cpp:1021,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1027,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1027,1
    - Dst: butil::intrusive_ptr::id_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1030,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1030,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1037,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1037,1
    - Dst: butil::intrusive_ptr::time_db::GetProperty
      Src: /src/brpc/src/brpc/span.cpp:1040,1
    - Dst: leveldb::Slice
      Src: /src/brpc/src/brpc/span.cpp:1040,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1044
      start: 1019
    functionDepth: 2
    functionLinenumber: 1019
    functionLinenumberEnd: 1044
    functionName: brpc::DescribeSpanDB
    functionSourceFile: /src/brpc/src/brpc/span.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::GetSpanDB
    - butil::intrusive_ptr::id_db::GetProperty
    - leveldb::Slice
    - butil::intrusive_ptr::time_db::GetProperty
    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:
    - std::exit
    - LOG
    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:
    - std::exit
    - LOG
    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
    - needs_suspend
    - on_suspend
    - set_caller
    - resume
    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:
    - promise
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    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: 4
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    - bthread::butex_create_checked<std::atomic<int> >
    - store
    - detail::AwaitablePromise*::resume
    - CHECK
    - bthread::butex_wake
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::value
    - on_done
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - set_needs_suspend
    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:
    - join
    - bthread::butex_destroy
    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:
    - bthread::butex_wait
    - auto::value
    - on_suspend
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    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::set_value
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - bthread_timer_add
    - auto::set_needs_suspend
    - Awaitable<int>
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    - butil::microseconds_from_now
    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:
    - std::exit
    - LOG
    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:
    - std::exit
    - LOG
    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
    - needs_suspend
    - on_suspend
    - set_caller
    - resume
    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:
    - promise
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    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: 4
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    - bthread::butex_create_checked<std::atomic<int> >
    - store
    - detail::AwaitablePromise*::resume
    - CHECK
    - bthread::butex_wake
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::value
    - on_done
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - set_needs_suspend
    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:
    - join
    - bthread::butex_destroy
    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:
    - bthread::butex_wait
    - auto::value
    - on_suspend
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    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::set_value
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - bthread_timer_add
    - auto::set_needs_suspend
    - Awaitable<int>
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    - butil::microseconds_from_now
    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:
    - std::exit
    - LOG
    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:
    - std::exit
    - LOG
    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
    - needs_suspend
    - on_suspend
    - set_caller
    - resume
    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:
    - promise
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    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: 4
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    - bthread::butex_create_checked<std::atomic<int> >
    - store
    - detail::AwaitablePromise*::resume
    - CHECK
    - bthread::butex_wake
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::value
    - on_done
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - set_needs_suspend
    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:
    - join
    - bthread::butex_destroy
    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:
    - bthread::butex_wait
    - auto::value
    - on_suspend
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    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::set_value
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - bthread_timer_add
    - auto::set_needs_suspend
    - Awaitable<int>
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    - butil::microseconds_from_now
    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:
    - std::exit
    - LOG
    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:
    - std::exit
    - LOG
    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
    - needs_suspend
    - on_suspend
    - set_caller
    - resume
    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:
    - promise
    - detail::AwaitablePromise<void>::AwaitablePromise<void>
    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: 4
    functionLinenumber: 222
    functionLinenumberEnd: 251
    functionName: brpc::experimental::Coroutine::Coroutine
    functionSourceFile: /src/brpc/src/brpc/coroutine_inl.h
    functionUses: 0
    functionsReached:
    - promise
    - bthread::butex_create_checked<std::atomic<int> >
    - store
    - detail::AwaitablePromise*::resume
    - CHECK
    - bthread::butex_wake
    - dynamic_cast<detail::AwaitablePromise<T>*>
    - detail::AwaitablePromise*::set_callback
    - detail::AwaitablePromise*::value
    - on_done
    - detail::AwaitablePromise<T>::AwaitablePromise<T>
    - set_needs_suspend
    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:
    - join
    - bthread::butex_destroy
    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:
    - bthread::butex_wait
    - auto::value
    - on_suspend
    - CHECK
    - dynamic_cast<detail::AwaitablePromise<T>*>
    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::set_value
    - auto::on_done
    - static_cast<detail::AwaitablePromise<int>*>
    - bthread_timer_add
    - auto::set_needs_suspend
    - Awaitable<int>
    - detail::AwaitablePromise<int>::AwaitablePromise<int>
    - butil::microseconds_from_now
    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: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: brpc::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: 86
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 86
    functionName: brpc::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: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    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: 79
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 79
    functionName: brpc::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: 86
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 86
    functionName: brpc::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: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    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:
    - uint32_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 uint32_t* flag,\n                                bool
      (*validate_fn)(const char*, uint32_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:
    - int64_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 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:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t*
    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 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:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 84
    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:
    - uint32_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 uint32_t* flag,\n                                bool
      (*validate_fn)(const char*, uint32_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:
    - int64_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 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:79,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t*
    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 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:83,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - flag
    argTypes:
    - double*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 81
    functionDepth: 1
    functionLinenumber: 81
    functionLinenumberEnd: 84
    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:
    - load
    - NRefOfVRef
    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:
    - load
    - VersionOfVRef
    - VersionOfVRefId
    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:
    - Forbidden
    - VersionedRefWithId*::SetFailed
    - std::forward<Args>
    - BAIDU_CASSERT
    - MakeVRefId<T>
    - LOG
    - VersionedRefWithId*::_additional_ref_status::store
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - butil::class_name<T>
    - butil::get_resource
    - VersionOfVRef
    - T*::OnCreated
    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:
    - VersionedRefWithIdUniquePtr<T>*::reset
    - VersionOfVRefId
    - VersionedRefWithId*::_versioned_ref::fetch_sub
    - address_resource
    - BAIDU_CASSERT
    - MakeVRef
    - NRefOfVRef
    - CHECK
    - __builtin_expect
    - return_resource
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - VersionOfVRef
    - VersionedRefWithId*::_versioned_ref::compare_exchange_strong
    - T*::BeforeRecycled
    - 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: 1
    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:
    - brpc::VersionedRefWithId<T>::Address
    - VersionedRefWithIdUniquePtr::SetFailed
    - std::forward<Args>
    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:
    - load
    - static_cast<T*>
    - std::forward<Args>
    - compare_exchange_strong
    - VersionOfVRefId
    - WRAPPER_CALL
    - MakeVRef
    - NRefOfVRef
    - brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    - VersionOfVRef
    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: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:510,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:510,1
    - Dst: brpc::VersionedRefWithId<T>::Dereference
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:511,1
    - Dst: sched_yield
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:516,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 521
    functionName: brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - brpc::VersionedRefWithId<T>::Dereference
    - static_cast<T*>
    - sched_yield
    - compare_exchange_strong
    - 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:526,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:528,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:532,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:533,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:534,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:546,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:565,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:566,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:569,1
    - Dst: return_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:570,1
    - Dst: SlotOfVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:570,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:575,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:578,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 524
    functionDepth: 1
    functionLinenumber: 524
    functionLinenumberEnd: 580
    functionName: brpc::VersionedRefWithId<T>::Dereference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - static_cast<T*>
    - VersionOfVRefId
    - compare_exchange_strong
    - fetch_sub
    - SlotOfVRefId<T>
    - MakeVRef
    - NRefOfVRef
    - LOG
    - __builtin_expect
    - return_resource
    - VersionOfVRef
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::Dereference()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:584,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:585,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:586,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:589,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:589,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:589,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:591,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:594,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:597,1
    - Dst: brpc::VersionedRefWithId<T>::description
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:597,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:602,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:603,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:607,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:609,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - at_least_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 583
    functionDepth: 1
    functionLinenumber: 583
    functionLinenumberEnd: 613
    functionName: brpc::VersionedRefWithId<T>::Revive
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    - id
    - static_cast<T*>
    - VersionOfVRefId
    - store
    - WRAPPER_CALL
    - MakeVRef
    - NRefOfVRef
    - LOG
    - brpc::VersionedRefWithId<T>::description
    - CHECK_EQ
    - compare_exchange_weak
    - VersionOfVRef
    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:618,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: const_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: static_cast<const T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 624
    functionName: brpc::VersionedRefWithId<T>::description
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 1
    functionsReached:
    - butil::string_appendf
    - WRAPPER_CALL
    - std::string::append
    - const_cast<T*>
    - static_cast<const T*>
    - butil::class_name<T>
    - id
    - std::string::reserve
    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:
    - load
    - NRefOfVRef
    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:
    - load
    - VersionOfVRef
    - VersionOfVRefId
    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:
    - Forbidden
    - VersionedRefWithId*::SetFailed
    - std::forward<Args>
    - BAIDU_CASSERT
    - MakeVRefId<T>
    - LOG
    - VersionedRefWithId*::_additional_ref_status::store
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - butil::class_name<T>
    - butil::get_resource
    - VersionOfVRef
    - T*::OnCreated
    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:
    - VersionedRefWithIdUniquePtr<T>*::reset
    - VersionOfVRefId
    - VersionedRefWithId*::_versioned_ref::fetch_sub
    - address_resource
    - BAIDU_CASSERT
    - MakeVRef
    - NRefOfVRef
    - CHECK
    - __builtin_expect
    - return_resource
    - VersionedRefWithId*::_versioned_ref::fetch_add
    - VersionOfVRef
    - VersionedRefWithId*::_versioned_ref::compare_exchange_strong
    - T*::BeforeRecycled
    - 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: 1
    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:
    - brpc::VersionedRefWithId<T>::Address
    - VersionedRefWithIdUniquePtr::SetFailed
    - std::forward<Args>
    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:
    - load
    - static_cast<T*>
    - std::forward<Args>
    - compare_exchange_strong
    - VersionOfVRefId
    - WRAPPER_CALL
    - MakeVRef
    - NRefOfVRef
    - brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    - VersionOfVRef
    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: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:510,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:510,1
    - Dst: brpc::VersionedRefWithId<T>::Dereference
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:511,1
    - Dst: sched_yield
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:516,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 503
    functionDepth: 2
    functionLinenumber: 503
    functionLinenumberEnd: 521
    functionName: brpc::VersionedRefWithId<T>::ReleaseAdditionalReference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - brpc::VersionedRefWithId<T>::Dereference
    - static_cast<T*>
    - sched_yield
    - compare_exchange_strong
    - 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:526,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:528,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:532,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:533,1
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:534,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:546,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:565,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:566,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:569,1
    - Dst: return_resource
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:570,1
    - Dst: SlotOfVRefId<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:570,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:575,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:578,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 580
      start: 524
    functionDepth: 1
    functionLinenumber: 524
    functionLinenumberEnd: 580
    functionName: brpc::VersionedRefWithId<T>::Dereference
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - static_cast<T*>
    - VersionOfVRefId
    - compare_exchange_strong
    - fetch_sub
    - SlotOfVRefId<T>
    - MakeVRef
    - NRefOfVRef
    - LOG
    - __builtin_expect
    - return_resource
    - VersionOfVRef
    linkageType: ''
    returnType: int
    signature: int VersionedRefWithId<T>::Dereference()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: VersionOfVRefId
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:584,1
    - Dst: load
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:585,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:586,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:589,1
    - Dst: VersionOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:589,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:589,1
    - Dst: NRefOfVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:591,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:594,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:597,1
    - Dst: brpc::VersionedRefWithId<T>::description
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:597,1
    - Dst: compare_exchange_weak
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:602,1
    - Dst: MakeVRef
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:603,1
    - Dst: store
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:607,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:609,1
    - Dst: static_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:609,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - at_least_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 583
    functionDepth: 2
    functionLinenumber: 583
    functionLinenumberEnd: 613
    functionName: brpc::VersionedRefWithId<T>::Revive
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 0
    functionsReached:
    - load
    - id
    - static_cast<T*>
    - VersionOfVRefId
    - store
    - WRAPPER_CALL
    - MakeVRef
    - NRefOfVRef
    - LOG
    - brpc::VersionedRefWithId<T>::description
    - CHECK_EQ
    - compare_exchange_weak
    - VersionOfVRef
    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:618,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: butil::class_name<T>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: id
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:619,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: WRAPPER_CALL
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:620,1
    - Dst: const_cast<T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: static_cast<const T*>
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:621,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/versioned_ref_with_id.h:622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 624
    functionName: brpc::VersionedRefWithId<T>::description
    functionSourceFile: /src/brpc/src/brpc/versioned_ref_with_id.h
    functionUses: 2
    functionsReached:
    - butil::string_appendf
    - WRAPPER_CALL
    - std::string::append
    - const_cast<T*>
    - static_cast<const T*>
    - butil::class_name<T>
    - id
    - std::string::reserve
    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::MergeFrom
    - brpc::Serializer::SharedCtor
    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:
    - _callback
    - LOG
    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:
    - _callback
    - LOG
    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::MergeFrom
    - brpc::Serializer::SharedCtor
    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:
    - _callback
    - LOG
    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:
    - _callback
    - LOG
    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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: brpc::TcpTransport::Debug
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Debug(std::ostream &os) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 37
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 37
    functionName: brpc::TcpTransport::Debug
    functionSourceFile: /src/brpc/src/brpc/tcp_transport.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Debug(std::ostream &os) override
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - msg
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 32
    functionName: DEBUG_PRINT
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DEBUG_PRINT(msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - server
    - bucket
    - manifest
    argTypes:
    - std::string
    - std::string
    - CouchbaseManifestManager::CollectionManifest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: "brpc::CouchbaseManifestManager::setBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest
      manifest)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool brpc::CouchbaseManifestManager::setBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest
      manifest)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/couchbase.cpp:76,1
    - Dst: end
      Src: /src/brpc/src/brpc/couchbase.cpp:77,1
    - Dst: auto::second::find
      Src: /src/brpc/src/brpc/couchbase.cpp:80,1
    - Dst: auto::second::end
      Src: /src/brpc/src/brpc/couchbase.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - server
    - bucket
    - manifest
    argTypes:
    - std::string
    - std::string
    - CouchbaseManifestManager::CollectionManifest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 86
    functionName: "brpc::CouchbaseManifestManager::getBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest*
      manifest)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - auto::second::find
    - auto::second::end
    - find
    - end
    linkageType: ''
    returnType: bool
    signature: "bool brpc::CouchbaseManifestManager::getBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest*
      manifest)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:92,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::find
      Src: /src/brpc/src/brpc/couchbase.cpp:95,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::end
      Src: /src/brpc/src/brpc/couchbase.cpp:96,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:97,1
    - Dst: auto::second::find
      Src: /src/brpc/src/brpc/couchbase.cpp:100,1
    - Dst: auto::second::end
      Src: /src/brpc/src/brpc/couchbase.cpp:101,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:102,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 4
    argNames:
    - manifest
    - scope
    - collection
    - collection_id
    argTypes:
    - CouchbaseManifestManager::CollectionManifest*
    - std::string
    - std::string
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 108
    functionName: "brpc::CouchbaseManifestManager::getManifestToCollectionId(\n    CouchbaseManifestManager::CollectionManifest*
      manifest, std::string scope,\n    std::string collection, uint8_t* collection_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - auto::second::find
    - CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::end
    - auto::second::end
    - CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::find
    linkageType: ''
    returnType: bool
    signature: "bool brpc::CouchbaseManifestManager::getManifestToCollectionId(\n
      \   CouchbaseManifestManager::CollectionManifest* manifest, std::string scope,\n
      \   std::string collection, uint8_t* collection_id)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:114,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::uid::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:119,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:120,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:122,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:123,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/couchbase.cpp:129,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:129,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/brpc/couchbase.cpp:131,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/brpc/couchbase.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/couchbase.cpp:136,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:137,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:142,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:142,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:143,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:145,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:150,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/couchbase.cpp:150,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:151,1
    - Dst: Size
      Src: /src/brpc/src/brpc/couchbase.cpp:156,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/couchbase.cpp:159,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:160,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:165,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:165,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:166,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:169,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:172,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/couchbase.cpp:172,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:173,1
    - Dst: Size
      Src: /src/brpc/src/brpc/couchbase.cpp:181,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/couchbase.cpp:185,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:186,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:192,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:192,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:193,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:197,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:200,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:200,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:201,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:205,1
    - Dst: std::stoul
      Src: /src/brpc/src/brpc/couchbase.cpp:211,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:213,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:219,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:221,1
    - Dst: what
      Src: /src/brpc/src/brpc/couchbase.cpp:224,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/couchbase.cpp:234,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 71
    argCount: 2
    argNames:
    - ' json'
    - manifest
    argTypes:
    - std::string
    - CouchbaseManifestManager::CollectionManifest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 238
    functionName: brpc::CouchbaseManifestManager::jsonToCollectionManifest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - what
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - empty
    - static_cast<uint8_t>
    - CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::clear
    - HasMember
    - DEBUG_PRINT
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::move
    - IsObject
    - GetString
    - IsString
    - c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - CouchbaseManifestManager::CollectionManifest*::uid::clear
    - Size
    - IsArray
    - std::stoul
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseManifestManager::jsonToCollectionManifest(\n    const
      std::string& json,\n    CouchbaseManifestManager::CollectionManifest* manifest)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:247,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:250,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:251,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:254,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:255,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:260,1
    - Dst: CouchbaseOperations::CouchbaseRequest::getCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:261,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:262,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:264,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:265,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:266,1
    - Dst: CouchbaseOperations::CouchbaseResponse::popManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:270,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:271,1
    - Dst: CouchbaseOperations::CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:272,1
    - Dst: brpc::CouchbaseManifestManager::jsonToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:276,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:278,1
    - Dst: getBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:282,1
    - Dst: setBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:285,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:287,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:291,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:302,1
    - Dst: setBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:304,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:306,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:310,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:315,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:320,1
    - Dst: 'std:: unordered_map<std::string, CollectionManifest>*::find'
      Src: /src/brpc/src/brpc/couchbase.cpp:323,1
    - Dst: 'std:: unordered_map<std::string, CollectionManifest>*::end'
      Src: /src/brpc/src/brpc/couchbase.cpp:324,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:329,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:335,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 65
    argCount: 4
    argNames:
    - channel
    - ' server'
    - ' bucket'
    - local_collection_manifest_cache
    argTypes:
    - brpc::Channel*
    - std::string
    - std::string
    - 'std:: unordered_map<std::string, CollectionManifest>*'
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 240
    functionDepth: 2
    functionLinenumber: 240
    functionLinenumberEnd: 341
    functionName: brpc::CouchbaseManifestManager::refreshCollectionManifest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - setBucketToCollectionManifest
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseOperations::CouchbaseResponse::lastError
    - CouchbaseOperations::CouchbaseRequest::getCollectionManifest
    - 'std:: unordered_map<std::string, CollectionManifest>*::end'
    - brpc::Controller::Failed
    - CouchbaseOperations::CouchbaseResponse::popManifest
    - brpc::Controller::ErrorText
    - empty
    - brpc::CouchbaseManifestManager::jsonToCollectionManifest
    - getBucketToCollectionManifest
    - 'std:: unordered_map<std::string, CollectionManifest>*::find'
    - brpc::Channel*::CallMethod
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseManifestManager::refreshCollectionManifest(\n    brpc::Channel*
      channel, const std::string& server, const std::string& bucket,\n    std:: unordered_map<std::string,
      CollectionManifest>*\n        local_collection_manifest_cache)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - key_length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 402
    functionName: "CouchbaseOperations::CouchbaseRequest::hashCrc32(const char* key,\n
      \                                                         size_t key_length)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: "uint32_t CouchbaseOperations::CouchbaseRequest::hashCrc32(const char*
      key,\n                                                          size_t key_length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 407
    functionName: CouchbaseOperations::CouchbaseRequest::sharedCtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::sharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 409
    functionName: CouchbaseOperations::CouchbaseRequest::sharedDtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::sharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: CouchbaseOperations::CouchbaseRequest::setCachedSize(int size) const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::setCachedSize(int size)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 418
    functionName: CouchbaseOperations::CouchbaseRequest::Clear()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:452,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:453,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:460,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:460,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:464,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:464,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:467,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:468,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:471,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:471,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:471,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - ' bucket_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 477
    functionName: "CouchbaseOperations::CouchbaseRequest::selectBucketRequest(\n    const
      butil::StringPiece& bucket_name)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - butil::HostToNet16
    - append
    - empty
    - data
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::selectBucketRequest(\n
      \   const butil::StringPiece& bucket_name)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/brpc/src/brpc/couchbase.cpp:504,1
    - Dst: fread
      Src: /src/brpc/src/brpc/couchbase.cpp:506,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/couchbase.cpp:507,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:508,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/couchbase.cpp:511,1
    - Dst: sprintf
      Src: /src/brpc/src/brpc/couchbase.cpp:514,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/couchbase.cpp:519,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/couchbase.cpp:521,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:523,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:524,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:525,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:526,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:527,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:536,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:540,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:545,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:546,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:549,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/couchbase.cpp:549,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:550,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:553,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/couchbase.cpp:553,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:554,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 559
    functionName: CouchbaseOperations::CouchbaseRequest::helloRequest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - std::string
    - sprintf
    - butil::HostToNet16
    - fclose
    - fread
    - fopen
    - append
    - std::string::data
    - butil::HostToNet32
    - reinterpret_cast<const char*>
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::helloRequest()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:563,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:563,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:564,1
    - Dst: helloRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:569,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:570,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:579,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:583,1
    - Dst: length
      Src: /src/brpc/src/brpc/couchbase.cpp:583,1
    - Dst: length
      Src: /src/brpc/src/brpc/couchbase.cpp:584,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/couchbase.cpp:588,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:589,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:589,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:590,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/couchbase.cpp:590,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:591,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:592,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:592,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:592,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:593,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:594,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:594,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:594,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:595,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:596,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:596,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:596,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:597,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/couchbase.cpp:597,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/couchbase.cpp:597,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:598,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' username'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 561
    functionDepth: 1
    functionLinenumber: 561
    functionLinenumberEnd: 603
    functionName: "CouchbaseOperations::CouchbaseRequest::authenticateRequest(\n    const
      butil::StringPiece& username, const butil::StringPiece& password)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - size
    - std::string::size
    - butil::HostToNet16
    - std::string::append
    - length
    - append
    - empty
    - data
    - std::string::data
    - butil::HostToNet32
    - reinterpret_cast<const char*>
    - std::string::reserve
    - helloRequest
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::authenticateRequest(\n
      \   const butil::StringPiece& username, const butil::StringPiece& password)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/couchbase.cpp:607,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 610
    functionName: "CouchbaseOperations::CouchbaseRequest::MergeFrom(\n    const CouchbaseRequest&
      from)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: "void CouchbaseOperations::CouchbaseRequest::MergeFrom(\n    const
      CouchbaseRequest& from)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 614
    functionName: CouchbaseOperations::CouchbaseRequest::IsInitialized() const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/couchbase.cpp:618,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/couchbase.cpp:619,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/couchbase.cpp:620,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - CouchbaseRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 622
    functionName: CouchbaseOperations::CouchbaseRequest::Swap(CouchbaseRequest* other)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::Swap(CouchbaseRequest*
      other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 624
    functionName: CouchbaseOperations::CouchbaseResponse::sharedCtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::sharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 626
    functionDepth: 0
    functionLinenumber: 626
    functionLinenumberEnd: 626
    functionName: CouchbaseOperations::CouchbaseResponse::sharedDtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::sharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 630
    functionName: CouchbaseOperations::CouchbaseResponse::setCachedSize(int size)
      const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::setCachedSize(int size)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 632
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 632
    functionName: CouchbaseOperations::CouchbaseResponse::Clear()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/couchbase.cpp:636,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 634
    functionDepth: 1
    functionLinenumber: 634
    functionLinenumberEnd: 639
    functionName: "CouchbaseOperations::CouchbaseResponse::MergeFrom(\n    const CouchbaseResponse&
      from)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: "void CouchbaseOperations::CouchbaseResponse::MergeFrom(\n    const
      CouchbaseResponse& from)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:642,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: CouchbaseOperations::CouchbaseResponse::IsInitialized() const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/couchbase.cpp:647,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/couchbase.cpp:648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - other
    argTypes:
    - CouchbaseResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 650
    functionName: CouchbaseOperations::CouchbaseResponse::swap(CouchbaseResponse*
      other)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::swap(CouchbaseResponse*
      other)
  - BBCount: 57
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 116
    argCount: 1
    argNames:
    - st
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 770
    functionName: '* CouchbaseOperations::CouchbaseResponse::statusStr(Status st)'
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * CouchbaseOperations::CouchbaseResponse::statusStr(Status st)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:776,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:777,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:778,1
    - Dst: statusStr
      Src: /src/brpc/src/brpc/couchbase.cpp:779,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:781,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:782,1
    - Dst: statusStr
      Src: /src/brpc/src/brpc/couchbase.cpp:783,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:783,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - status_code
    - ' operation'
    - ' error_msg'
    argTypes:
    - uint16_t
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 773
    functionDepth: 1
    functionLinenumber: 773
    functionLinenumberEnd: 785
    functionName: "CouchbaseOperations::CouchbaseResponse::formatErrorMessage(\n    uint16_t
      status_code, const std::string& operation,\n    const std::string& error_msg)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - c_str
    - empty
    - statusStr
    - butil::string_printf
    linkageType: ''
    returnType: std::string
    signature: "std::string CouchbaseOperations::CouchbaseResponse::formatErrorMessage(\n
      \   uint16_t status_code, const std::string& operation,\n    const std::string&
      error_msg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: hashCrc32
      Src: /src/brpc/src/brpc/couchbase.cpp:794,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:794,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:794,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:797,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:797,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:800,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:801,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:801,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:805,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:808,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:811,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:811,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:811,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - command
    - ' key'
    - coll_id
    argTypes:
    - uint8_t
    - butil::StringPiece
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 790
    functionDepth: 1
    functionLinenumber: 790
    functionLinenumberEnd: 816
    functionName: "CouchbaseOperations::CouchbaseRequest::getOrDelete(\n    uint8_t
      command, const butil::StringPiece& key, uint8_t coll_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - hashCrc32
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getOrDelete(\n    uint8_t
      command, const butil::StringPiece& key, uint8_t coll_id)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/couchbase.cpp:826,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:827,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:831,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:834,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:835,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:838,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:839,1
    - Dst: brpc::CouchbaseManifestManager*::getBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:845,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:847,1
    - Dst: brpc::CouchbaseManifestManager*::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:851,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:857,1
    - Dst: brpc::CouchbaseManifestManager*::getManifestToCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:867,1
    - Dst: brpc::CouchbaseManifestManager*::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:871,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:877,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 7
    argNames:
    - collection_name
    - coll_id
    - metadata_tracking
    - channel
    - ' server'
    - ' selected_bucket'
    - local_cache
    argTypes:
    - std::string
    - uint8_t*
    - brpc::CouchbaseManifestManager*
    - brpc::Channel*
    - std::string
    - std::string
    - 'std:: unordered_map<std::string, CouchbaseManifestManager::CollectionManifest>*'
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 891
    functionName: "CouchbaseOperations::CouchbaseRequest::getCachedOrFetchCollectionId(\n
      \   std::string collection_name, uint8_t* coll_id,\n    brpc::CouchbaseManifestManager*
      metadata_tracking, brpc::Channel* channel,\n    const std::string& server, const
      std::string& selected_bucket,\n    std:: unordered_map<std::string, CouchbaseManifestManager::CollectionManifest>*\n
      \       local_cache)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseManifestManager*::getBucketToCollectionManifest
    - DEBUG_PRINT
    - std::string::empty
    - getLocalCachedCollectionId
    - brpc::CouchbaseManifestManager*::refreshCollectionManifest
    - empty
    - brpc::CouchbaseManifestManager*::getManifestToCollectionId
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getCachedOrFetchCollectionId(\n
      \   std::string collection_name, uint8_t* coll_id,\n    brpc::CouchbaseManifestManager*
      metadata_tracking, brpc::Channel* channel,\n    const std::string& server, const
      std::string& selected_bucket,\n    std:: unordered_map<std::string, CouchbaseManifestManager::CollectionManifest>*\n
      \       local_cache)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:896,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:902,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:903,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:905,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:908,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:915,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:917,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:919,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:922,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:929,1
    - Dst: getOrDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:930,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 5
    argNames:
    - ' key'
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 893
    functionDepth: 1
    functionLinenumber: 893
    functionLinenumberEnd: 931
    functionName: "CouchbaseOperations::CouchbaseRequest::getRequest(\n    const butil::StringPiece&
      key, std::string collection_name,\n    brpc::Channel* channel, const std::string&
      server, const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - getCachedOrFetchCollectionId
    - empty
    - getOrDelete
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getRequest(\n    const
      butil::StringPiece& key, std::string collection_name,\n    brpc::Channel* channel,
      const std::string& server, const std::string& bucket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:936,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:942,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:943,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:945,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:948,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:955,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:957,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:959,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:962,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:969,1
    - Dst: getOrDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:970,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 5
    argNames:
    - ' key'
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 971
    functionName: "CouchbaseOperations::CouchbaseRequest::deleteRequest(\n    const
      butil::StringPiece& key, std::string collection_name,\n    brpc::Channel* channel,
      const std::string& server, const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - getCachedOrFetchCollectionId
    - empty
    - getOrDelete
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::deleteRequest(\n    const
      butil::StringPiece& key, std::string collection_name,\n    brpc::Channel* channel,
      const std::string& server, const std::string& bucket)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:982,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:985,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:988,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:990,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:994,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1001,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1004,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1010,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1013,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1016,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1017,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1019,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1024,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1030,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1036,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1039,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1041,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/couchbase.cpp:1043,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1046,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1047,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1052,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 61
    argCount: 3
    argNames:
    - value
    - flags
    - cas_value
    argTypes:
    - butil::IOBuf*
    - uint32_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 979
    functionDepth: 1
    functionLinenumber: 979
    functionLinenumberEnd: 1054
    functionName: "CouchbaseOperations::CouchbaseResponse::popGet(butil::IOBuf* value,\n
      \                                                   uint32_t* flags,\n                                                    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - DEBUG_PRINT
    - butil::IOBuf*::clear
    - clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popGet(butil::IOBuf*
      value,\n                                                    uint32_t* flags,\n
      \                                                   uint64_t* cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/couchbase.cpp:1059,1
    - Dst: popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:1060,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1061,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: 1065
      start: 1056
    functionDepth: 1
    functionLinenumber: 1056
    functionLinenumberEnd: 1065
    functionName: "CouchbaseOperations::CouchbaseResponse::popGet(std::string* value,\n
      \                                                   uint32_t* flags,\n                                                    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - popGet
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popGet(std::string* value,\n
      \                                                   uint32_t* flags,\n                                                    uint64_t*
      cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1071,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1070
    functionDepth: 0
    functionLinenumber: 1070
    functionLinenumberEnd: 1072
    functionName: CouchbaseOperations::CouchbaseResponse::popDelete()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popDelete()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: hashCrc32
      Src: /src/brpc/src/brpc/couchbase.cpp:1102,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1102,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1102,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:1105,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1105,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:1108,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1109,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1109,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1110,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/couchbase.cpp:1111,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1112,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1113,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1114,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1117,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1120,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1120,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1120,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1123,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1123,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1123,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 7
    argNames:
    - command
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - coll_id
    argTypes:
    - uint8_t
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1128
      start: 1095
    functionDepth: 1
    functionLinenumber: 1095
    functionLinenumberEnd: 1128
    functionName: "CouchbaseOperations::CouchbaseRequest::store(\n    uint8_t command,
      const butil::StringPiece& key,\n    const butil::StringPiece& value, uint32_t
      flags, uint32_t exptime,\n    uint64_t cas_value, uint8_t coll_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - hashCrc32
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::store(\n    uint8_t command,
      const butil::StringPiece& key,\n    const butil::StringPiece& value, uint32_t
      flags, uint32_t exptime,\n    uint64_t cas_value, uint8_t coll_id)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1136,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1139,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1142,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1144,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1148,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1152,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1155,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1160,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1164,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1165,1
    - Dst: couchbaseBinaryCommandToString
      Src: /src/brpc/src/brpc/couchbase.cpp:1166,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1168,1
    - Dst: couchbaseBinaryCommandToString
      Src: /src/brpc/src/brpc/couchbase.cpp:1169,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1174,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1176,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1180,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 40
    argCount: 2
    argNames:
    - command
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1134
    functionDepth: 1
    functionLinenumber: 1134
    functionLinenumberEnd: 1182
    functionName: "CouchbaseOperations::CouchbaseResponse::popStore(uint8_t command,\n
      \                                                     uint64_t* cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - couchbaseBinaryCommandToString
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popStore(uint8_t command,\n
      \                                                     uint64_t* cas_value)"
  - BBCount: 43
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 87
    argCount: 1
    argNames:
    - cmd
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1273
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1273
    functionName: "*\nCouchbaseOperations::CouchbaseResponse::couchbaseBinaryCommandToString(\n
      \   uint8_t cmd)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: "char *\nCouchbaseOperations::CouchbaseResponse::couchbaseBinaryCommandToString(\n
      \   uint8_t cmd)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1280,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1287,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1288,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1290,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1293,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1300,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1302,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1304,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1307,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1314,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1315,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1317
      start: 1275
    functionDepth: 1
    functionLinenumber: 1275
    functionLinenumberEnd: 1317
    functionName: "CouchbaseOperations::CouchbaseRequest::upsertRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::upsertRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1331,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1336
      start: 1319
    functionDepth: 1
    functionLinenumber: 1319
    functionLinenumberEnd: 1336
    functionName: CouchbaseOperations::CouchbaseRequest::getCollectionManifest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::getCollectionManifest()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1343,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1350,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1351,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1353,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1356,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1363,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1365,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1367,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1370,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1377,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1378,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1338
    functionDepth: 1
    functionLinenumber: 1338
    functionLinenumberEnd: 1380
    functionName: "CouchbaseOperations::CouchbaseRequest::addRequest(\n    const butil::StringPiece&
      key, const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime,
      uint64_t cas_value,\n    std::string collection_name, brpc::Channel* channel,
      const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::addRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1387,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1394,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1396,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1403,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1406,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1413,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1415
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1415
    functionName: "CouchbaseOperations::CouchbaseRequest::appendRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::appendRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1422,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1423,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1429,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1431,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1438,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1441,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1448,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1450
      start: 1417
    functionDepth: 1
    functionLinenumber: 1417
    functionLinenumberEnd: 1450
    functionName: "CouchbaseOperations::CouchbaseRequest::prependRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::prependRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1452
    functionDepth: 0
    functionLinenumber: 1452
    functionLinenumberEnd: 1455
    functionName: "CouchbaseOperations::CouchbaseResponse::popAuthenticate(\n    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popAuthenticate(\n    uint64_t*
      cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1458
      start: 1456
    functionDepth: 0
    functionLinenumber: 1456
    functionLinenumberEnd: 1458
    functionName: CouchbaseOperations::CouchbaseResponse::popHello(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popHello(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1459
    functionDepth: 0
    functionLinenumber: 1459
    functionLinenumberEnd: 1461
    functionName: CouchbaseOperations::CouchbaseResponse::popUpsert(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popUpsert(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1464
      start: 1462
    functionDepth: 0
    functionLinenumber: 1462
    functionLinenumberEnd: 1464
    functionName: CouchbaseOperations::CouchbaseResponse::popAdd(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popAdd(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1472
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1472
    functionName: CouchbaseOperations::CouchbaseResponse::popAppend(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popAppend(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1473
    functionDepth: 0
    functionLinenumber: 1473
    functionLinenumberEnd: 1475
    functionName: CouchbaseOperations::CouchbaseResponse::popPrepend(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popPrepend(uint64_t* cas_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1478,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1479,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1485
      start: 1476
    functionDepth: 1
    functionLinenumber: 1476
    functionLinenumberEnd: 1485
    functionName: "CouchbaseOperations::CouchbaseResponse::popSelectBucket(\n    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    - DEBUG_PRINT
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popSelectBucket(\n    uint64_t*
      cas_value)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1489,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1492,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1495,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1498,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1504,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1511,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1512,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1513,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1515,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1519,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1522,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1524,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1526,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1534,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1536,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1541,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1545,1
    - Dst: reinterpret_cast<uint64_t*>
      Src: /src/brpc/src/brpc/couchbase.cpp:1545,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/couchbase.cpp:1548,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1549,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1550,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1554,1
    - Dst: reinterpret_cast<uint8_t*>
      Src: /src/brpc/src/brpc/couchbase.cpp:1554,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/couchbase.cpp:1555,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/couchbase.cpp:1556,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1557,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1559,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1560,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 43
    argCount: 1
    argNames:
    - collection_id
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1562
      start: 1487
    functionDepth: 1
    functionLinenumber: 1487
    functionLinenumberEnd: 1562
    functionName: "CouchbaseOperations::CouchbaseResponse::popCollectionId(\n    uint8_t*
      collection_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint8_t*>
    - butil::NetToHost32
    - DEBUG_PRINT
    - reinterpret_cast<uint64_t*>
    - clear
    - static_cast<int>
    - formatErrorMessage
    - static_cast<int64_t>
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - butil::NetToHost64
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popCollectionId(\n    uint8_t*
      collection_id)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1566,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1569,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1572,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1575,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1581,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1588,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1591,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1594,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1595,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1596,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1598,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1602,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1605,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1606,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1609,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1615,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1616,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1617,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1619,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1624,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1625,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1630,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1633,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1635,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 47
    argCount: 1
    argNames:
    - manifest_json
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1637
      start: 1564
    functionDepth: 1
    functionLinenumber: 1564
    functionLinenumberEnd: 1637
    functionName: "CouchbaseOperations::CouchbaseResponse::popManifest(\n    std::string*
      manifest_json)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - formatErrorMessage
    - static_cast<int64_t>
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popManifest(\n    std::string*
      manifest_json)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:1671,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1671,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1673,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1673,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/couchbase.cpp:1674,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/couchbase.cpp:1675,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1676,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1677,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1680,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1680,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1680,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: 1685
      start: 1667
    functionDepth: 1
    functionLinenumber: 1667
    functionLinenumberEnd: 1685
    functionName: "CouchbaseOperations::CouchbaseRequest::counter(\n    uint8_t command,
      const butil::StringPiece& key, uint64_t delta,\n    uint64_t initial_value,
      uint32_t exptime)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::counter(\n    uint8_t
      command, const butil::StringPiece& key, uint64_t delta,\n    uint64_t initial_value,
      uint32_t exptime)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1701,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1704,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1707,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1709,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1713,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1719,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1722,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1726,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1730,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1734,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1736,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1738,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1744,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1748,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/couchbase.cpp:1749,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1753,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 3
    argNames:
    - command
    - new_value
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1755
      start: 1698
    functionDepth: 1
    functionLinenumber: 1698
    functionLinenumberEnd: 1755
    functionName: "CouchbaseOperations::CouchbaseResponse::popCounter(uint8_t command,\n
      \                                                       uint64_t* new_value,\n
      \                                                       uint64_t* cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - butil::NetToHost64
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popCounter(uint8_t command,\n
      \                                                       uint64_t* new_value,\n
      \                                                       uint64_t* cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1770,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1775
      start: 1760
    functionDepth: 1
    functionLinenumber: 1760
    functionLinenumberEnd: 1775
    functionName: CouchbaseOperations::CouchbaseRequest::versionRequest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::versionRequest()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1778,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1781,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1784,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1786,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1790,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1796,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1799,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1803,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1805,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1811,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1812,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1814,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1819,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1820,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1822,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - version
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1824
      start: 1777
    functionDepth: 1
    functionLinenumber: 1777
    functionLinenumberEnd: 1824
    functionName: CouchbaseOperations::CouchbaseResponse::popVersion(std::string*
      version)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - std::string*::clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popVersion(std::string*
      version)
  - BBCount: 43
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1833,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1838,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1839,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1844,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1845,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:1850,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::getRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1855,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::upsertRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1858,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::addRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1862,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::appendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1866,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::prependRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1870,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::deleteRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1875,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1878,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1885,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/couchbase.cpp:1889,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:1894,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:1895,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1896,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1897,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1900,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:1907,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:1910,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1913,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::metadata_tracking::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:1925,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1928,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1931,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1933,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1934,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/couchbase.cpp:1935,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::getRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1936,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1938,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:1947,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:1948,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1949,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1950,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1953,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:1956,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:1959,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popUpsert
      Src: /src/brpc/src/brpc/couchbase.cpp:1983,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAdd
      Src: /src/brpc/src/brpc/couchbase.cpp:1986,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAppend
      Src: /src/brpc/src/brpc/couchbase.cpp:1989,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popPrepend
      Src: /src/brpc/src/brpc/couchbase.cpp:1992,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:1995,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1998,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2007,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::metadata_tracking::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:2014,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2017,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2025,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2027,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2028,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::upsertRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2031,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::addRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2035,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::appendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2039,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::prependRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2043,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::deleteRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2047,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2051,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2058,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2059,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2060,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2061,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2064,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popUpsert
      Src: /src/brpc/src/brpc/couchbase.cpp:2070,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAdd
      Src: /src/brpc/src/brpc/couchbase.cpp:2073,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAppend
      Src: /src/brpc/src/brpc/couchbase.cpp:2076,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popPrepend
      Src: /src/brpc/src/brpc/couchbase.cpp:2079,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:2082,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2085,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2095,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 221
    argCount: 10
    argNames:
    - op_type
    - ' key'
    - ' value'
    - collection_name
    - result
    - channel
    - ' server'
    - ' bucket'
    - request
    - response
    argTypes:
    - CouchbaseOperations::operation_type
    - std::string
    - std::string
    - std::string
    - CouchbaseOperations::Result*
    - brpc::Channel*
    - std::string
    - std::string
    - CouchbaseOperations::CouchbaseRequest*
    - CouchbaseOperations::CouchbaseResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 1826
    functionDepth: 2
    functionLinenumber: 1826
    functionLinenumberEnd: 2115
    functionName: brpc::sendRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - CouchbaseOperations::CouchbaseRequest*::getRequest
    - CouchbaseOperations::CouchbaseResponse*::popAdd
    - brpc::Controller::ErrorText
    - CouchbaseOperations::CouchbaseRequest*::deleteRequest
    - brpc::Controller::Reset
    - brpc::Channel*::CallMethod
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseOperations::CouchbaseResponse*::lastError
    - CouchbaseOperations::CouchbaseResponse*::popUpsert
    - CouchbaseOperations::CouchbaseRequest*::prependRequest
    - CouchbaseOperations::CouchbaseRequest*::Clear
    - std::to_string
    - CouchbaseOperations::CouchbaseRequest*::addRequest
    - brpc::Controller::Failed
    - CouchbaseOperations::CouchbaseRequest*::upsertRequest
    - CouchbaseOperations::CouchbaseResponse*::Clear
    - CouchbaseOperations::CouchbaseRequest*::metadata_tracking::refreshCollectionManifest
    - CouchbaseOperations::CouchbaseResponse*::popDelete
    - CouchbaseOperations::CouchbaseRequest*::appendRequest
    - brpc::empty
    - CouchbaseOperations::CouchbaseResponse*::popPrepend
    - CouchbaseOperations::CouchbaseResponse*::popGet
    - CouchbaseOperations::CouchbaseResponse*::popAppend
    linkageType: ''
    returnType: bool
    signature: "bool sendRequest(CouchbaseOperations::operation_type op_type, const
      std::string& key,\n                 const std::string& value, std::string collection_name,\n
      \                CouchbaseOperations::Result* result, brpc::Channel* channel,\n
      \                const std::string& server, const std::string& bucket,\n                 CouchbaseOperations::CouchbaseRequest*
      request,\n                 CouchbaseOperations::CouchbaseResponse* response)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2122,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' key'
    - collection_name
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2127
      start: 2116
    functionDepth: 2
    functionLinenumber: 2116
    functionLinenumberEnd: 2127
    functionName: brpc::CouchbaseOperations::get
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::get(const std::string&
      key,\n                                                     std::string collection_name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2132,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2132,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2132,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2133,1
    - Dst: find
      Src: /src/brpc/src/brpc/couchbase.cpp:2136,1
    - Dst: end
      Src: /src/brpc/src/brpc/couchbase.cpp:2137,1
    - Dst: scope_to_collection_id_map::find
      Src: /src/brpc/src/brpc/couchbase.cpp:2139,1
    - Dst: scope_to_collection_id_map::end
      Src: /src/brpc/src/brpc/couchbase.cpp:2140,1
    - Dst: find
      Src: /src/brpc/src/brpc/couchbase.cpp:2142,1
    - Dst: end
      Src: /src/brpc/src/brpc/couchbase.cpp:2142,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2146,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2150,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2154,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - ' bucket'
    - ' scope'
    - ' collection'
    - collection_id
    argTypes:
    - std::string
    - std::string
    - std::string
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2157
      start: 2129
    functionDepth: 1
    functionLinenumber: 2129
    functionLinenumberEnd: 2157
    functionName: "CouchbaseOperations::CouchbaseRequest::getLocalCachedCollectionId(\n
      \   const std::string& bucket, const std::string& scope, const std::string&
      collection,\n    uint8_t* collection_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - find
    - end
    - scope_to_collection_id_map::find
    - scope_to_collection_id_map::end
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getLocalCachedCollectionId(\n
      \   const std::string& bucket, const std::string& scope, const std::string&
      collection,\n    uint8_t* collection_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2163,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2168
      start: 2159
    functionDepth: 2
    functionLinenumber: 2159
    functionLinenumberEnd: 2168
    functionName: brpc::CouchbaseOperations::upsert
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::upsert(\n    const
      std::string& key, const std::string& value, std::string collection_name)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2174,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2176,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' key'
    - collection_name
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2182
      start: 2170
    functionDepth: 2
    functionLinenumber: 2170
    functionLinenumberEnd: 2182
    functionName: brpc::CouchbaseOperations::delete_
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::delete_(\n    const
      std::string& key, std::string collection_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2189,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2194
      start: 2184
    functionDepth: 2
    functionLinenumber: 2184
    functionLinenumberEnd: 2194
    functionName: brpc::CouchbaseOperations::add
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::add(const std::string&
      key,\n                                                     const std::string&
      value,\n                                                     std::string collection_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::authenticateAll
      Src: /src/brpc/src/brpc/couchbase.cpp:2199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' username'
    - ' password'
    - ' server_address'
    - ' bucket_name'
    argTypes:
    - std::string
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2201
      start: 2196
    functionDepth: 1
    functionLinenumber: 2196
    functionLinenumberEnd: 2201
    functionName: brpc::CouchbaseOperations::authenticate
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::authenticateAll
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::authenticate(\n    const
      std::string& username, const std::string& password,\n    const std::string&
      server_address, const std::string& bucket_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::authenticateAll
      Src: /src/brpc/src/brpc/couchbase.cpp:2207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' username'
    - ' password'
    - ' server_address'
    - ' bucket_name'
    - path_to_cert
    argTypes:
    - std::string
    - std::string
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2209
      start: 2203
    functionDepth: 1
    functionLinenumber: 2203
    functionLinenumberEnd: 2209
    functionName: brpc::CouchbaseOperations::authenticateSSL
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::authenticateAll
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::authenticateSSL(\n
      \   const std::string& username, const std::string& password,\n    const std::string&
      server_address, const std::string& bucket_name,\n    std::string path_to_cert)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/src/brpc/couchbase.cpp:2216,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/src/brpc/couchbase.cpp:2229,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/src/brpc/couchbase.cpp:2237,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/src/brpc/couchbase.cpp:2238,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2238,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2239,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2249,1
    - Dst: CouchbaseRequest::authenticateRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2250,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2250,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2250,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2252,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2257,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2258,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2259,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2259,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2263,1
    - Dst: CouchbaseResponse::popHello
      Src: /src/brpc/src/brpc/couchbase.cpp:2267,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2268,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2269,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2273,1
    - Dst: CouchbaseResponse::popAuthenticate
      Src: /src/brpc/src/brpc/couchbase.cpp:2277,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2278,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2279,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2282,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2292,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:2292,1
    - Dst: brpc::CouchbaseOperations::selectBucket
      Src: /src/brpc/src/brpc/couchbase.cpp:2297,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 58
    argCount: 6
    argNames:
    - ' username'
    - ' password'
    - ' server_address'
    - ' bucket_name'
    - enable_ssl
    - path_to_cert
    argTypes:
    - std::string
    - std::string
    - std::string
    - std::string
    - bool
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2299
      start: 2211
    functionDepth: 2
    functionLinenumber: 2211
    functionLinenumberEnd: 2299
    functionName: brpc::CouchbaseOperations::authenticateAll
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 2
    functionsReached:
    - CouchbaseResponse::popHello
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseResponse::lastError
    - brpc::Controller::Failed
    - brpc::Channel*::Init
    - CouchbaseRequest::authenticateRequest
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::CouchbaseOperations::selectBucket
    - brpc::ChannelOptions::mutable_ssl_options
    - CouchbaseResponse::popAuthenticate
    - reinterpret_cast<uintptr_t>
    - c_str
    - brpc::Channel*::CallMethod
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::authenticateAll(\n
      \   const std::string& username, const std::string& password,\n    const std::string&
      server_address, const std::string& bucket_name, bool enable_ssl,\n    std::string
      path_to_cert)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2305,1
    - Dst: CouchbaseRequest::selectBucketRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2307,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2307,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2308,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2314,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2315,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2316,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2317,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2320,1
    - Dst: CouchbaseResponse::popSelectBucket
      Src: /src/brpc/src/brpc/couchbase.cpp:2323,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2326,1
    - Dst: CouchbaseRequest::local_collection_manifest_cache::find
      Src: /src/brpc/src/brpc/couchbase.cpp:2337,1
    - Dst: CouchbaseRequest::local_collection_manifest_cache::end
      Src: /src/brpc/src/brpc/couchbase.cpp:2338,1
    - Dst: getBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:2341,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2343,1
    - Dst: CouchbaseRequest::metadata_tracking::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:2350,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2359,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2364,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2367,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 39
    argCount: 1
    argNames:
    - ' bucket_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2369
      start: 2301
    functionDepth: 2
    functionLinenumber: 2301
    functionLinenumberEnd: 2369
    functionName: brpc::CouchbaseOperations::selectBucket
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 1
    functionsReached:
    - CallMethod
    - CouchbaseRequest::metadata_tracking::refreshCollectionManifest
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseResponse::popSelectBucket
    - CouchbaseResponse::lastError
    - CouchbaseRequest::local_collection_manifest_cache::find
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - getBucketToCollectionManifest
    - CouchbaseRequest::selectBucketRequest
    - CouchbaseRequest::local_collection_manifest_cache::end
    - c_str
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::selectBucket(\n    const
      std::string& bucket_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2375,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2380
      start: 2371
    functionDepth: 2
    functionLinenumber: 2371
    functionLinenumberEnd: 2380
    functionName: brpc::CouchbaseOperations::append
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::append(\n    const
      std::string& key, const std::string& value, std::string collection_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2386,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2392
      start: 2382
    functionDepth: 2
    functionLinenumber: 2382
    functionLinenumberEnd: 2392
    functionName: brpc::CouchbaseOperations::prepend
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::prepend(\n    const
      std::string& key, const std::string& value, std::string collection_name)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2397,1
    - Dst: CouchbaseRequest::versionRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2399,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2400,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2405,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2406,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2407,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2407,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2410,1
    - Dst: CouchbaseResponse::popVersion
      Src: /src/brpc/src/brpc/couchbase.cpp:2414,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2417,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2426
      start: 2394
    functionDepth: 2
    functionLinenumber: 2394
    functionLinenumberEnd: 2426
    functionName: brpc::CouchbaseOperations::version
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseRequest::versionRequest
    - CouchbaseResponse::lastError
    - brpc::Controller::Failed
    - CouchbaseResponse::popVersion
    - brpc::Controller::ErrorText
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: CouchbaseOperations::Result CouchbaseOperations::version()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2430,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2435,1
    - Dst: pop
      Src: /src/brpc/src/brpc/couchbase.cpp:2436,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2438,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2442
      start: 2428
    functionDepth: 1
    functionLinenumber: 2428
    functionLinenumberEnd: 2442
    functionName: brpc::CouchbaseOperations::beginPipeline
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - pop
    - DEBUG_PRINT
    - empty
    - Clear
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::beginPipeline()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2449,1
    - Dst: getRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2455,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2460,1
    - Dst: upsertRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2463,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2468,1
    - Dst: addRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2471,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2476,1
    - Dst: appendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2479,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2484,1
    - Dst: prependRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2487,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2492,1
    - Dst: deleteRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2495,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2500,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2503,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 47
    argCount: 4
    argNames:
    - op_type
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - operation_type
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2507
      start: 2444
    functionDepth: 1
    functionLinenumber: 2444
    functionLinenumberEnd: 2507
    functionName: brpc::CouchbaseOperations::pipelineRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getRequest
    - appendRequest
    - upsertRequest
    - addRequest
    - prependRequest
    - deleteRequest
    - push
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::pipelineRequest(operation_type op_type,\n
      \                                         const std::string& key,\n                                          const
      std::string& value,\n                                          std::string collection_name)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2511,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2512,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2516,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2517,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2520,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2521,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2521,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:2523,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/couchbase.cpp:2524,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2528,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2531,1
    - Dst: brpc::CouchbaseOperations::clearPipeline
      Src: /src/brpc/src/brpc/couchbase.cpp:2534,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2541,1
    - Dst: front
      Src: /src/brpc/src/brpc/couchbase.cpp:2543,1
    - Dst: pop
      Src: /src/brpc/src/brpc/couchbase.cpp:2544,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:2550,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2553,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2559,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popUpsert
      Src: /src/brpc/src/brpc/couchbase.cpp:2563,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2566,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2572,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAdd
      Src: /src/brpc/src/brpc/couchbase.cpp:2576,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2579,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2585,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAppend
      Src: /src/brpc/src/brpc/couchbase.cpp:2590,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2593,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2599,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popPrepend
      Src: /src/brpc/src/brpc/couchbase.cpp:2604,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2607,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2613,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:2617,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2620,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2626,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2630,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2634,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2640,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 110
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2643
      start: 2508
    functionDepth: 2
    functionLinenumber: 2508
    functionLinenumberEnd: 2643
    functionName: brpc::CouchbaseOperations::executePipeline
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - CouchbaseOperations::CouchbaseResponse*::popAdd
    - brpc::Controller::ErrorText
    - empty
    - Clear
    - std::vector::reserve
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseOperations::CouchbaseResponse*::lastError
    - CouchbaseOperations::CouchbaseResponse*::popUpsert
    - pop
    - size
    - CallMethod
    - front
    - std::vector::push_back
    - brpc::Controller::Failed
    - CouchbaseOperations::CouchbaseResponse*::popDelete
    - brpc::CouchbaseOperations::clearPipeline
    - CouchbaseOperations::CouchbaseResponse*::popPrepend
    - CouchbaseOperations::CouchbaseResponse*::popGet
    - CouchbaseOperations::CouchbaseResponse*::popAppend
    linkageType: ''
    returnType: std::vector<CouchbaseOperations::Result>
    signature: std::vector<CouchbaseOperations::Result> CouchbaseOperations::executePipeline()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2646,1
    - Dst: pop
      Src: /src/brpc/src/brpc/couchbase.cpp:2647,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2649,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2652
      start: 2645
    functionDepth: 0
    functionLinenumber: 2645
    functionLinenumberEnd: 2652
    functionName: brpc::CouchbaseOperations::clearPipeline
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 1
    functionsReached:
    - pop
    - empty
    - Clear
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::clearPipeline()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - server
    - bucket
    - manifest
    argTypes:
    - std::string
    - std::string
    - CouchbaseManifestManager::CollectionManifest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: "brpc::CouchbaseManifestManager::setBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest
      manifest)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: "bool brpc::CouchbaseManifestManager::setBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest
      manifest)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/couchbase.cpp:76,1
    - Dst: end
      Src: /src/brpc/src/brpc/couchbase.cpp:77,1
    - Dst: auto::second::find
      Src: /src/brpc/src/brpc/couchbase.cpp:80,1
    - Dst: auto::second::end
      Src: /src/brpc/src/brpc/couchbase.cpp:81,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - server
    - bucket
    - manifest
    argTypes:
    - std::string
    - std::string
    - CouchbaseManifestManager::CollectionManifest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 86
    functionName: "brpc::CouchbaseManifestManager::getBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest*
      manifest)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - auto::second::find
    - auto::second::end
    - find
    - end
    linkageType: ''
    returnType: bool
    signature: "bool brpc::CouchbaseManifestManager::getBucketToCollectionManifest(\n
      \   std::string server, std::string bucket,\n    CouchbaseManifestManager::CollectionManifest*
      manifest)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:92,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::find
      Src: /src/brpc/src/brpc/couchbase.cpp:95,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::end
      Src: /src/brpc/src/brpc/couchbase.cpp:96,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:97,1
    - Dst: auto::second::find
      Src: /src/brpc/src/brpc/couchbase.cpp:100,1
    - Dst: auto::second::end
      Src: /src/brpc/src/brpc/couchbase.cpp:101,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:102,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 4
    argNames:
    - manifest
    - scope
    - collection
    - collection_id
    argTypes:
    - CouchbaseManifestManager::CollectionManifest*
    - std::string
    - std::string
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 108
    functionName: "brpc::CouchbaseManifestManager::getManifestToCollectionId(\n    CouchbaseManifestManager::CollectionManifest*
      manifest, std::string scope,\n    std::string collection, uint8_t* collection_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - auto::second::find
    - CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::end
    - auto::second::end
    - CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::find
    linkageType: ''
    returnType: bool
    signature: "bool brpc::CouchbaseManifestManager::getManifestToCollectionId(\n
      \   CouchbaseManifestManager::CollectionManifest* manifest, std::string scope,\n
      \   std::string collection, uint8_t* collection_id)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:114,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::uid::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:119,1
    - Dst: CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:120,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:122,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:123,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
      Src: /src/brpc/src/brpc/couchbase.cpp:129,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:129,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
      Src: /src/brpc/src/brpc/couchbase.cpp:131,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
      Src: /src/brpc/src/brpc/couchbase.cpp:132,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
      Src: /src/brpc/src/brpc/couchbase.cpp:136,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:137,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:142,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:142,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:143,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:145,1
    - Dst: BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:150,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/couchbase.cpp:150,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:151,1
    - Dst: Size
      Src: /src/brpc/src/brpc/couchbase.cpp:156,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/couchbase.cpp:159,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:160,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:165,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:165,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:166,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:169,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:172,1
    - Dst: IsArray
      Src: /src/brpc/src/brpc/couchbase.cpp:172,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:173,1
    - Dst: Size
      Src: /src/brpc/src/brpc/couchbase.cpp:181,1
    - Dst: IsObject
      Src: /src/brpc/src/brpc/couchbase.cpp:185,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:186,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:192,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:192,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:193,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:197,1
    - Dst: HasMember
      Src: /src/brpc/src/brpc/couchbase.cpp:200,1
    - Dst: IsString
      Src: /src/brpc/src/brpc/couchbase.cpp:200,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:201,1
    - Dst: GetString
      Src: /src/brpc/src/brpc/couchbase.cpp:205,1
    - Dst: std::stoul
      Src: /src/brpc/src/brpc/couchbase.cpp:211,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:213,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:219,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:221,1
    - Dst: what
      Src: /src/brpc/src/brpc/couchbase.cpp:224,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/couchbase.cpp:234,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 71
    argCount: 2
    argNames:
    - ' json'
    - manifest
    argTypes:
    - std::string
    - CouchbaseManifestManager::CollectionManifest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 238
    functionName: brpc::CouchbaseManifestManager::jsonToCollectionManifest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 1
    functionsReached:
    - what
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::GetParseError
    - empty
    - static_cast<uint8_t>
    - CouchbaseManifestManager::CollectionManifest*::scope_to_collection_id_map::clear
    - HasMember
    - DEBUG_PRINT
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::move
    - IsObject
    - GetString
    - IsString
    - c_str
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasParseError
    - CouchbaseManifestManager::CollectionManifest*::uid::clear
    - Size
    - IsArray
    - std::stoul
    - BUTIL_RAPIDJSON_NAMESPACE::Document::HasMember
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseManifestManager::jsonToCollectionManifest(\n    const
      std::string& json,\n    CouchbaseManifestManager::CollectionManifest* manifest)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:247,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:250,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:251,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:254,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:255,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:260,1
    - Dst: CouchbaseOperations::CouchbaseRequest::getCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:261,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:262,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:264,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:265,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:266,1
    - Dst: CouchbaseOperations::CouchbaseResponse::popManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:270,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:271,1
    - Dst: CouchbaseOperations::CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:272,1
    - Dst: brpc::CouchbaseManifestManager::jsonToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:276,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:278,1
    - Dst: getBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:282,1
    - Dst: setBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:285,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:287,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:291,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:302,1
    - Dst: setBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:304,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:306,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:310,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:315,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:320,1
    - Dst: 'std:: unordered_map<std::string, CollectionManifest>*::find'
      Src: /src/brpc/src/brpc/couchbase.cpp:323,1
    - Dst: 'std:: unordered_map<std::string, CollectionManifest>*::end'
      Src: /src/brpc/src/brpc/couchbase.cpp:324,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:329,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:335,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 65
    argCount: 4
    argNames:
    - channel
    - ' server'
    - ' bucket'
    - local_collection_manifest_cache
    argTypes:
    - brpc::Channel*
    - std::string
    - std::string
    - 'std:: unordered_map<std::string, CollectionManifest>*'
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 341
      start: 240
    functionDepth: 2
    functionLinenumber: 240
    functionLinenumberEnd: 341
    functionName: brpc::CouchbaseManifestManager::refreshCollectionManifest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - setBucketToCollectionManifest
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseOperations::CouchbaseResponse::lastError
    - CouchbaseOperations::CouchbaseRequest::getCollectionManifest
    - 'std:: unordered_map<std::string, CollectionManifest>*::end'
    - brpc::Controller::Failed
    - CouchbaseOperations::CouchbaseResponse::popManifest
    - brpc::Controller::ErrorText
    - empty
    - brpc::CouchbaseManifestManager::jsonToCollectionManifest
    - getBucketToCollectionManifest
    - 'std:: unordered_map<std::string, CollectionManifest>*::find'
    - brpc::Channel*::CallMethod
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseManifestManager::refreshCollectionManifest(\n    brpc::Channel*
      channel, const std::string& server, const std::string& bucket,\n    std:: unordered_map<std::string,
      CollectionManifest>*\n        local_collection_manifest_cache)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - key
    - key_length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 402
      start: 343
    functionDepth: 0
    functionLinenumber: 343
    functionLinenumberEnd: 402
    functionName: "CouchbaseOperations::CouchbaseRequest::hashCrc32(const char* key,\n
      \                                                         size_t key_length)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: "uint32_t CouchbaseOperations::CouchbaseRequest::hashCrc32(const char*
      key,\n                                                          size_t key_length)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 407
      start: 404
    functionDepth: 0
    functionLinenumber: 404
    functionLinenumberEnd: 407
    functionName: CouchbaseOperations::CouchbaseRequest::sharedCtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::sharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 409
    functionDepth: 0
    functionLinenumber: 409
    functionLinenumberEnd: 409
    functionName: CouchbaseOperations::CouchbaseRequest::sharedDtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::sharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 411
    functionDepth: 0
    functionLinenumber: 411
    functionLinenumberEnd: 413
    functionName: CouchbaseOperations::CouchbaseRequest::setCachedSize(int size) const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::setCachedSize(int size)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 415
    functionDepth: 1
    functionLinenumber: 415
    functionLinenumberEnd: 418
    functionName: CouchbaseOperations::CouchbaseRequest::Clear()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::Clear()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:452,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:453,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:460,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:460,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:464,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:464,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:467,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:468,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:471,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:471,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:471,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:472,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - ' bucket_name'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 450
    functionDepth: 1
    functionLinenumber: 450
    functionLinenumberEnd: 477
    functionName: "CouchbaseOperations::CouchbaseRequest::selectBucketRequest(\n    const
      butil::StringPiece& bucket_name)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - butil::HostToNet16
    - append
    - empty
    - data
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::selectBucketRequest(\n
      \   const butil::StringPiece& bucket_name)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: fopen
      Src: /src/brpc/src/brpc/couchbase.cpp:504,1
    - Dst: fread
      Src: /src/brpc/src/brpc/couchbase.cpp:506,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/couchbase.cpp:507,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:508,1
    - Dst: fclose
      Src: /src/brpc/src/brpc/couchbase.cpp:511,1
    - Dst: sprintf
      Src: /src/brpc/src/brpc/couchbase.cpp:514,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/couchbase.cpp:519,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/couchbase.cpp:521,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:523,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:524,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:525,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:526,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:527,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:536,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:540,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:545,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:546,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:549,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/couchbase.cpp:549,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:550,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:553,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/couchbase.cpp:553,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:554,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 559
      start: 484
    functionDepth: 1
    functionLinenumber: 484
    functionLinenumberEnd: 559
    functionName: CouchbaseOperations::CouchbaseRequest::helloRequest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - std::string
    - sprintf
    - butil::HostToNet16
    - fclose
    - fread
    - fopen
    - append
    - std::string::data
    - butil::HostToNet32
    - reinterpret_cast<const char*>
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::helloRequest()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:563,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:563,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:564,1
    - Dst: helloRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:569,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:570,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:579,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:583,1
    - Dst: length
      Src: /src/brpc/src/brpc/couchbase.cpp:583,1
    - Dst: length
      Src: /src/brpc/src/brpc/couchbase.cpp:584,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/couchbase.cpp:588,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:589,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:589,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:590,1
    - Dst: reinterpret_cast<const char*>
      Src: /src/brpc/src/brpc/couchbase.cpp:590,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:591,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:592,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:592,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:592,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:593,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:594,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:594,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:594,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:595,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/couchbase.cpp:596,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:596,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:596,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:597,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/couchbase.cpp:597,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/couchbase.cpp:597,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:598,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' username'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 603
      start: 561
    functionDepth: 1
    functionLinenumber: 561
    functionLinenumberEnd: 603
    functionName: "CouchbaseOperations::CouchbaseRequest::authenticateRequest(\n    const
      butil::StringPiece& username, const butil::StringPiece& password)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - size
    - std::string::size
    - butil::HostToNet16
    - std::string::append
    - length
    - append
    - empty
    - data
    - std::string::data
    - butil::HostToNet32
    - reinterpret_cast<const char*>
    - std::string::reserve
    - helloRequest
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::authenticateRequest(\n
      \   const butil::StringPiece& username, const butil::StringPiece& password)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/couchbase.cpp:607,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:608,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 610
      start: 605
    functionDepth: 1
    functionLinenumber: 605
    functionLinenumberEnd: 610
    functionName: "CouchbaseOperations::CouchbaseRequest::MergeFrom(\n    const CouchbaseRequest&
      from)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: "void CouchbaseOperations::CouchbaseRequest::MergeFrom(\n    const
      CouchbaseRequest& from)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 614
      start: 612
    functionDepth: 0
    functionLinenumber: 612
    functionLinenumberEnd: 614
    functionName: CouchbaseOperations::CouchbaseRequest::IsInitialized() const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/couchbase.cpp:618,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/couchbase.cpp:619,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/couchbase.cpp:620,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - other
    argTypes:
    - CouchbaseRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 622
      start: 616
    functionDepth: 1
    functionLinenumber: 616
    functionLinenumberEnd: 622
    functionName: CouchbaseOperations::CouchbaseRequest::Swap(CouchbaseRequest* other)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseRequest::Swap(CouchbaseRequest*
      other)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 624
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 624
    functionName: CouchbaseOperations::CouchbaseResponse::sharedCtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::sharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 626
    functionDepth: 0
    functionLinenumber: 626
    functionLinenumberEnd: 626
    functionName: CouchbaseOperations::CouchbaseResponse::sharedDtor()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::sharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 630
      start: 628
    functionDepth: 0
    functionLinenumber: 628
    functionLinenumberEnd: 630
    functionName: CouchbaseOperations::CouchbaseResponse::setCachedSize(int size)
      const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::setCachedSize(int size)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 632
      start: 632
    functionDepth: 0
    functionLinenumber: 632
    functionLinenumberEnd: 632
    functionName: CouchbaseOperations::CouchbaseResponse::Clear()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/couchbase.cpp:636,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 639
      start: 634
    functionDepth: 1
    functionLinenumber: 634
    functionLinenumberEnd: 639
    functionName: "CouchbaseOperations::CouchbaseResponse::MergeFrom(\n    const CouchbaseResponse&
      from)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    - CHECK_NE
    linkageType: ''
    returnType: void
    signature: "void CouchbaseOperations::CouchbaseResponse::MergeFrom(\n    const
      CouchbaseResponse& from)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:642,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: CouchbaseOperations::CouchbaseResponse::IsInitialized() const
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - empty
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/couchbase.cpp:647,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/couchbase.cpp:648,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - other
    argTypes:
    - CouchbaseResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 650
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 650
    functionName: CouchbaseOperations::CouchbaseResponse::swap(CouchbaseResponse*
      other)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations::CouchbaseResponse::swap(CouchbaseResponse*
      other)
  - BBCount: 57
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 116
    argCount: 1
    argNames:
    - st
    argTypes:
    - Status
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 770
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 770
    functionName: '* CouchbaseOperations::CouchbaseResponse::statusStr(Status st)'
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * CouchbaseOperations::CouchbaseResponse::statusStr(Status st)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:776,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:777,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:778,1
    - Dst: statusStr
      Src: /src/brpc/src/brpc/couchbase.cpp:779,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:781,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:782,1
    - Dst: statusStr
      Src: /src/brpc/src/brpc/couchbase.cpp:783,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:783,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - status_code
    - ' operation'
    - ' error_msg'
    argTypes:
    - uint16_t
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 785
      start: 773
    functionDepth: 1
    functionLinenumber: 773
    functionLinenumberEnd: 785
    functionName: "CouchbaseOperations::CouchbaseResponse::formatErrorMessage(\n    uint16_t
      status_code, const std::string& operation,\n    const std::string& error_msg)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - c_str
    - empty
    - statusStr
    - butil::string_printf
    linkageType: ''
    returnType: std::string
    signature: "std::string CouchbaseOperations::CouchbaseResponse::formatErrorMessage(\n
      \   uint16_t status_code, const std::string& operation,\n    const std::string&
      error_msg)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: hashCrc32
      Src: /src/brpc/src/brpc/couchbase.cpp:794,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:794,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:794,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:797,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:797,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:800,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:801,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:801,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:805,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:808,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:811,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:811,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:811,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - command
    - ' key'
    - coll_id
    argTypes:
    - uint8_t
    - butil::StringPiece
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 790
    functionDepth: 1
    functionLinenumber: 790
    functionLinenumberEnd: 816
    functionName: "CouchbaseOperations::CouchbaseRequest::getOrDelete(\n    uint8_t
      command, const butil::StringPiece& key, uint8_t coll_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - hashCrc32
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getOrDelete(\n    uint8_t
      command, const butil::StringPiece& key, uint8_t coll_id)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/couchbase.cpp:826,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:827,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:831,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:834,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:835,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:838,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:839,1
    - Dst: brpc::CouchbaseManifestManager*::getBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:845,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:847,1
    - Dst: brpc::CouchbaseManifestManager*::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:851,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:857,1
    - Dst: brpc::CouchbaseManifestManager*::getManifestToCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:867,1
    - Dst: brpc::CouchbaseManifestManager*::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:871,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:877,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 39
    argCount: 7
    argNames:
    - collection_name
    - coll_id
    - metadata_tracking
    - channel
    - ' server'
    - ' selected_bucket'
    - local_cache
    argTypes:
    - std::string
    - uint8_t*
    - brpc::CouchbaseManifestManager*
    - brpc::Channel*
    - std::string
    - std::string
    - 'std:: unordered_map<std::string, CouchbaseManifestManager::CollectionManifest>*'
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 891
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 891
    functionName: "CouchbaseOperations::CouchbaseRequest::getCachedOrFetchCollectionId(\n
      \   std::string collection_name, uint8_t* coll_id,\n    brpc::CouchbaseManifestManager*
      metadata_tracking, brpc::Channel* channel,\n    const std::string& server, const
      std::string& selected_bucket,\n    std:: unordered_map<std::string, CouchbaseManifestManager::CollectionManifest>*\n
      \       local_cache)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseManifestManager*::getBucketToCollectionManifest
    - DEBUG_PRINT
    - std::string::empty
    - getLocalCachedCollectionId
    - brpc::CouchbaseManifestManager*::refreshCollectionManifest
    - empty
    - brpc::CouchbaseManifestManager*::getManifestToCollectionId
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getCachedOrFetchCollectionId(\n
      \   std::string collection_name, uint8_t* coll_id,\n    brpc::CouchbaseManifestManager*
      metadata_tracking, brpc::Channel* channel,\n    const std::string& server, const
      std::string& selected_bucket,\n    std:: unordered_map<std::string, CouchbaseManifestManager::CollectionManifest>*\n
      \       local_cache)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:896,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:902,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:903,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:905,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:908,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:915,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:917,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:919,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:922,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:929,1
    - Dst: getOrDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:930,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 5
    argNames:
    - ' key'
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 893
    functionDepth: 1
    functionLinenumber: 893
    functionLinenumberEnd: 931
    functionName: "CouchbaseOperations::CouchbaseRequest::getRequest(\n    const butil::StringPiece&
      key, std::string collection_name,\n    brpc::Channel* channel, const std::string&
      server, const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - getCachedOrFetchCollectionId
    - empty
    - getOrDelete
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getRequest(\n    const
      butil::StringPiece& key, std::string collection_name,\n    brpc::Channel* channel,
      const std::string& server, const std::string& bucket)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:936,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:942,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:943,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:945,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:948,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:955,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:957,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:959,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:962,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:969,1
    - Dst: getOrDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:970,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 5
    argNames:
    - ' key'
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 971
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 971
    functionName: "CouchbaseOperations::CouchbaseRequest::deleteRequest(\n    const
      butil::StringPiece& key, std::string collection_name,\n    brpc::Channel* channel,
      const std::string& server, const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - getCachedOrFetchCollectionId
    - empty
    - getOrDelete
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::deleteRequest(\n    const
      butil::StringPiece& key, std::string collection_name,\n    brpc::Channel* channel,
      const std::string& server, const std::string& bucket)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:982,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:985,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:988,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:990,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:994,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1001,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1004,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1010,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1013,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1016,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1017,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1019,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1024,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1030,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1036,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1039,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1041,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/couchbase.cpp:1043,1
    - Dst: butil::IOBuf*::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1046,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1047,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1052,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 61
    argCount: 3
    argNames:
    - value
    - flags
    - cas_value
    argTypes:
    - butil::IOBuf*
    - uint32_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1054
      start: 979
    functionDepth: 1
    functionLinenumber: 979
    functionLinenumberEnd: 1054
    functionName: "CouchbaseOperations::CouchbaseResponse::popGet(butil::IOBuf* value,\n
      \                                                   uint32_t* flags,\n                                                    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - DEBUG_PRINT
    - butil::IOBuf*::clear
    - clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popGet(butil::IOBuf*
      value,\n                                                    uint32_t* flags,\n
      \                                                   uint64_t* cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/couchbase.cpp:1059,1
    - Dst: popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:1060,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1061,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: 1065
      start: 1056
    functionDepth: 1
    functionLinenumber: 1056
    functionLinenumberEnd: 1065
    functionName: "CouchbaseOperations::CouchbaseResponse::popGet(std::string* value,\n
      \                                                   uint32_t* flags,\n                                                    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::copy_to
    - butil::IOBuf::IOBuf
    - popGet
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popGet(std::string* value,\n
      \                                                   uint32_t* flags,\n                                                    uint64_t*
      cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1071,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1072
      start: 1070
    functionDepth: 0
    functionLinenumber: 1070
    functionLinenumberEnd: 1072
    functionName: CouchbaseOperations::CouchbaseResponse::popDelete()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popDelete()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: hashCrc32
      Src: /src/brpc/src/brpc/couchbase.cpp:1102,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1102,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1102,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:1105,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1105,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:1108,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1109,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1109,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1110,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/couchbase.cpp:1111,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1112,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1113,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1114,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1117,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1120,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1120,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1120,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1123,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1123,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1123,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 7
    argNames:
    - command
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - coll_id
    argTypes:
    - uint8_t
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1128
      start: 1095
    functionDepth: 1
    functionLinenumber: 1095
    functionLinenumberEnd: 1128
    functionName: "CouchbaseOperations::CouchbaseRequest::store(\n    uint8_t command,
      const butil::StringPiece& key,\n    const butil::StringPiece& value, uint32_t
      flags, uint32_t exptime,\n    uint64_t cas_value, uint8_t coll_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - hashCrc32
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::store(\n    uint8_t command,
      const butil::StringPiece& key,\n    const butil::StringPiece& value, uint32_t
      flags, uint32_t exptime,\n    uint64_t cas_value, uint8_t coll_id)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1136,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1139,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1142,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1144,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1148,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1152,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1155,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1160,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1164,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1165,1
    - Dst: couchbaseBinaryCommandToString
      Src: /src/brpc/src/brpc/couchbase.cpp:1166,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1168,1
    - Dst: couchbaseBinaryCommandToString
      Src: /src/brpc/src/brpc/couchbase.cpp:1169,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1174,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1176,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1180,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 40
    argCount: 2
    argNames:
    - command
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1182
      start: 1134
    functionDepth: 1
    functionLinenumber: 1134
    functionLinenumberEnd: 1182
    functionName: "CouchbaseOperations::CouchbaseResponse::popStore(uint8_t command,\n
      \                                                     uint64_t* cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - couchbaseBinaryCommandToString
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popStore(uint8_t command,\n
      \                                                     uint64_t* cas_value)"
  - BBCount: 43
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 87
    argCount: 1
    argNames:
    - cmd
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1273
      start: 1184
    functionDepth: 0
    functionLinenumber: 1184
    functionLinenumberEnd: 1273
    functionName: "*\nCouchbaseOperations::CouchbaseResponse::couchbaseBinaryCommandToString(\n
      \   uint8_t cmd)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: "char *\nCouchbaseOperations::CouchbaseResponse::couchbaseBinaryCommandToString(\n
      \   uint8_t cmd)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1280,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1287,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1288,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1290,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1293,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1300,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1302,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1304,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1307,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1314,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1315,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1317
      start: 1275
    functionDepth: 1
    functionLinenumber: 1275
    functionLinenumberEnd: 1317
    functionName: "CouchbaseOperations::CouchbaseRequest::upsertRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::upsertRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1331,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1336
      start: 1319
    functionDepth: 1
    functionLinenumber: 1319
    functionLinenumberEnd: 1336
    functionName: CouchbaseOperations::CouchbaseRequest::getCollectionManifest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::getCollectionManifest()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1343,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1350,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1351,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1353,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1356,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1363,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1365,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1367,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1370,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1377,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1378,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1380
      start: 1338
    functionDepth: 1
    functionLinenumber: 1338
    functionLinenumberEnd: 1380
    functionName: "CouchbaseOperations::CouchbaseRequest::addRequest(\n    const butil::StringPiece&
      key, const butil::StringPiece& value,\n    uint32_t flags, uint32_t exptime,
      uint64_t cas_value,\n    std::string collection_name, brpc::Channel* channel,
      const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::addRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1387,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1388,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1394,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1396,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1403,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1406,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1413,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1415
      start: 1382
    functionDepth: 1
    functionLinenumber: 1382
    functionLinenumberEnd: 1415
    functionName: "CouchbaseOperations::CouchbaseRequest::appendRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::appendRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1422,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1423,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1429,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1431,1
    - Dst: getLocalCachedCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1438,1
    - Dst: getCachedOrFetchCollectionId
      Src: /src/brpc/src/brpc/couchbase.cpp:1441,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.cpp:1448,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 9
    argNames:
    - ' key'
    - ' value'
    - flags
    - exptime
    - cas_value
    - collection_name
    - channel
    - ' server'
    - ' bucket'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - uint32_t
    - uint32_t
    - uint64_t
    - std::string
    - brpc::Channel*
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1450
      start: 1417
    functionDepth: 1
    functionLinenumber: 1417
    functionLinenumberEnd: 1450
    functionName: "CouchbaseOperations::CouchbaseRequest::prependRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getLocalCachedCollectionId
    - store
    - getCachedOrFetchCollectionId
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::prependRequest(\n    const
      butil::StringPiece& key, const butil::StringPiece& value,\n    uint32_t flags,
      uint32_t exptime, uint64_t cas_value,\n    std::string collection_name, brpc::Channel*
      channel, const std::string& server,\n    const std::string& bucket)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1454,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1455
      start: 1452
    functionDepth: 0
    functionLinenumber: 1452
    functionLinenumberEnd: 1455
    functionName: "CouchbaseOperations::CouchbaseResponse::popAuthenticate(\n    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popAuthenticate(\n    uint64_t*
      cas_value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1457,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1458
      start: 1456
    functionDepth: 0
    functionLinenumber: 1456
    functionLinenumberEnd: 1458
    functionName: CouchbaseOperations::CouchbaseResponse::popHello(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popHello(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1460,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1461
      start: 1459
    functionDepth: 0
    functionLinenumber: 1459
    functionLinenumberEnd: 1461
    functionName: CouchbaseOperations::CouchbaseResponse::popUpsert(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popUpsert(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1463,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1464
      start: 1462
    functionDepth: 0
    functionLinenumber: 1462
    functionLinenumberEnd: 1464
    functionName: CouchbaseOperations::CouchbaseResponse::popAdd(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popAdd(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1471,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1472
      start: 1470
    functionDepth: 0
    functionLinenumber: 1470
    functionLinenumberEnd: 1472
    functionName: CouchbaseOperations::CouchbaseResponse::popAppend(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popAppend(uint64_t* cas_value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1474,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1473
    functionDepth: 0
    functionLinenumber: 1473
    functionLinenumberEnd: 1475
    functionName: CouchbaseOperations::CouchbaseResponse::popPrepend(uint64_t* cas_value)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popPrepend(uint64_t* cas_value)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: popStore
      Src: /src/brpc/src/brpc/couchbase.cpp:1478,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1479,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - cas_value
    argTypes:
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1485
      start: 1476
    functionDepth: 1
    functionLinenumber: 1476
    functionLinenumberEnd: 1485
    functionName: "CouchbaseOperations::CouchbaseResponse::popSelectBucket(\n    uint64_t*
      cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - popStore
    - DEBUG_PRINT
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popSelectBucket(\n    uint64_t*
      cas_value)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1489,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1492,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1495,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1498,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1504,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1511,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1512,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1513,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1515,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1519,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1522,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1524,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1526,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1534,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1536,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1541,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1545,1
    - Dst: reinterpret_cast<uint64_t*>
      Src: /src/brpc/src/brpc/couchbase.cpp:1545,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/couchbase.cpp:1548,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1549,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1550,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1554,1
    - Dst: reinterpret_cast<uint8_t*>
      Src: /src/brpc/src/brpc/couchbase.cpp:1554,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/couchbase.cpp:1555,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/couchbase.cpp:1556,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1557,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1559,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1560,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 43
    argCount: 1
    argNames:
    - collection_id
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1562
      start: 1487
    functionDepth: 1
    functionLinenumber: 1487
    functionLinenumberEnd: 1562
    functionName: "CouchbaseOperations::CouchbaseResponse::popCollectionId(\n    uint8_t*
      collection_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<uint8_t*>
    - butil::NetToHost32
    - DEBUG_PRINT
    - reinterpret_cast<uint64_t*>
    - clear
    - static_cast<int>
    - formatErrorMessage
    - static_cast<int64_t>
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - butil::NetToHost64
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popCollectionId(\n    uint8_t*
      collection_id)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1566,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1569,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1572,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1575,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1581,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1588,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1591,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1594,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1595,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1596,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1598,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1602,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1605,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1606,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1609,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1615,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1616,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:1617,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1619,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1624,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1625,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1630,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1633,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1635,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 47
    argCount: 1
    argNames:
    - manifest_json
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1637
      start: 1564
    functionDepth: 1
    functionLinenumber: 1564
    functionLinenumberEnd: 1637
    functionName: "CouchbaseOperations::CouchbaseResponse::popManifest(\n    std::string*
      manifest_json)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - formatErrorMessage
    - static_cast<int64_t>
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popManifest(\n    std::string*
      manifest_json)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/couchbase.cpp:1671,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1671,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1673,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1673,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/couchbase.cpp:1674,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/couchbase.cpp:1675,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/couchbase.cpp:1676,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1677,1
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1680,1
    - Dst: data
      Src: /src/brpc/src/brpc/couchbase.cpp:1680,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1680,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: 1685
      start: 1667
    functionDepth: 1
    functionLinenumber: 1667
    functionLinenumberEnd: 1685
    functionName: "CouchbaseOperations::CouchbaseRequest::counter(\n    uint8_t command,
      const butil::StringPiece& key, uint64_t delta,\n    uint64_t initial_value,
      uint32_t exptime)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet16
    - append
    - data
    - butil::HostToNet64
    - butil::HostToNet32
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::counter(\n    uint8_t
      command, const butil::StringPiece& key, uint64_t delta,\n    uint64_t initial_value,
      uint32_t exptime)"
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1701,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1704,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1707,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1709,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1713,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1719,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1722,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1726,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1730,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1734,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1736,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1738,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1744,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1748,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/couchbase.cpp:1749,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1753,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 3
    argNames:
    - command
    - new_value
    - cas_value
    argTypes:
    - uint8_t
    - uint64_t*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1755
      start: 1698
    functionDepth: 1
    functionLinenumber: 1698
    functionLinenumberEnd: 1755
    functionName: "CouchbaseOperations::CouchbaseResponse::popCounter(uint8_t command,\n
      \                                                       uint64_t* new_value,\n
      \                                                       uint64_t* cas_value)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - butil::NetToHost64
    - size
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseResponse::popCounter(uint8_t command,\n
      \                                                       uint64_t* new_value,\n
      \                                                       uint64_t* cas_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: append
      Src: /src/brpc/src/brpc/couchbase.cpp:1770,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1775
      start: 1760
    functionDepth: 1
    functionLinenumber: 1760
    functionLinenumberEnd: 1775
    functionName: CouchbaseOperations::CouchbaseRequest::versionRequest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - append
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseRequest::versionRequest()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:1778,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1781,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/couchbase.cpp:1784,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1786,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1790,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1796,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1799,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/couchbase.cpp:1803,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/couchbase.cpp:1805,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1811,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1812,1
    - Dst: formatErrorMessage
      Src: /src/brpc/src/brpc/couchbase.cpp:1814,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1819,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/couchbase.cpp:1820,1
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1822,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - version
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1824
      start: 1777
    functionDepth: 1
    functionLinenumber: 1777
    functionLinenumberEnd: 1824
    functionName: CouchbaseOperations::CouchbaseResponse::popVersion(std::string*
      version)
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - clear
    - std::string*::clear
    - formatErrorMessage
    - pop_front
    - cutn
    - copy_to
    - butil::string_printf
    - size
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::CouchbaseResponse::popVersion(std::string*
      version)
  - BBCount: 43
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1833,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1838,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1839,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/couchbase.cpp:1844,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1845,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:1850,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::getRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1855,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::upsertRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1858,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::addRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1862,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::appendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1866,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::prependRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1870,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::deleteRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1875,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1878,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1885,1
    - Dst: std::to_string
      Src: /src/brpc/src/brpc/couchbase.cpp:1889,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:1894,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:1895,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1896,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1897,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1900,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:1907,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:1910,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1913,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::metadata_tracking::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:1925,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1928,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1931,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1933,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:1934,1
    - Dst: brpc::Controller::Reset
      Src: /src/brpc/src/brpc/couchbase.cpp:1935,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::getRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:1936,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1938,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:1947,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:1948,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1949,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1950,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:1953,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:1956,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:1959,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popUpsert
      Src: /src/brpc/src/brpc/couchbase.cpp:1983,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAdd
      Src: /src/brpc/src/brpc/couchbase.cpp:1986,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAppend
      Src: /src/brpc/src/brpc/couchbase.cpp:1989,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popPrepend
      Src: /src/brpc/src/brpc/couchbase.cpp:1992,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:1995,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:1998,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2007,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::metadata_tracking::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:2014,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2017,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2025,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2027,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2028,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::upsertRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2031,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::addRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2035,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::appendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2039,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::prependRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2043,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::deleteRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2047,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2051,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2058,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2059,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2060,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2061,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2064,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popUpsert
      Src: /src/brpc/src/brpc/couchbase.cpp:2070,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAdd
      Src: /src/brpc/src/brpc/couchbase.cpp:2073,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAppend
      Src: /src/brpc/src/brpc/couchbase.cpp:2076,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popPrepend
      Src: /src/brpc/src/brpc/couchbase.cpp:2079,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:2082,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2085,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2095,1
    CyclomaticComplexity: 42
    EdgeCount: 42
    ICount: 221
    argCount: 10
    argNames:
    - op_type
    - ' key'
    - ' value'
    - collection_name
    - result
    - channel
    - ' server'
    - ' bucket'
    - request
    - response
    argTypes:
    - CouchbaseOperations::operation_type
    - std::string
    - std::string
    - std::string
    - CouchbaseOperations::Result*
    - brpc::Channel*
    - std::string
    - std::string
    - CouchbaseOperations::CouchbaseRequest*
    - CouchbaseOperations::CouchbaseResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2115
      start: 1826
    functionDepth: 2
    functionLinenumber: 1826
    functionLinenumberEnd: 2115
    functionName: brpc::sendRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - CouchbaseOperations::CouchbaseRequest*::getRequest
    - CouchbaseOperations::CouchbaseResponse*::popAdd
    - brpc::Controller::ErrorText
    - CouchbaseOperations::CouchbaseRequest*::deleteRequest
    - brpc::Controller::Reset
    - brpc::Channel*::CallMethod
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseOperations::CouchbaseResponse*::lastError
    - CouchbaseOperations::CouchbaseResponse*::popUpsert
    - CouchbaseOperations::CouchbaseRequest*::prependRequest
    - CouchbaseOperations::CouchbaseRequest*::Clear
    - std::to_string
    - CouchbaseOperations::CouchbaseRequest*::addRequest
    - brpc::Controller::Failed
    - CouchbaseOperations::CouchbaseRequest*::upsertRequest
    - CouchbaseOperations::CouchbaseResponse*::Clear
    - CouchbaseOperations::CouchbaseRequest*::metadata_tracking::refreshCollectionManifest
    - CouchbaseOperations::CouchbaseResponse*::popDelete
    - CouchbaseOperations::CouchbaseRequest*::appendRequest
    - brpc::empty
    - CouchbaseOperations::CouchbaseResponse*::popPrepend
    - CouchbaseOperations::CouchbaseResponse*::popGet
    - CouchbaseOperations::CouchbaseResponse*::popAppend
    linkageType: ''
    returnType: bool
    signature: "bool sendRequest(CouchbaseOperations::operation_type op_type, const
      std::string& key,\n                 const std::string& value, std::string collection_name,\n
      \                CouchbaseOperations::Result* result, brpc::Channel* channel,\n
      \                const std::string& server, const std::string& bucket,\n                 CouchbaseOperations::CouchbaseRequest*
      request,\n                 CouchbaseOperations::CouchbaseResponse* response)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2122,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' key'
    - collection_name
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2127
      start: 2116
    functionDepth: 2
    functionLinenumber: 2116
    functionLinenumberEnd: 2127
    functionName: brpc::CouchbaseOperations::get
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::get(const std::string&
      key,\n                                                     std::string collection_name)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2132,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2132,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2132,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2133,1
    - Dst: find
      Src: /src/brpc/src/brpc/couchbase.cpp:2136,1
    - Dst: end
      Src: /src/brpc/src/brpc/couchbase.cpp:2137,1
    - Dst: scope_to_collection_id_map::find
      Src: /src/brpc/src/brpc/couchbase.cpp:2139,1
    - Dst: scope_to_collection_id_map::end
      Src: /src/brpc/src/brpc/couchbase.cpp:2140,1
    - Dst: find
      Src: /src/brpc/src/brpc/couchbase.cpp:2142,1
    - Dst: end
      Src: /src/brpc/src/brpc/couchbase.cpp:2142,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2146,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2150,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2154,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 4
    argNames:
    - ' bucket'
    - ' scope'
    - ' collection'
    - collection_id
    argTypes:
    - std::string
    - std::string
    - std::string
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2157
      start: 2129
    functionDepth: 1
    functionLinenumber: 2129
    functionLinenumberEnd: 2157
    functionName: "CouchbaseOperations::CouchbaseRequest::getLocalCachedCollectionId(\n
      \   const std::string& bucket, const std::string& scope, const std::string&
      collection,\n    uint8_t* collection_id)"
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - find
    - end
    - scope_to_collection_id_map::find
    - scope_to_collection_id_map::end
    - empty
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::CouchbaseRequest::getLocalCachedCollectionId(\n
      \   const std::string& bucket, const std::string& scope, const std::string&
      collection,\n    uint8_t* collection_id)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2163,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2165,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2168
      start: 2159
    functionDepth: 2
    functionLinenumber: 2159
    functionLinenumberEnd: 2168
    functionName: brpc::CouchbaseOperations::upsert
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::upsert(\n    const
      std::string& key, const std::string& value, std::string collection_name)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2174,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2176,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' key'
    - collection_name
    argTypes:
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2182
      start: 2170
    functionDepth: 2
    functionLinenumber: 2170
    functionLinenumberEnd: 2182
    functionName: brpc::CouchbaseOperations::delete_
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::delete_(\n    const
      std::string& key, std::string collection_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2189,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2191,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2194
      start: 2184
    functionDepth: 2
    functionLinenumber: 2184
    functionLinenumberEnd: 2194
    functionName: brpc::CouchbaseOperations::add
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::add(const std::string&
      key,\n                                                     const std::string&
      value,\n                                                     std::string collection_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::authenticateAll
      Src: /src/brpc/src/brpc/couchbase.cpp:2199,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 4
    argNames:
    - ' username'
    - ' password'
    - ' server_address'
    - ' bucket_name'
    argTypes:
    - std::string
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2201
      start: 2196
    functionDepth: 3
    functionLinenumber: 2196
    functionLinenumberEnd: 2201
    functionName: brpc::CouchbaseOperations::authenticate
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::authenticateAll
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::authenticate(\n    const
      std::string& username, const std::string& password,\n    const std::string&
      server_address, const std::string& bucket_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::CouchbaseOperations::authenticateAll
      Src: /src/brpc/src/brpc/couchbase.cpp:2207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - ' username'
    - ' password'
    - ' server_address'
    - ' bucket_name'
    - path_to_cert
    argTypes:
    - std::string
    - std::string
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2209
      start: 2203
    functionDepth: 3
    functionLinenumber: 2203
    functionLinenumberEnd: 2209
    functionName: brpc::CouchbaseOperations::authenticateSSL
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::CouchbaseOperations::authenticateAll
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::authenticateSSL(\n
      \   const std::string& username, const std::string& password,\n    const std::string&
      server_address, const std::string& bucket_name,\n    std::string path_to_cert)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ChannelOptions::ChannelOptions
      Src: /src/brpc/src/brpc/couchbase.cpp:2216,1
    - Dst: brpc::ChannelOptions::mutable_ssl_options
      Src: /src/brpc/src/brpc/couchbase.cpp:2229,1
    - Dst: brpc::Channel::Channel
      Src: /src/brpc/src/brpc/couchbase.cpp:2237,1
    - Dst: brpc::Channel*::Init
      Src: /src/brpc/src/brpc/couchbase.cpp:2238,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2238,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2239,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2249,1
    - Dst: CouchbaseRequest::authenticateRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2250,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2250,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2250,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2252,1
    - Dst: brpc::Channel*::CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2257,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2258,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2259,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2259,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2263,1
    - Dst: CouchbaseResponse::popHello
      Src: /src/brpc/src/brpc/couchbase.cpp:2267,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2268,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2269,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2273,1
    - Dst: CouchbaseResponse::popAuthenticate
      Src: /src/brpc/src/brpc/couchbase.cpp:2277,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2278,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2279,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2282,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2292,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/couchbase.cpp:2292,1
    - Dst: brpc::CouchbaseOperations::selectBucket
      Src: /src/brpc/src/brpc/couchbase.cpp:2297,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 58
    argCount: 6
    argNames:
    - ' username'
    - ' password'
    - ' server_address'
    - ' bucket_name'
    - enable_ssl
    - path_to_cert
    argTypes:
    - std::string
    - std::string
    - std::string
    - std::string
    - bool
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2299
      start: 2211
    functionDepth: 3
    functionLinenumber: 2211
    functionLinenumberEnd: 2299
    functionName: brpc::CouchbaseOperations::authenticateAll
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 4
    functionsReached:
    - CouchbaseResponse::popHello
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseResponse::lastError
    - brpc::Controller::Failed
    - brpc::Channel*::Init
    - CouchbaseRequest::authenticateRequest
    - brpc::Controller::ErrorText
    - brpc::Channel::Channel
    - brpc::CouchbaseOperations::selectBucket
    - brpc::ChannelOptions::mutable_ssl_options
    - CouchbaseResponse::popAuthenticate
    - reinterpret_cast<uintptr_t>
    - c_str
    - brpc::Channel*::CallMethod
    - brpc::ChannelOptions::ChannelOptions
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::authenticateAll(\n
      \   const std::string& username, const std::string& password,\n    const std::string&
      server_address, const std::string& bucket_name, bool enable_ssl,\n    std::string
      path_to_cert)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2305,1
    - Dst: CouchbaseRequest::selectBucketRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2307,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/couchbase.cpp:2307,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2308,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2314,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2315,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2316,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2317,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2320,1
    - Dst: CouchbaseResponse::popSelectBucket
      Src: /src/brpc/src/brpc/couchbase.cpp:2323,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2326,1
    - Dst: CouchbaseRequest::local_collection_manifest_cache::find
      Src: /src/brpc/src/brpc/couchbase.cpp:2337,1
    - Dst: CouchbaseRequest::local_collection_manifest_cache::end
      Src: /src/brpc/src/brpc/couchbase.cpp:2338,1
    - Dst: getBucketToCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:2341,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2343,1
    - Dst: CouchbaseRequest::metadata_tracking::refreshCollectionManifest
      Src: /src/brpc/src/brpc/couchbase.cpp:2350,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2359,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2364,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2367,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 39
    argCount: 1
    argNames:
    - ' bucket_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2369
      start: 2301
    functionDepth: 2
    functionLinenumber: 2301
    functionLinenumberEnd: 2369
    functionName: brpc::CouchbaseOperations::selectBucket
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 2
    functionsReached:
    - CallMethod
    - CouchbaseRequest::metadata_tracking::refreshCollectionManifest
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseResponse::popSelectBucket
    - CouchbaseResponse::lastError
    - CouchbaseRequest::local_collection_manifest_cache::find
    - brpc::Controller::Failed
    - brpc::Controller::ErrorText
    - getBucketToCollectionManifest
    - CouchbaseRequest::selectBucketRequest
    - CouchbaseRequest::local_collection_manifest_cache::end
    - c_str
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::selectBucket(\n    const
      std::string& bucket_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2375,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2377,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2380
      start: 2371
    functionDepth: 2
    functionLinenumber: 2371
    functionLinenumberEnd: 2380
    functionName: brpc::CouchbaseOperations::append
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::append(\n    const
      std::string& key, const std::string& value, std::string collection_name)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2386,1
    - Dst: sendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2388,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 3
    argNames:
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2392
      start: 2382
    functionDepth: 2
    functionLinenumber: 2382
    functionLinenumberEnd: 2392
    functionName: brpc::CouchbaseOperations::prepend
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - brpc::Controller::Controller
    - sendRequest
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: "CouchbaseOperations::Result CouchbaseOperations::prepend(\n    const
      std::string& key, const std::string& value, std::string collection_name)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2397,1
    - Dst: CouchbaseRequest::versionRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2399,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2400,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2405,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2406,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2407,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2407,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2410,1
    - Dst: CouchbaseResponse::popVersion
      Src: /src/brpc/src/brpc/couchbase.cpp:2414,1
    - Dst: CouchbaseResponse::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2417,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2426
      start: 2394
    functionDepth: 2
    functionLinenumber: 2394
    functionLinenumberEnd: 2426
    functionName: brpc::CouchbaseOperations::version
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - CallMethod
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseRequest::versionRequest
    - CouchbaseResponse::lastError
    - brpc::Controller::Failed
    - CouchbaseResponse::popVersion
    - brpc::Controller::ErrorText
    linkageType: ''
    returnType: CouchbaseOperations::Result
    signature: CouchbaseOperations::Result CouchbaseOperations::version()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2430,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2435,1
    - Dst: pop
      Src: /src/brpc/src/brpc/couchbase.cpp:2436,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2438,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2442
      start: 2428
    functionDepth: 1
    functionLinenumber: 2428
    functionLinenumberEnd: 2442
    functionName: brpc::CouchbaseOperations::beginPipeline
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - pop
    - DEBUG_PRINT
    - empty
    - Clear
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::beginPipeline()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2449,1
    - Dst: getRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2455,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2460,1
    - Dst: upsertRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2463,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2468,1
    - Dst: addRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2471,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2476,1
    - Dst: appendRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2479,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2484,1
    - Dst: prependRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2487,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2492,1
    - Dst: deleteRequest
      Src: /src/brpc/src/brpc/couchbase.cpp:2495,1
    - Dst: push
      Src: /src/brpc/src/brpc/couchbase.cpp:2500,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2503,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 47
    argCount: 4
    argNames:
    - op_type
    - ' key'
    - ' value'
    - collection_name
    argTypes:
    - operation_type
    - std::string
    - std::string
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2507
      start: 2444
    functionDepth: 1
    functionLinenumber: 2444
    functionLinenumberEnd: 2507
    functionName: brpc::CouchbaseOperations::pipelineRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - DEBUG_PRINT
    - getRequest
    - appendRequest
    - upsertRequest
    - addRequest
    - prependRequest
    - deleteRequest
    - push
    linkageType: ''
    returnType: bool
    signature: "bool CouchbaseOperations::pipelineRequest(operation_type op_type,\n
      \                                         const std::string& key,\n                                          const
      std::string& value,\n                                          std::string collection_name)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2511,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2512,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/couchbase.cpp:2516,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/couchbase.cpp:2517,1
    - Dst: brpc::Controller::Failed
      Src: /src/brpc/src/brpc/couchbase.cpp:2520,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2521,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2521,1
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.cpp:2523,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/couchbase.cpp:2524,1
    - Dst: brpc::Controller::ErrorText
      Src: /src/brpc/src/brpc/couchbase.cpp:2528,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2531,1
    - Dst: brpc::CouchbaseOperations::clearPipeline
      Src: /src/brpc/src/brpc/couchbase.cpp:2534,1
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2541,1
    - Dst: front
      Src: /src/brpc/src/brpc/couchbase.cpp:2543,1
    - Dst: pop
      Src: /src/brpc/src/brpc/couchbase.cpp:2544,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popGet
      Src: /src/brpc/src/brpc/couchbase.cpp:2550,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2553,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2559,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popUpsert
      Src: /src/brpc/src/brpc/couchbase.cpp:2563,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2566,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2572,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAdd
      Src: /src/brpc/src/brpc/couchbase.cpp:2576,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2579,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2585,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popAppend
      Src: /src/brpc/src/brpc/couchbase.cpp:2590,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2593,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2599,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popPrepend
      Src: /src/brpc/src/brpc/couchbase.cpp:2604,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2607,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2613,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::popDelete
      Src: /src/brpc/src/brpc/couchbase.cpp:2617,1
    - Dst: CouchbaseOperations::CouchbaseResponse*::lastError
      Src: /src/brpc/src/brpc/couchbase.cpp:2620,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2626,1
    - Dst: DEBUG_PRINT
      Src: /src/brpc/src/brpc/couchbase.cpp:2630,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/couchbase.cpp:2634,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2640,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 110
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2643
      start: 2508
    functionDepth: 2
    functionLinenumber: 2508
    functionLinenumberEnd: 2643
    functionName: brpc::CouchbaseOperations::executePipeline
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 0
    functionsReached:
    - CouchbaseOperations::CouchbaseResponse*::popAdd
    - brpc::Controller::ErrorText
    - empty
    - Clear
    - std::vector::reserve
    - DEBUG_PRINT
    - brpc::Controller::Controller
    - CouchbaseOperations::CouchbaseResponse*::lastError
    - CouchbaseOperations::CouchbaseResponse*::popUpsert
    - pop
    - size
    - CallMethod
    - front
    - std::vector::push_back
    - brpc::Controller::Failed
    - CouchbaseOperations::CouchbaseResponse*::popDelete
    - brpc::CouchbaseOperations::clearPipeline
    - CouchbaseOperations::CouchbaseResponse*::popPrepend
    - CouchbaseOperations::CouchbaseResponse*::popGet
    - CouchbaseOperations::CouchbaseResponse*::popAppend
    linkageType: ''
    returnType: std::vector<CouchbaseOperations::Result>
    signature: std::vector<CouchbaseOperations::Result> CouchbaseOperations::executePipeline()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/couchbase.cpp:2646,1
    - Dst: pop
      Src: /src/brpc/src/brpc/couchbase.cpp:2647,1
    - Dst: Clear
      Src: /src/brpc/src/brpc/couchbase.cpp:2649,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2652
      start: 2645
    functionDepth: 0
    functionLinenumber: 2645
    functionLinenumberEnd: 2652
    functionName: brpc::CouchbaseOperations::clearPipeline
    functionSourceFile: /src/brpc/src/brpc/couchbase.cpp
    functionUses: 2
    functionsReached:
    - pop
    - empty
    - Clear
    linkageType: ''
    returnType: bool
    signature: bool CouchbaseOperations::clearPipeline()
  - 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: 142
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 142
    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:179,1
    - Dst: read
      Src: /src/brpc/src/brpc/global.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:185,1
    - Dst: berror
      Src: /src/brpc/src/brpc/global.cpp:186,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/global.cpp:189,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:191,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/global.cpp:193,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:196,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 200
    functionName: brpc::ReadPortOfDummyServer
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - berror
    - std::min
    - LOG
    - strtol
    - isspace
    - read
    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: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: 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:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 208
    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:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 211
    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:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 214
    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: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: 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: ANNOTATE_MEMORY_LEAK_DISABLE
      Src: /src/brpc/src/brpc/global.cpp:231,1
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/global.cpp:247,1
    - Dst: butil::FileWatcher::init_from_not_exist
      Src: /src/brpc/src/brpc/global.cpp:248,1
    - Dst: ANNOTATE_MEMORY_LEAK_ENABLE
      Src: /src/brpc/src/brpc/global.cpp:249,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:251,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/global.cpp:256,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/global.cpp:262,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/global.cpp:264,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/global.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:272,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/global.cpp:275,1
    - Dst: brpc::TrackMe
      Src: /src/brpc/src/brpc/global.cpp:277,1
    - Dst: IsDummyServerRunning
      Src: /src/brpc/src/brpc/global.cpp:279,1
    - Dst: load
      Src: /src/brpc/src/brpc/global.cpp:280,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/global.cpp:281,1
    - Dst: brpc::ReadPortOfDummyServer
      Src: /src/brpc/src/brpc/global.cpp:282,1
    - Dst: StartDummyServerAt
      Src: /src/brpc/src/brpc/global.cpp:284,1
    - Dst: brpc::SocketMapList
      Src: /src/brpc/src/brpc/global.cpp:291,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/global.cpp:293,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:294,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/global.cpp:296,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/global.cpp:297,1
    - Dst: MallocExtension_ReleaseFreeMemory
      Src: /src/brpc/src/brpc/global.cpp:313,1
    - Dst: malloc_trim
      Src: /src/brpc/src/brpc/global.cpp:317,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 323
    functionName: brpc::GlobalUpdate
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - ANNOTATE_MEMORY_LEAK_DISABLE
    - SocketUniquePtr::UpdateStatsEverySecond
    - butil::FileWatcher::check_and_consume
    - LOG
    - std::vector::size
    - butil::FileWatcher::init_from_not_exist
    - malloc_trim
    - IsDummyServerRunning
    - brpc::SocketMapList
    - ANNOTATE_MEMORY_LEAK_ENABLE
    - butil::FileWatcher::FileWatcher
    - brpc::ReadPortOfDummyServer
    - PLOG_IF
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - MallocExtension_ReleaseFreeMemory
    - StartDummyServerAt
    - load
    - bthread_usleep
    - butil::cpuwide_time_ms
    - brpc::TrackMe
    linkageType: ''
    returnType: void
    signature: void * GlobalUpdate(void*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:340,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:343,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: 344
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 344
    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: 33
    BranchProfiles: []
    Callsites:
    - Dst: sigaction
      Src: /src/brpc/src/brpc/global.cpp:356,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:358,1
    - Dst: signal
      Src: /src/brpc/src/brpc/global.cpp:358,1
    - Dst: SetLogHandler
      Src: /src/brpc/src/brpc/global.cpp:363,1
    - Dst: bthread_set_span_funcs
      Src: /src/brpc/src/brpc/global.cpp:366,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:369,1
    - Dst: SSL_library_init
      Src: /src/brpc/src/brpc/global.cpp:377,1
    - Dst: SSL_load_error_strings
      Src: /src/brpc/src/brpc/global.cpp:379,1
    - Dst: brpc::SSLThreadInit
      Src: /src/brpc/src/brpc/global.cpp:380,1
    - Dst: brpc::SSLDHInit
      Src: /src/brpc/src/brpc/global.cpp:380,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:381,1
    - Dst: InitCommonStrings
      Src: /src/brpc/src/brpc/global.cpp:385,1
    - Dst: GlobalExtensions::GlobalExtensions
      Src: /src/brpc/src/brpc/global.cpp:388,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:390,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:394,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:396,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:397,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:398,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:399,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:400,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:401,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:402,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:403,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:404,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:405,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:408,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:409,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:410,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:411,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:412,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:413,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:414,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:415,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:416,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:417,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:421,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:422,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:425,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:426,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:429,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:430,1
    - Dst: brpc::RegisterChecksumHandler
      Src: /src/brpc/src/brpc/global.cpp:436,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:437,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:446,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:447,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:455,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:456,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:465,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:466,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:476,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:477,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:487,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:488,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:496,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:497,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:506,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:507,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:520,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:521,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:529,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:530,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:541,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:542,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:551,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:552,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:561,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:562,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:571,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:572,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:592,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:593,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:604,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:605,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:613,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:614,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:624,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:625,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:635,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:636,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:645,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:646,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:659,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:660,1
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/global.cpp:664,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:665,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/src/brpc/global.cpp:675,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:676,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:682,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:683,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:684,1
    - Dst: brpc::InitUserCodeBackupPoolOnceOrDie
      Src: /src/brpc/src/brpc/global.cpp:691,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/global.cpp:697,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:698,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/global.cpp:698,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 135
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 700
      start: 347
    functionDepth: 4
    functionLinenumber: 347
    functionLinenumberEnd: 700
    functionName: brpc::GlobalInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - bthread_attr_set_name
    - LOG
    - brpc::SSLDHInit
    - std::vector::size
    - sigaction
    - brpc::LoadBalancerExtension
    - brpc::NamingServiceExtension
    - brpc::ListProtocols
    - SSL_load_error_strings
    - InitCommonStrings
    - CHECK
    - SSL_library_init
    - brpc::RegisterChecksumHandler
    - brpc::get_or_new_client_side_messenger
    - brpc::RegisterCompressHandler
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - brpc::SSLThreadInit
    - exit
    - signal
    - bthread_set_span_funcs
    - GlobalExtensions::GlobalExtensions
    - brpc::ConcurrencyLimiterExtension
    - SetLogHandler
    - bthread_start_background
    - brpc::RegisterProtocol
    linkageType: ''
    returnType: void
    signature: void GlobalInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/global.cpp:703,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:705,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:706,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 702
    functionDepth: 1
    functionLinenumber: 702
    functionLinenumberEnd: 708
    functionName: brpc::GlobalInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 7
    functionsReached:
    - exit
    - LOG
    - pthread_once
    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: 142
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 142
    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:179,1
    - Dst: read
      Src: /src/brpc/src/brpc/global.cpp:183,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:185,1
    - Dst: berror
      Src: /src/brpc/src/brpc/global.cpp:186,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/global.cpp:189,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:191,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/global.cpp:193,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/global.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:196,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 1
    argNames:
    - filename
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 200
    functionName: brpc::ReadPortOfDummyServer
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 1
    functionsReached:
    - berror
    - std::min
    - LOG
    - strtol
    - isspace
    - read
    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: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: 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:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 206
    functionDepth: 1
    functionLinenumber: 206
    functionLinenumberEnd: 208
    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:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 211
    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:213,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 214
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 214
    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: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: 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: ANNOTATE_MEMORY_LEAK_DISABLE
      Src: /src/brpc/src/brpc/global.cpp:231,1
    - Dst: butil::FileWatcher::FileWatcher
      Src: /src/brpc/src/brpc/global.cpp:247,1
    - Dst: butil::FileWatcher::init_from_not_exist
      Src: /src/brpc/src/brpc/global.cpp:248,1
    - Dst: ANNOTATE_MEMORY_LEAK_ENABLE
      Src: /src/brpc/src/brpc/global.cpp:249,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:251,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/global.cpp:256,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/global.cpp:262,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/global.cpp:264,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/global.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:272,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/global.cpp:275,1
    - Dst: brpc::TrackMe
      Src: /src/brpc/src/brpc/global.cpp:277,1
    - Dst: IsDummyServerRunning
      Src: /src/brpc/src/brpc/global.cpp:279,1
    - Dst: load
      Src: /src/brpc/src/brpc/global.cpp:280,1
    - Dst: butil::FileWatcher::check_and_consume
      Src: /src/brpc/src/brpc/global.cpp:281,1
    - Dst: brpc::ReadPortOfDummyServer
      Src: /src/brpc/src/brpc/global.cpp:282,1
    - Dst: StartDummyServerAt
      Src: /src/brpc/src/brpc/global.cpp:284,1
    - Dst: brpc::SocketMapList
      Src: /src/brpc/src/brpc/global.cpp:291,1
    - Dst: butil::cpuwide_time_ms
      Src: /src/brpc/src/brpc/global.cpp:293,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:294,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/global.cpp:296,1
    - Dst: SocketUniquePtr::UpdateStatsEverySecond
      Src: /src/brpc/src/brpc/global.cpp:297,1
    - Dst: MallocExtension_ReleaseFreeMemory
      Src: /src/brpc/src/brpc/global.cpp:313,1
    - Dst: malloc_trim
      Src: /src/brpc/src/brpc/global.cpp:317,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 45
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 323
    functionName: brpc::GlobalUpdate
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - ANNOTATE_MEMORY_LEAK_DISABLE
    - SocketUniquePtr::UpdateStatsEverySecond
    - butil::FileWatcher::check_and_consume
    - LOG
    - std::vector::size
    - butil::FileWatcher::init_from_not_exist
    - malloc_trim
    - IsDummyServerRunning
    - brpc::SocketMapList
    - ANNOTATE_MEMORY_LEAK_ENABLE
    - butil::FileWatcher::FileWatcher
    - brpc::ReadPortOfDummyServer
    - PLOG_IF
    - brpc::SetTrackMeAddress
    - butil::cpuwide_time_us
    - MallocExtension_ReleaseFreeMemory
    - StartDummyServerAt
    - load
    - bthread_usleep
    - butil::cpuwide_time_ms
    - brpc::TrackMe
    linkageType: ''
    returnType: void
    signature: void * GlobalUpdate(void*)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:340,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:343,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: 344
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 344
    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: 33
    BranchProfiles: []
    Callsites:
    - Dst: sigaction
      Src: /src/brpc/src/brpc/global.cpp:356,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:358,1
    - Dst: signal
      Src: /src/brpc/src/brpc/global.cpp:358,1
    - Dst: SetLogHandler
      Src: /src/brpc/src/brpc/global.cpp:363,1
    - Dst: bthread_set_span_funcs
      Src: /src/brpc/src/brpc/global.cpp:366,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:369,1
    - Dst: SSL_library_init
      Src: /src/brpc/src/brpc/global.cpp:377,1
    - Dst: SSL_load_error_strings
      Src: /src/brpc/src/brpc/global.cpp:379,1
    - Dst: brpc::SSLThreadInit
      Src: /src/brpc/src/brpc/global.cpp:380,1
    - Dst: brpc::SSLDHInit
      Src: /src/brpc/src/brpc/global.cpp:380,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:381,1
    - Dst: InitCommonStrings
      Src: /src/brpc/src/brpc/global.cpp:385,1
    - Dst: GlobalExtensions::GlobalExtensions
      Src: /src/brpc/src/brpc/global.cpp:388,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:390,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:394,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:396,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:397,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:398,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:399,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:400,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:401,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:402,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:403,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:404,1
    - Dst: brpc::NamingServiceExtension
      Src: /src/brpc/src/brpc/global.cpp:405,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:408,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:409,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:410,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:411,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:412,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:413,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:414,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:415,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:416,1
    - Dst: brpc::LoadBalancerExtension
      Src: /src/brpc/src/brpc/global.cpp:417,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:421,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:422,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:425,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:426,1
    - Dst: brpc::RegisterCompressHandler
      Src: /src/brpc/src/brpc/global.cpp:429,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:430,1
    - Dst: brpc::RegisterChecksumHandler
      Src: /src/brpc/src/brpc/global.cpp:436,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:437,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:446,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:447,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:455,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:456,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:465,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:466,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:476,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:477,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:487,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:488,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:496,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:497,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:506,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:507,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:520,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:521,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:529,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:530,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:541,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:542,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:551,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:552,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:561,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:562,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:571,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:572,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:592,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:593,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:604,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:605,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:613,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:614,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:624,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:625,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:635,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:636,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:645,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:646,1
    - Dst: brpc::RegisterProtocol
      Src: /src/brpc/src/brpc/global.cpp:659,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:660,1
    - Dst: brpc::ListProtocols
      Src: /src/brpc/src/brpc/global.cpp:664,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/global.cpp:665,1
    - Dst: brpc::get_or_new_client_side_messenger
      Src: /src/brpc/src/brpc/global.cpp:675,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:676,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:682,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:683,1
    - Dst: brpc::ConcurrencyLimiterExtension
      Src: /src/brpc/src/brpc/global.cpp:684,1
    - Dst: brpc::InitUserCodeBackupPoolOnceOrDie
      Src: /src/brpc/src/brpc/global.cpp:691,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/global.cpp:697,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/global.cpp:698,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/global.cpp:698,1
    CyclomaticComplexity: 36
    EdgeCount: 36
    ICount: 135
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 700
      start: 347
    functionDepth: 4
    functionLinenumber: 347
    functionLinenumberEnd: 700
    functionName: brpc::GlobalInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 0
    functionsReached:
    - bthread_attr_set_name
    - LOG
    - brpc::SSLDHInit
    - std::vector::size
    - sigaction
    - brpc::LoadBalancerExtension
    - brpc::NamingServiceExtension
    - brpc::ListProtocols
    - SSL_load_error_strings
    - InitCommonStrings
    - CHECK
    - SSL_library_init
    - brpc::RegisterChecksumHandler
    - brpc::get_or_new_client_side_messenger
    - brpc::RegisterCompressHandler
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - brpc::SSLThreadInit
    - exit
    - signal
    - bthread_set_span_funcs
    - GlobalExtensions::GlobalExtensions
    - brpc::ConcurrencyLimiterExtension
    - SetLogHandler
    - bthread_start_background
    - brpc::RegisterProtocol
    linkageType: ''
    returnType: void
    signature: void GlobalInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/global.cpp:703,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/global.cpp:705,1
    - Dst: exit
      Src: /src/brpc/src/brpc/global.cpp:706,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 702
    functionDepth: 1
    functionLinenumber: 702
    functionLinenumberEnd: 708
    functionName: brpc::GlobalInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/global.cpp
    functionUses: 7
    functionsReached:
    - exit
    - LOG
    - pthread_once
    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:
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    - brpc::policy::WriteBigEndian3Bytes
    - append
    - size
    - static_cast<char>
    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:
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    - brpc::policy::WriteBigEndian3Bytes
    - append
    - size
    - static_cast<char>
    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:
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    - brpc::policy::WriteBigEndian3Bytes
    - append
    - size
    - static_cast<char>
    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:
    - WriteAMFObject
    - WriteAMFString
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - brpc::FlvWriter::WriteScriptData
    - 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:
    - WriteAMFObject
    - WriteAMFString
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - brpc::FlvWriter::WriteScriptData
    - 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:
    - fetch
    - butil::Status::OK
    - LOG
    - pop_front
    - memcmp
    - 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: 2
    functionsReached:
    - butil::Status::OK
    - butil::Status::ok
    - brpc::FlvReader::ReadHeader
    - fetch1
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::PeekMessageType(FlvTagType* type_out)
  - BBCount: 5
    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: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:244,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:246,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:247,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:249,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:251,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:251,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:256,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:257,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:259,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 260
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - fetch
    - butil::Status::OK
    - brpc::policy::ReadBigEndian3Bytes
    - CHECK
    - length
    - pop_front
    - cut1
    - cutn
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpVideoMessage* msg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:264,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:266,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:269,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:271,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:272,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:278,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:280,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:281,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:283,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:285,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:285,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:291,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:292,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:294,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 262
    functionDepth: 2
    functionLinenumber: 262
    functionLinenumberEnd: 295
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - fetch
    - butil::Status::OK
    - brpc::policy::ReadBigEndian3Bytes
    - CHECK
    - length
    - pop_front
    - cut1
    - cutn
    - 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:299,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:301,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:304,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:306,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:307,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:309,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:310,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:312,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:313,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:314,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:315,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:319,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:320,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:322,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:323,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:327,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - msg
    - name
    argTypes:
    - RtmpMetaData*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 297
    functionDepth: 2
    functionLinenumber: 297
    functionLinenumberEnd: 328
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - ReadAMFObject
    - fetch
    - ReadAMFString
    - brpc::policy::ReadBigEndian3Bytes
    - butil::Status::OK
    - length
    - pop_front
    - cutn
    - butil::IOBuf::IOBuf
    - 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: 339
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 339
    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: 354
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 354
    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: 383
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 383
    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: 393
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 393
    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: 401
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 401
    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: 409
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 409
    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:413,1
    - Dst: FlvSoundRate2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:414,1
    - Dst: FlvSoundBits2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:415,1
    - Dst: FlvSoundType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:416,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 418
    functionName: '& operator<<(std::ostream& os, const RtmpAudioMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvSoundRate2Str
    - FlvSoundBits2Str
    - FlvAudioCodec2Str
    - FlvSoundType2Str
    - 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:422,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:423,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 420
    functionDepth: 1
    functionLinenumber: 420
    functionLinenumberEnd: 425
    functionName: '& operator<<(std::ostream& os, const RtmpVideoMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvVideoCodec2Str
    - FlvVideoFrameType2Str
    - butil::ToPrintable::ToPrintable
    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:429,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:430,1
    - Dst: data::fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:432,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:434,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:437,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:444,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:444,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:445,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 427
    functionDepth: 2
    functionLinenumber: 427
    functionLinenumberEnd: 446
    functionName: brpc::RtmpAACMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - data::size
    - data::append_to
    - butil::Status::OK
    - FlvAudioCodec2Str
    - BuiltinServiceTest::TestStatus
    - data::fetch1
    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: 452
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 452
    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:455,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:456,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:457,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:460,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:460,1
    - Dst: brpc::AudioSpecificConfig::Create
      Src: /src/brpc/src/brpc/rtmp.cpp:461,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:461,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 454
    functionDepth: 2
    functionLinenumber: 454
    functionLinenumberEnd: 462
    functionName: brpc::AudioSpecificConfig::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - size
    - brpc::AudioSpecificConfig::Create
    - copy_to
    - BuiltinServiceTest::TestStatus
    - arraysize
    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:466,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:474,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:476,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 477
    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:483,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 488
    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:492,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:493,1
    - Dst: data::fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:496,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:498,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:501,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:506,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:507,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:507,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:508,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 490
    functionDepth: 2
    functionLinenumber: 490
    functionLinenumberEnd: 509
    functionName: brpc::RtmpAVCMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - data::size
    - data::append_to
    - butil::Status::OK
    - brpc::policy::ReadBigEndian3Bytes
    - FlvVideoCodec2Str
    - data::fetch
    - 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:515,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 511
    functionDepth: 0
    functionLinenumber: 511
    functionLinenumberEnd: 520
    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:526,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 531
    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: 549
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 549
    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: 557
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 557
    functionName: brpc::AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AVCProfile2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:561,1
    - Dst: sps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:567,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:571,1
    - Dst: pps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:574,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:578,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - AVCDecoderConfigurationRecord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 582
    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:594,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:595,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:596,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:617,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:620,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:623,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: brpc::AVCDecoderConfigurationRecord::ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:628,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:633,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:637,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:638,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:644,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:647,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:648,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:653,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:655,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:662,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:663,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:668,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:686,1
    - Dst: butil::StringPiece::copy
      Src: /src/brpc/src/brpc/rtmp.cpp:690,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:701,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:715,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:720,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:730,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:731,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:735,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: avc_nalu_read_uev
      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_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:744,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:745,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:749,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:753,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:759,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:760,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:764,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:773,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:774,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:777,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:778,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:782,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:792,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:795,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:799,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:803,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: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:812,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:816,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:817,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:820,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:821,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:825,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:902,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:903,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:907,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:912,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:914,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:918,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:920,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:929,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:934,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:935,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:938,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:943,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:953,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:956,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:964,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:969,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:978,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:979,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:982,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:983,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:986,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:987,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1011,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1014,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1054,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1054,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1060,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1062,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1068,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1069,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1073,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1079,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1082,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1088,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1088,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1090,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,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: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1116,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1117,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1118,1
    - Dst: RtmpSocketCreator::RtmpSocketCreator
      Src: /src/brpc/src/brpc/rtmp.cpp:1124,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1126,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1134,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1141,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1145,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1152,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1156,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1168,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1175,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1189,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1203,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1206,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1217,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1220,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1228,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1243,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1246,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1249,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:1263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1282,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1286,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1288,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1293,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1304,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1308,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1312,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1314,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1315,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1316,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1325,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1329,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1330,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1332,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1336,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1340,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1350,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1370,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1371,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1372,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1381,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1389,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1402,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1403,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1404,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1408,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1418,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1423,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1426,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1432,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1434,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1440,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1441,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1442,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1451,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1455,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1456,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1473,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1474,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1475,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1476,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1534,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1539,1
    - Dst: OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1545,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1554,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1560,1
    - Dst: OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1561,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1567,1
    - Dst: OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1568,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1574,1
    - Dst: OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1575,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1581,1
    - Dst: OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1582,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1588,1
    - Dst: OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1589,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1590,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1595,1
    - Dst: OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1596,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1597,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1605,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1606,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1615,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1633,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1634,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1638,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:1644,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1650,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1651,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1657,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1664,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1665,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1666,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1670,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1671,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1685,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1686,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1690,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1695,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1696,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1715,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1721,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1728,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1729,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1731,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1744,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1747,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1748,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1762,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1763,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1770,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1781,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1783,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1792,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1798,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1803,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1807,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1811,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1814,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1816,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1829,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1830,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1844,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1845,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1846,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1849,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1850,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1854,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1865,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1869,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1871,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1888,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1889,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1894,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1898,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1916,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1920,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1922,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1924,1
    - Dst: stream_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:1938,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1939,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1948,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1952,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1953,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1954,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1955,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1957,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1958,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1968,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1971,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1975,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1989,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1993,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1994,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1995,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1996,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1997,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1998,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2003,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2031,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2035,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2036,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2037,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2046,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2050,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2051,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2060,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2078,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2079,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2080,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2081,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2082,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2083,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2087,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:2113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2115,1
    - Dst: butil::intrusive_ptr::options
      Src: /src/brpc/src/brpc/rtmp.cpp:2122,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: butil::intrusive_ptr::Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2128,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: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2133,1
    - Dst: butil::intrusive_ptr::Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2141,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2149,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2156,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2163,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2164,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2165,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2169,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2170,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2171,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2172,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2178,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2189,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2191,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2195,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2198,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rtmp.cpp:2206,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2208,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2209,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2213,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2239,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2246,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2252,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2253,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2254,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2259,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2267,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2268,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2272,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2275,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2278,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2282,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2307,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    - Dst: OnPlayable
      Src: /src/brpc/src/brpc/rtmp.cpp:2312,1
    - Dst: CallOnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:2316,1
    - Dst: CallOnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2320,1
    - Dst: CallOnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2324,1
    - Dst: CallOnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2328,1
    - Dst: CallOnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2332,1
    - Dst: CallOnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: OnSubStreamStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2340,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2347,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2349,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2352,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2358,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2366,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2369,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2384,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2391,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2393,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2395,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2399,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2400,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2404,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2409,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: butil::intrusive_ptr::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2430,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2436,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2447,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2451,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2452,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2455,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2456,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2460,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2466,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2471,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2486,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2487,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2490,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2494,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2498,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2503,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2504,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2511,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2512,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2519,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2520,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2527,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2528,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2535,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2536,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2539,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2543,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2549,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2557,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2559,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2562,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2567,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2569,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2572,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2585,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2589,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2593,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2600,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2603,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2609,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:2644,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2648,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2656,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2669,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2671,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2673,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2679,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2687,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2688,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2689,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2694,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2703,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2705,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2711,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2713,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2719,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2726,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2729,1
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2734,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:2745,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2751,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2752,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2759,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2769,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2772,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2779,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2782,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2787,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2789,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2797,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2812,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2816,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2817,1
    - Dst: find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2819,1
    - Dst: remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2826,1
    - Dst: butil::StringPiece::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2837,1
    - Dst: RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2840,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2843,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2846,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2856,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2857,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2859,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2883,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2884,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2887,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2888,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2889,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2891,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    CyclomaticComplexity: 304
    EdgeCount: 304
    ICount: 1457
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2897
      start: 584
    functionDepth: 6
    functionLinenumber: 584
    functionLinenumberEnd: 2897
    functionName: brpc::AVCDecoderConfigurationRecord::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - RtmpInfo::set_level
    - OnSubStreamStop
    - RtmpInfo::set_description
    - CallOnStop
    - store
    - brpc::policy::WriteBigEndian3Bytes
    - socket_map
    - find_last_of
    - OnFirstMessage
    - is_server_accepted
    - pop_front
    - butil::intrusive_ptr::SendSharedObjectMessage
    - empty
    - SignalError
    - CHECK_NE
    - BuiltinServiceTest::TestStatus
    - OnSharedObjectMessage
    - OnUserData
    - butil::intrusive_ptr::intrusive_ptr
    - policy::RtmpContext*::RemoveMessageStream
    - remote_side
    - SocketMessagePtr::next::reset
    - butil::StringPiece::starts_with
    - std::string
    - butil::intrusive_ptr::SendVideoMessage
    - data
    - std::make_shared<RtmpConnect>
    - SocketMessagePtr::body::append
    - get
    - butil::intrusive_ptr::is_server_accepted
    - size
    - RtmpPublishType2Str
    - BAIDU_SCOPED_LOCK
    - log_id
    - find
    - brpc::policy::is_video_frame_type_valid
    - clear
    - StartCancel
    - Failed
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::StringPiece::size
    - ShortDebugString
    - copy_to
    - EndProcessingMessage
    - SendControlMessage
    - reset
    - push_back
    - ReleaseAdditionalReference
    - NotifyOnFailed
    - reserve
    - stream_id
    - CHECK_LT
    - OnClientStreamCreated*::cntl::call_id
    - CallOnMetaData
    - butil::StringPiece::clear
    - std::string::reserve
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - butil::intrusive_ptr::SendCuePoint
    - OnStopInternal
    - butil::intrusive_ptr<RtmpClientStream>
    - butil::intrusive_ptr::Publish
    - options
    - policy::RtmpContext*::SetState
    - OnCuePoint
    - CallOnUserData
    - RtmpInfo::code
    - std::string::append
    - bthread_id_unlock_and_destroy
    - SocketMapKey
    - OnAudioMessage
    - description
    - swap
    - policy::RtmpTransactionHandler*::Cancel
    - WriteAMFUint32
    - WriteAMFString
    - stream_name::empty
    - bthread_timer_add
    - brpc::policy::ReadBigEndian4Bytes
    - CHECK
    - brpc::policy::WriteBigEndian2Bytes
    - RtmpSocketCreator::RtmpSocketCreator
    - std::string::push_back
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - butil::microseconds_from_now
    - butil::intrusive_ptr::SignalError
    - bthread_timer_del
    - RtmpInfo::set_code
    - substr
    - brpc::SetTrackMeAddress
    - LaunchSubStream
    - butil::StringPiece::data
    - static_cast<policy::RtmpContext*>
    - butil::intrusive_ptr::rtmp_url
    - ParseRtmpHostAndPort
    - AcquireStreamToSend
    - AMFOutputStream::good
    - CommonInit
    - bthread_id_create
    - Recreate
    - butil::intrusive_ptr::SendMetaData
    - butil::StringSplitter::length
    - CallOnStopIfNeeded
    - Init
    - butil::intrusive_ptr::Recreate
    - fd
    - policy::RtmpContext*::RemoveTransaction
    - butil::intrusive_ptr::SendAACMessage
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - exchange
    - policy::RtmpContext*::set_simplified_rtmp
    - ErrorText
    - connection_type
    - publish_name::empty
    - butil::intrusive_ptr::SendAVCMessage
    - brpc::policy::SendC0C1
    - butil::gettimeofday_us
    - bthread_id_error
    - butil::StringSplitter::field
    - butil::intrusive_ptr::get
    - CallOnVideoMessage
    - policy::RtmpContext*::SendConnectRequest
    - SocketMessagePtr::size
    - play_name::empty
    - OnPlayable
    - policy::RtmpContext*::SetConnectCallback
    - starts_with
    - Write
    - get_rtmp_bvars
    - RemoveRtmpPrefix
    - local_side
    - Join
    - WriteAMFNumber
    - butil::intrusive_ptr::Destroy
    - OnClientStreamCreated*::cntl::set_max_retry
    - std::unique_lock::unlock
    - OnClientStreamCreated*::cntl::set_stream_creator
    - CallOnAudioMessage
    - id
    - NewSubStream
    - avc_nalu_read_bit
    - remove_suffix
    - brpc::policy::WriteBigEndian4Bytes
    - butil::StringPiece::copy
    - parsing_context
    - get_client_side_messenger
    - PLOG_IF
    - butil::StringPiece::find_first_of
    - OnMetaData
    - RtmpClientImpl::RtmpClientImpl
    - next_as_annexb
    - OnStop
    - butil::intrusive_ptr::has_data_ever
    - policy::RtmpContext*::only_check_simple_s0s1
    - has_data_ever
    - stream_name::c_str
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Play
    - cutn
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - brpc::policy::ReadBigEndian2Bytes
    - SplitVHostFromApp
    - butil::StringPiece::remove_prefix
    - brpc::policy::is_video_codec_valid
    - policy::RtmpContext::RtmpContext
    - BeginProcessingMessage
    - butil::Status::OK
    - _chan::CallMethod
    - LOG
    - WriteAMFNull
    - level
    - fetch1
    - ErrorCode
    - CreateSocket
    - butil::IOBuf::size
    - butil::intrusive_ptr::SendAudioMessage
    - LOG_IF
    - SetFailed
    - PLOG
    - SocketUniquePtr::release
    - policy::RtmpContext*::client_options
    - butil::intrusive_ptr::Init
    - butil::StringPiece::substr
    - butil::Status::ok
    - policy::RtmpContext*::OnConnected
    - CallOnSharedObjectMessage
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - OnClientStreamCreated*::cntl::set_connection_type
    - butil::endpoint2str
    - brpc::AVCDecoderConfigurationRecord::ParseSPS
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - OnVideoMessage
    - brpc::policy::MakeUnsentControlMessage
    - set_error
    - c_str
    - as_string
    - WriteAMFObject
    - butil::EndPoint
    - OnClientStreamCreated*::cntl::set_request_code
    - SendMessage
    - brpc::policy::WriteWithoutOvercrowded
    - OnClientStreamCreated::OnClientStreamCreated
    - done
    - code
    - stream_name
    - butil::intrusive_ptr::options
    - OnClientStreamCreated*::stream::reset
    - find_avc_annexb_nalu_stop_code
    - butil::intrusive_ptr::OnStopInternal
    - CallOnCuePoint
    - set_end
    - OnFailedToCreateStream
    - next_as_ibmf
    - load
    - butil::StringPiece::empty
    - berror
    - OnClientStreamCreated*::cntl::connection_type
    - find_avc_annexb_nalu_start_code
    - avc_nalu_read_uev
    - hash_code::has_been_set
    - SocketMessagePtr::body::push_back
    - SocketUniquePtr::ShareStats
    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:594,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:595,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:596,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:617,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:620,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:623,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:628,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:633,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:637,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:638,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:644,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:647,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:648,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:653,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:655,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - size
    - AVCDecoderConfigurationRecord::Create
    argTypes:
    - buf
    - buf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 587
    functionDepth: 2
    functionLinenumber: 587
    functionLinenumberEnd: 656
    functionName: brpc::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - reserve
    - butil::StringPiece::empty
    - butil::Status::OK
    - clear
    - butil::StringPiece::size
    - butil::StringPiece::data
    - ParseSPS
    - butil::StringPiece::substr
    - butil::Status::ok
    - push_back
    - BuiltinServiceTest::TestStatus
    - brpc::policy::ReadBigEndian2Bytes
    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:662,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:663,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:668,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:686,1
    - Dst: copy
      Src: /src/brpc/src/brpc/rtmp.cpp:690,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:701,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:715,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:720,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:730,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:731,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:735,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: avc_nalu_read_uev
      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_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:744,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:745,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:749,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:753,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:759,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:760,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:764,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:773,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:774,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:777,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:778,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:782,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:792,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:795,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:799,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:803,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: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:812,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:816,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:817,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:820,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:821,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:825,1
    CyclomaticComplexity: 49
    EdgeCount: 49
    ICount: 113
    argCount: 2
    argNames:
    - ' buf'
    - sps_length
    argTypes:
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 658
    functionDepth: 2
    functionLinenumber: 658
    functionLinenumberEnd: 826
    functionName: brpc::AVCDecoderConfigurationRecord::ParseSPS
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - BuiltinServiceTest::TestStatus
    - butil::Status::OK
    - copy
    - avc_nalu_read_uev
    - empty
    - avc_nalu_read_bit
    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: 848
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 848
    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: 884
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 884
    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: 895
      start: 886
    functionDepth: 0
    functionLinenumber: 886
    functionLinenumberEnd: 895
    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: 898
      start: 897
    functionDepth: 0
    functionLinenumber: 897
    functionLinenumberEnd: 898
    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:902,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:903,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:907,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:912,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:914,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:918,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:920,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 926
      start: 900
    functionDepth: 0
    functionLinenumber: 900
    functionLinenumberEnd: 926
    functionName: AVCNaluIterator::operator++()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - next_as_ibmf
    - find_avc_annexb_nalu_start_code
    - pop_front
    - next_as_annexb
    - set_end
    - size
    linkageType: ''
    returnType: void
    signature: void AVCNaluIterator::operator++()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:929,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:934,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:935,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:938,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:943,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 946
      start: 928
    functionDepth: 1
    functionLinenumber: 928
    functionLinenumberEnd: 946
    functionName: brpc::AVCNaluIterator::next_as_annexb
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - clear
    - pop_front
    - cutn
    - empty
    - find_avc_annexb_nalu_stop_code
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool AVCNaluIterator::next_as_annexb()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:953,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:956,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:964,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:969,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:978,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:979,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:982,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:983,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:986,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:987,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 991
      start: 948
    functionDepth: 1
    functionLinenumber: 948
    functionLinenumberEnd: 991
    functionName: brpc::AVCNaluIterator::next_as_ibmf
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::policy::ReadBigEndian4Bytes
    - LOG
    - pop_front
    - cutn
    - empty
    - copy_to
    - fetch1
    - CHECK_NE
    - size
    - brpc::policy::ReadBigEndian2Bytes
    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: 1004
      start: 993
    functionDepth: 0
    functionLinenumber: 993
    functionLinenumberEnd: 1004
    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:1011,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1012
      start: 1010
    functionDepth: 0
    functionLinenumber: 1010
    functionLinenumberEnd: 1012
    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:1014,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1016
      start: 1013
    functionDepth: 1
    functionLinenumber: 1013
    functionLinenumberEnd: 1016
    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: 1029
      start: 1029
    functionDepth: 0
    functionLinenumber: 1029
    functionLinenumberEnd: 1029
    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: 1030
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1030
    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:1054,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1054,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1060,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1062,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1068,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1069,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1073,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1079,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1082,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - s
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1084
      start: 1050
    functionDepth: 1
    functionLinenumber: 1050
    functionLinenumberEnd: 1084
    functionName: brpc::RtmpConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::only_check_simple_s0s1
    - brpc::policy::SendC0C1
    - policy::RtmpContext*::SetState
    - policy::RtmpContext*::client_options
    - LOG
    - done
    - Socket*::remote_side
    - Socket*::fd
    - static_cast<policy::RtmpContext*>
    - policy::RtmpContext*::SendConnectRequest
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - Socket*::parsing_context
    - policy::RtmpContext*::SetConnectCallback
    - policy::RtmpContext*::set_simplified_rtmp
    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:1088,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1088,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1090,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1094
      start: 1086
    functionDepth: 1
    functionLinenumber: 1086
    functionLinenumberEnd: 1094
    functionName: brpc::RtmpConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::OnConnected
    - static_cast<policy::RtmpContext*>
    - Socket*::parsing_context
    - LOG
    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: 1100
      start: 1098
    functionDepth: 0
    functionLinenumber: 1098
    functionLinenumberEnd: 1100
    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: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: 4
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1102
    functionDepth: 0
    functionLinenumber: 1102
    functionLinenumberEnd: 1107
    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:1116,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1117,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' pt'
    - id
    argTypes:
    - butil::EndPoint
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1119
      start: 1113
    functionDepth: 0
    functionLinenumber: 1113
    functionLinenumberEnd: 1119
    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:1124,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 1121
    functionDepth: 1
    functionLinenumber: 1121
    functionLinenumberEnd: 1130
    functionName: brpc::RtmpClientImpl::CommonInit
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::RtmpClientImpl::Init
    - RtmpSocketCreator::RtmpSocketCreator
    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:1134,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1142
      start: 1132
    functionDepth: 2
    functionLinenumber: 1132
    functionLinenumberEnd: 1142
    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:1145,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1143
    functionDepth: 2
    functionLinenumber: 1143
    functionLinenumberEnd: 1153
    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:1156,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1154
    functionDepth: 2
    functionLinenumber: 1154
    functionLinenumberEnd: 1164
    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:1168,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1175,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: 1176
      start: 1165
    functionDepth: 2
    functionLinenumber: 1165
    functionLinenumberEnd: 1176
    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: 1178
      start: 1178
    functionDepth: 0
    functionLinenumber: 1178
    functionLinenumberEnd: 1178
    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: 1179
      start: 1179
    functionDepth: 0
    functionLinenumber: 1179
    functionLinenumberEnd: 1179
    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: 1180
      start: 1180
    functionDepth: 0
    functionLinenumber: 1180
    functionLinenumberEnd: 1180
    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: 1185
      start: 1182
    functionDepth: 0
    functionLinenumber: 1182
    functionLinenumberEnd: 1185
    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:1189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1194
      start: 1187
    functionDepth: 0
    functionLinenumber: 1187
    functionLinenumberEnd: 1194
    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:1198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1203,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1196
    functionDepth: 1
    functionLinenumber: 1196
    functionLinenumberEnd: 1208
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1217,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1222
      start: 1210
    functionDepth: 1
    functionLinenumber: 1210
    functionLinenumberEnd: 1222
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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:1226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1228,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1236
      start: 1224
    functionDepth: 1
    functionLinenumber: 1224
    functionLinenumberEnd: 1236
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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:1241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1243,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1246,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1249,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: 1251
      start: 1238
    functionDepth: 1
    functionLinenumber: 1238
    functionLinenumberEnd: 1251
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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: 1253
      start: 1253
    functionDepth: 0
    functionLinenumber: 1253
    functionLinenumberEnd: 1253
    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:1263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - is_client
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1265
      start: 1255
    functionDepth: 0
    functionLinenumber: 1255
    functionLinenumberEnd: 1265
    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: 1268
      start: 1267
    functionDepth: 0
    functionLinenumber: 1267
    functionLinenumberEnd: 1268
    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: 1272
      start: 1270
    functionDepth: 0
    functionLinenumber: 1270
    functionLinenumberEnd: 1272
    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:1282,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1286,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1288,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1293,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: 1294
      start: 1274
    functionDepth: 1
    functionLinenumber: 1274
    functionLinenumberEnd: 1294
    functionName: brpc::RtmpStreamBase::SendMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Write
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - size
    - LOG
    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:1304,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: 1305
      start: 1296
    functionDepth: 0
    functionLinenumber: 1296
    functionLinenumberEnd: 1305
    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:1308,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1312,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1314,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1315,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1316,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' cuepoint'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1321
      start: 1307
    functionDepth: 2
    functionLinenumber: 1307
    functionLinenumberEnd: 1321
    functionName: brpc::RtmpStreamBase::SendCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - LOG
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:1325,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1329,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1330,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1332,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1336,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' metadata'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1337
      start: 1323
    functionDepth: 2
    functionLinenumber: 1323
    functionLinenumberEnd: 1337
    functionName: brpc::RtmpStreamBase::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - LOG
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:1340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1342
      start: 1339
    functionDepth: 1
    functionLinenumber: 1339
    functionLinenumberEnd: 1342
    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:1350,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1370,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1371,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1373
      start: 1344
    functionDepth: 1
    functionLinenumber: 1344
    functionLinenumberEnd: 1373
    functionName: brpc::RtmpStreamBase::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::push_back
    - SocketMessagePtr::body::append
    - Write
    - size
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAudioMessage(const RtmpAudioMessage& msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1381,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1389,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1402,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1403,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1404,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1375
    functionDepth: 1
    functionLinenumber: 1375
    functionLinenumberEnd: 1405
    functionName: brpc::RtmpStreamBase::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::append
    - Write
    - size
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAACMessage(const RtmpAACMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1410
      start: 1407
    functionDepth: 1
    functionLinenumber: 1407
    functionLinenumberEnd: 1410
    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:1418,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1423,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1426,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1432,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1434,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1440,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1441,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1442,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1443
      start: 1412
    functionDepth: 1
    functionLinenumber: 1412
    functionLinenumberEnd: 1443
    functionName: brpc::RtmpStreamBase::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::is_video_codec_valid
    - brpc::policy::is_video_frame_type_valid
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::push_back
    - SocketMessagePtr::body::append
    - Write
    - size
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendVideoMessage(const RtmpVideoMessage& msg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1451,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1455,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1456,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1473,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1474,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1475,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1476,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1445
    functionDepth: 1
    functionLinenumber: 1445
    functionLinenumberEnd: 1477
    functionName: brpc::RtmpStreamBase::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::is_video_frame_type_valid
    - brpc::policy::WriteBigEndian3Bytes
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::append
    - Write
    - size
    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: 1481
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1481
    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: 1489
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1489
    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: 1493
      start: 1491
    functionDepth: 0
    functionLinenumber: 1491
    functionLinenumberEnd: 1493
    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: 1495
      start: 1495
    functionDepth: 0
    functionLinenumber: 1495
    functionLinenumberEnd: 1495
    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:1498,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1500
      start: 1497
    functionDepth: 1
    functionLinenumber: 1497
    functionLinenumberEnd: 1500
    functionName: brpc::RtmpStreamBase::OnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnUserData(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1505
      start: 1502
    functionDepth: 1
    functionLinenumber: 1502
    functionLinenumberEnd: 1505
    functionName: brpc::RtmpStreamBase::OnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnCuePoint(RtmpCuePoint* cuepoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1511
      start: 1507
    functionDepth: 1
    functionLinenumber: 1507
    functionLinenumberEnd: 1511
    functionName: brpc::RtmpStreamBase::OnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    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:1514,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1516
      start: 1513
    functionDepth: 1
    functionLinenumber: 1513
    functionLinenumberEnd: 1516
    functionName: brpc::RtmpStreamBase::OnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnSharedObjectMessage(RtmpSharedObjectMessage*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1520
      start: 1518
    functionDepth: 1
    functionLinenumber: 1518
    functionLinenumberEnd: 1520
    functionName: brpc::RtmpStreamBase::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1524
      start: 1522
    functionDepth: 1
    functionLinenumber: 1522
    functionLinenumberEnd: 1524
    functionName: brpc::RtmpStreamBase::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    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: 1528
      start: 1526
    functionDepth: 0
    functionLinenumber: 1526
    functionLinenumberEnd: 1528
    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:1533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1534,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1539,1
    - Dst: brpc::RtmpStreamBase::OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1545,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - fun_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1548
      start: 1530
    functionDepth: 1
    functionLinenumber: 1530
    functionLinenumberEnd: 1548
    functionName: brpc::RtmpStreamBase::BeginProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnFirstMessage
    - LOG
    - std::unique_lock::unlock
    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:1554,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1557
      start: 1550
    functionDepth: 1
    functionLinenumber: 1550
    functionLinenumberEnd: 1557
    functionName: brpc::RtmpStreamBase::EndProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::OnStop
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::EndProcessingMessage()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1560,1
    - Dst: brpc::RtmpStreamBase::OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1561,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1564
      start: 1559
    functionDepth: 2
    functionLinenumber: 1559
    functionLinenumberEnd: 1564
    functionName: brpc::RtmpStreamBase::CallOnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - 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:1567,1
    - Dst: brpc::RtmpStreamBase::OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1568,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - obj
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1571
      start: 1566
    functionDepth: 2
    functionLinenumber: 1566
    functionLinenumberEnd: 1571
    functionName: brpc::RtmpStreamBase::CallOnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnCuePoint
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnCuePoint(RtmpCuePoint* obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1574,1
    - Dst: brpc::RtmpStreamBase::OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1575,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - obj
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1578
      start: 1573
    functionDepth: 2
    functionLinenumber: 1573
    functionLinenumberEnd: 1578
    functionName: brpc::RtmpStreamBase::CallOnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnMetaData
    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:1581,1
    - Dst: brpc::RtmpStreamBase::OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1582,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1585
      start: 1580
    functionDepth: 2
    functionLinenumber: 1580
    functionLinenumberEnd: 1585
    functionName: brpc::RtmpStreamBase::CallOnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - 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:1588,1
    - Dst: brpc::RtmpStreamBase::OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1589,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1592
      start: 1587
    functionDepth: 2
    functionLinenumber: 1587
    functionLinenumberEnd: 1592
    functionName: brpc::RtmpStreamBase::CallOnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnAudioMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1595,1
    - Dst: brpc::RtmpStreamBase::OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1596,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1597,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1599
      start: 1594
    functionDepth: 2
    functionLinenumber: 1594
    functionLinenumberEnd: 1599
    functionName: brpc::RtmpStreamBase::CallOnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnVideoMessage
    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:1605,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1606,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1615,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1616
      start: 1601
    functionDepth: 1
    functionLinenumber: 1601
    functionLinenumberEnd: 1616
    functionName: brpc::RtmpStreamBase::CallOnStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::RtmpStreamBase::OnStop
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1619
      start: 1618
    functionDepth: 1
    functionLinenumber: 1618
    functionLinenumberEnd: 1619
    functionName: brpc::RtmpStreamBase::remote_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 7
    functionsReached:
    - butil::EndPoint
    - brpc::RtmpStreamBase::remote_side
    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:1622,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1622
      start: 1621
    functionDepth: 1
    functionLinenumber: 1621
    functionLinenumberEnd: 1622
    functionName: brpc::RtmpStreamBase::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::EndPoint
    - brpc::RtmpStreamBase::local_side
    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:1633,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1634,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1635
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1635
    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:1638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1639
      start: 1637
    functionDepth: 0
    functionLinenumber: 1637
    functionLinenumberEnd: 1639
    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:1644,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1650,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1651,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1657,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1664,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1665,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1666,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1670,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1671,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1677
      start: 1641
    functionDepth: 1
    functionLinenumber: 1641
    functionLinenumberEnd: 1677
    functionName: brpc::RtmpClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - bthread_id_error
    - StartCancel
    - brpc::RtmpClientStream::OnStopInternal
    - swap
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1685,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1686,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1690,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1695,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1696,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1703
      start: 1679
    functionDepth: 1
    functionLinenumber: 1679
    functionLinenumberEnd: 1703
    functionName: brpc::RtmpClientStream::SignalError
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpClientStream::OnStopInternal
    - std::unique_lock::unlock
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::SignalError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1715,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1721,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1728,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1729,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1731,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: SocketUniquePtr*::get
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: SocketUniquePtr*::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1739
      start: 1705
    functionDepth: 3
    functionLinenumber: 1705
    functionLinenumberEnd: 1739
    functionName: brpc::RtmpClientStream::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr*::reset
    - remote_side
    - SocketUniquePtr::release
    - SocketUniquePtr*::get
    - brpc::SetTrackMeAddress
    - socket_map
    - Controller*::connection_type
    - SocketMapKey
    - SocketUniquePtr::ShareStats
    - Controller*::SetFailed
    - get
    - id
    - CreateSocket
    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:1744,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1747,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1748,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1750
      start: 1741
    functionDepth: 6
    functionLinenumber: 1741
    functionLinenumberEnd: 1750
    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:1762,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1763,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1770,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1771
      start: 1752
    functionDepth: 1
    functionLinenumber: 1752
    functionLinenumberEnd: 1771
    functionName: brpc::RtmpClientStream::OnFailedToCreateStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - brpc::RtmpClientStream::OnStopInternal
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnFailedToCreateStream()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1781,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1783,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1792,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: 1794
      start: 1773
    functionDepth: 1
    functionLinenumber: 1773
    functionLinenumberEnd: 1794
    functionName: brpc::RtmpClientStream::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - remote_side
    - socket_map
    - SocketMapKey
    - swap
    - 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:1798,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1803,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1807,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1811,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1814,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1816,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1829,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1830,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1844,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1845,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1846,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1849,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1850,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1854,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1856
      start: 1797
    functionDepth: 3
    functionLinenumber: 1797
    functionLinenumberEnd: 1856
    functionName: brpc::RtmpClientStream::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<RtmpClientStream>
    - LOG
    - policy::RtmpTransactionHandler*::Cancel
    - CHECK
    - brpc::RtmpClientStream::OnFailedToCreateStream
    - Controller*::ErrorCode
    - std::unique_lock::unlock
    - parsing_context
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::RtmpClientStream::OnStopInternal
    - Controller*::log_id
    - static_cast<policy::RtmpContext*>
    - bthread_id_create
    - NotifyOnFailed
    - Controller*::Failed
    - berror
    - CHECK_LT
    - policy::RtmpContext*::RemoveTransaction
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::DestroyStreamCreator(Controller* cntl)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1865,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1869,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1871,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1888,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1889,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1894,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1898,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1916,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1920,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1922,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1924,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1925
      start: 1858
    functionDepth: 1
    functionLinenumber: 1858
    functionLinenumberEnd: 1925
    functionName: brpc::RtmpClientStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 4
    functionsReached:
    - CallOnStop
    - socket_map
    - WriteAMFNull
    - LOG
    - SocketMapKey
    - butil::IOBuf::size
    - WriteAMFUint32
    - SetFailed
    - policy::RtmpContext*::RemoveMessageStream
    - SocketMessagePtr::next::reset
    - PLOG
    - WriteAMFString
    - remote_side
    - CHECK
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::MakeUnsentControlMessage
    - get
    - id
    - brpc::policy::WriteWithoutOvercrowded
    - parsing_context
    - Failed
    - static_cast<policy::RtmpContext*>
    - AMFOutputStream::good
    - ReleaseAdditionalReference
    - butil::IOBuf::IOBuf
    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: 1931
      start: 1927
    functionDepth: 0
    functionLinenumber: 1927
    functionLinenumberEnd: 1931
    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:1938,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1939,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1948,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1952,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1953,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1954,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1955,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1957,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1958,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1968,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1971,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1975,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 36
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlayOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1933
    functionDepth: 1
    functionLinenumber: 1933
    functionLinenumberEnd: 1986
    functionName: brpc::RtmpClientStream::Play
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - options
    - LOG
    - WriteAMFNull
    - Write
    - butil::IOBuf::size
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - WriteAMFString
    - stream_name::empty
    - CHECK
    - brpc::policy::WriteBigEndian2Bytes
    - WriteAMFNumber
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::MakeUnsentControlMessage
    - brpc::policy::WriteBigEndian4Bytes
    - AMFOutputStream::good
    - stream_id
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    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:1989,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1993,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1994,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1995,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1996,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1997,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1998,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2003,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2004
      start: 1988
    functionDepth: 1
    functionLinenumber: 1988
    functionLinenumberEnd: 2004
    functionName: brpc::RtmpClientStream::Play2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFObject
    - SendMessage
    - WriteAMFString
    - WriteAMFNull
    - LOG
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    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: 2013
      start: 2006
    functionDepth: 0
    functionLinenumber: 2006
    functionLinenumberEnd: 2013
    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: 2027
      start: 2015
    functionDepth: 0
    functionLinenumber: 2015
    functionLinenumberEnd: 2027
    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:2031,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2035,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2036,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2037,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - ' name'
    - type
    argTypes:
    - butil::StringPiece
    - RtmpPublishType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2043
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2043
    functionName: brpc::RtmpClientStream::Publish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SendMessage
    - WriteAMFString
    - CHECK
    - WriteAMFNull
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    - RtmpPublishType2Str
    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:2046,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2050,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2051,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2057
      start: 2045
    functionDepth: 1
    functionLinenumber: 2045
    functionLinenumberEnd: 2057
    functionName: brpc::RtmpClientStream::Seek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SendMessage
    - WriteAMFString
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    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:2060,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - pause_or_unpause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2072
      start: 2059
    functionDepth: 1
    functionLinenumber: 2059
    functionLinenumberEnd: 2072
    functionName: brpc::RtmpClientStream::Pause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SendMessage
    - WriteAMFString
    - AMFOutputStream::good
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    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:2075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: brpc::RtmpClientStream::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2078,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2079,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2080,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2081,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2082,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2083,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2087,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - RtmpInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2090
      start: 2074
    functionDepth: 2
    functionLinenumber: 2074
    functionLinenumberEnd: 2090
    functionName: brpc::RtmpClientStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_id
    - store
    - LOG
    - code
    - level
    - description
    - brpc::RtmpClientStream::SignalError
    - play_name::empty
    - publish_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: 2097
      start: 2092
    functionDepth: 0
    functionLinenumber: 2092
    functionLinenumberEnd: 2097
    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: 2102
      start: 2102
    functionDepth: 0
    functionLinenumber: 2102
    functionLinenumberEnd: 2102
    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:2113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2115,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2122,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2129,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2130,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2133,1
    - Dst: Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2141,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2144
      start: 2111
    functionDepth: 1
    functionLinenumber: 2111
    functionLinenumberEnd: 2144
    functionName: brpc::OnClientStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Publish
    - options
    - Failed
    - LOG
    - Play
    - SignalError
    - play_name::empty
    - ErrorText
    - rtmp_url
    - publish_name::empty
    linkageType: ''
    returnType: void
    signature: void OnClientStreamCreated::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2149,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2156,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2163,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2164,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2165,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2169,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2170,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2171,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2172,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2178,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2189,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2191,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2195,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2198,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - client
    - ' options'
    argTypes:
    - RtmpClient*
    - RtmpClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2202
      start: 2146
    functionDepth: 2
    functionLinenumber: 2146
    functionLinenumberEnd: 2202
    functionName: brpc::RtmpClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - OnClientStreamCreated*::cntl::set_request_code
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - OnClientStreamCreated*::cntl::connection_type
    - Join
    - OnClientStreamCreated::OnClientStreamCreated
    - OnClientStreamCreated*::cntl::call_id
    - brpc::RtmpClientStream::OnStopInternal
    - LOG
    - hash_code::has_been_set
    - _chan::CallMethod
    - OnClientStreamCreated*::cntl::set_max_retry
    - OnClientStreamCreated*::stream::reset
    - OnClientStreamCreated*::cntl::set_connection_type
    - std::unique_lock::unlock
    - OnClientStreamCreated*::cntl::set_stream_creator
    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:2206,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2208,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2209,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2213,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2216
      start: 2204
    functionDepth: 1
    functionLinenumber: 2204
    functionLinenumberEnd: 2216
    functionName: brpc::RtmpClientStream::rtmp_url
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - options
    - std::string
    - butil::StringPiece::size
    - std::string::append
    - butil::StringPiece::data
    - std::string::push_back
    - stream_name
    - std::string::reserve
    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: 2225
      start: 2220
    functionDepth: 0
    functionLinenumber: 2220
    functionLinenumberEnd: 2225
    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:2239,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2241
      start: 2227
    functionDepth: 1
    functionLinenumber: 2227
    functionLinenumberEnd: 2241
    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:2246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2247
      start: 2243
    functionDepth: 0
    functionLinenumber: 2243
    functionLinenumberEnd: 2247
    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:2252,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2253,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2254,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2256
      start: 2249
    functionDepth: 0
    functionLinenumber: 2249
    functionLinenumberEnd: 2256
    functionName: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - load
    - CallOnStop
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::CallOnStopIfNeeded()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2259,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2267,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2268,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2272,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2275,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2278,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2282,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2289
      start: 2258
    functionDepth: 2
    functionLinenumber: 2258
    functionLinenumberEnd: 2289
    functionName: brpc::RtmpRetryingClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - BAIDU_SCOPED_LOCK
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - butil::intrusive_ptr::Destroy
    - swap
    - exchange
    - bthread_timer_del
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2307,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - sub_stream_creator
    - ' options'
    argTypes:
    - SubStreamCreator*
    - RtmpRetryingClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2309
      start: 2291
    functionDepth: 1
    functionLinenumber: 2291
    functionLinenumberEnd: 2309
    functionName: brpc::RtmpRetryingClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::gettimeofday_us
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - LOG
    - brpc::RtmpRetryingClientStream::Recreate
    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:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2313
      start: 2311
    functionDepth: 1
    functionLinenumber: 2311
    functionLinenumberEnd: 2313
    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:2316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2317
      start: 2315
    functionDepth: 0
    functionLinenumber: 2315
    functionLinenumberEnd: 2317
    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:2320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - brpc::RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2319
    functionDepth: 0
    functionLinenumber: 2319
    functionLinenumberEnd: 2321
    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:2324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - brpc::RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2325
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2325
    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:2328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2329
      start: 2327
    functionDepth: 0
    functionLinenumber: 2327
    functionLinenumberEnd: 2329
    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:2332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2333
      start: 2331
    functionDepth: 0
    functionLinenumber: 2331
    functionLinenumberEnd: 2333
    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:2336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2337
      start: 2335
    functionDepth: 0
    functionLinenumber: 2335
    functionLinenumberEnd: 2337
    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:2340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2341
      start: 2339
    functionDepth: 1
    functionLinenumber: 2339
    functionLinenumberEnd: 2341
    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: 2344
      start: 2343
    functionDepth: 0
    functionLinenumber: 2343
    functionLinenumberEnd: 2344
    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:2347,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2349,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2352,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2358,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2366,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2369,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2378
      start: 2346
    functionDepth: 1
    functionLinenumber: 2346
    functionLinenumberEnd: 2378
    functionName: brpc::RtmpRetryingClientStream::Recreate
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - load
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - LaunchSubStream
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::Destroy
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - swap
    - NewSubStream
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Recreate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2385
      start: 2380
    functionDepth: 0
    functionLinenumber: 2380
    functionLinenumberEnd: 2385
    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:2391,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2393,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2395,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2399,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2400,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2404,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2409,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: RtmpStreamBase*::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2430,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2436,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2447,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2451,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2452,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2455,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2456,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2460,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 41
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2462
      start: 2387
    functionDepth: 3
    functionLinenumber: 2387
    functionLinenumberEnd: 2462
    functionName: brpc::RtmpRetryingClientStream::OnSubStreamStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - load
    - has_data_ever
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - bthread_timer_add
    - RtmpStreamBase*::has_data_ever
    - brpc::RtmpRetryingClientStream::Recreate
    - LOG
    - butil::microseconds_from_now
    - swap
    - play_name::empty
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - RtmpStreamBase*::is_server_accepted
    - publish_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:2466,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2471,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2483
      start: 2464
    functionDepth: 1
    functionLinenumber: 2464
    functionLinenumberEnd: 2483
    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:2486,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2487,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2490,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' obj'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2491
      start: 2485
    functionDepth: 2
    functionLinenumber: 2485
    functionLinenumberEnd: 2491
    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:2494,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2498,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' obj'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2499
      start: 2493
    functionDepth: 2
    functionLinenumber: 2493
    functionLinenumberEnd: 2499
    functionName: brpc::RtmpRetryingClientStream::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendMetaData
    - 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:2503,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2504,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpSharedObjectMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2508
      start: 2501
    functionDepth: 2
    functionLinenumber: 2501
    functionLinenumberEnd: 2508
    functionName: brpc::RtmpRetryingClientStream::SendSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    - butil::intrusive_ptr::SendSharedObjectMessage
    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:2511,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2512,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2516
      start: 2510
    functionDepth: 2
    functionLinenumber: 2510
    functionLinenumberEnd: 2516
    functionName: brpc::RtmpRetryingClientStream::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendAudioMessage
    - 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:2519,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2520,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2524
      start: 2518
    functionDepth: 2
    functionLinenumber: 2518
    functionLinenumberEnd: 2524
    functionName: brpc::RtmpRetryingClientStream::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendAACMessage
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    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:2527,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2528,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2532
      start: 2526
    functionDepth: 2
    functionLinenumber: 2526
    functionLinenumberEnd: 2532
    functionName: brpc::RtmpRetryingClientStream::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendVideoMessage
    - 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:2535,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2536,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2539,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2540
      start: 2534
    functionDepth: 2
    functionLinenumber: 2534
    functionLinenumberEnd: 2540
    functionName: brpc::RtmpRetryingClientStream::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    - butil::intrusive_ptr::SendAVCMessage
    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:2543,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2549,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2551
      start: 2542
    functionDepth: 1
    functionLinenumber: 2542
    functionLinenumberEnd: 2551
    functionName: brpc::RtmpRetryingClientStream::StopCurrentStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SignalError
    - 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: 2553
      start: 2553
    functionDepth: 0
    functionLinenumber: 2553
    functionLinenumberEnd: 2553
    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:2557,1
    - Dst: brpc::RtmpRetryingClientStream::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2559,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2563
      start: 2555
    functionDepth: 1
    functionLinenumber: 2555
    functionLinenumberEnd: 2563
    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:2567,1
    - Dst: brpc::RtmpRetryingClientStream::local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2569,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2572,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2573
      start: 2565
    functionDepth: 1
    functionLinenumber: 2565
    functionLinenumberEnd: 2573
    functionName: brpc::RtmpRetryingClientStream::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::EndPoint
    - BAIDU_SCOPED_LOCK
    - brpc::RtmpRetryingClientStream::local_side
    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: 2578
      start: 2576
    functionDepth: 0
    functionLinenumber: 2576
    functionLinenumberEnd: 2578
    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:2585,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2586
      start: 2580
    functionDepth: 0
    functionLinenumber: 2580
    functionLinenumberEnd: 2586
    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:2589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2590
      start: 2588
    functionDepth: 0
    functionLinenumber: 2588
    functionLinenumberEnd: 2590
    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:2593,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2594
      start: 2592
    functionDepth: 1
    functionLinenumber: 2592
    functionLinenumberEnd: 2594
    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:2600,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2603,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: 2605
      start: 2596
    functionDepth: 1
    functionLinenumber: 2596
    functionLinenumberEnd: 2605
    functionName: brpc::RtmpServerStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_id
    - stream_name::c_str
    - butil::Status*::set_error
    - 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:2608,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2610
      start: 2607
    functionDepth: 1
    functionLinenumber: 2607
    functionLinenumberEnd: 2610
    functionName: brpc::RtmpServerStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - ShortDebugString
    - remote_side
    - LOG
    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:2617,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,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: 2620
      start: 2612
    functionDepth: 1
    functionLinenumber: 2612
    functionLinenumberEnd: 2620
    functionName: brpc::RtmpServerStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_id
    - butil::Status*::set_error
    - butil::endpoint2str
    - c_str
    - RtmpPublishType2Str
    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:2623,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2626
      start: 2622
    functionDepth: 1
    functionLinenumber: 2622
    functionLinenumberEnd: 2626
    functionName: brpc::RtmpServerStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::OnSeek(double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - pause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2633
      start: 2628
    functionDepth: 1
    functionLinenumber: 2628
    functionLinenumberEnd: 2633
    functionName: brpc::RtmpServerStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    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: 2635
      start: 2635
    functionDepth: 0
    functionLinenumber: 2635
    functionLinenumberEnd: 2635
    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:2644,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2648,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2656,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2669,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2671,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2673,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2679,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2687,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2688,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2689,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2694,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 1
    argNames:
    - ' error_desc'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2696
      start: 2637
    functionDepth: 1
    functionLinenumber: 2637
    functionLinenumberEnd: 2696
    functionName: brpc::RtmpServerStream::SendStopMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - RtmpInfo::code
    - WriteAMFNull
    - empty
    - butil::IOBuf::size
    - WriteAMFUint32
    - LOG_IF
    - SetFailed
    - remote_side
    - WriteAMFString
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - data
    - as_string
    - get
    - size
    - WriteAMFObject
    - RtmpInfo::set_code
    - brpc::policy::WriteWithoutOvercrowded
    - PLOG_IF
    - butil::IOBuf::IOBuf
    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:2703,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2705,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2706
      start: 2700
    functionDepth: 1
    functionLinenumber: 2700
    functionLinenumberEnd: 2706
    functionName: brpc::RtmpServerStream::SendStreamDry
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - SendControlMessage
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::SendStreamDry()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2711,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2715
      start: 2708
    functionDepth: 6
    functionLinenumber: 2708
    functionLinenumberEnd: 2715
    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:2719,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2726,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2729,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2731
      start: 2717
    functionDepth: 1
    functionLinenumber: 2717
    functionLinenumberEnd: 2731
    functionName: brpc::RtmpServerStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::RemoveMessageStream
    - remote_side
    - parsing_context
    - CallOnStop
    - LOG
    - static_cast<policy::RtmpContext*>
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnStopInternal()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2734,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: 2733
    functionDepth: 0
    functionLinenumber: 2733
    functionLinenumberEnd: 2742
    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:2745,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2751,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2752,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' url_in'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2754
      start: 2744
    functionDepth: 0
    functionLinenumber: 2744
    functionLinenumberEnd: 2754
    functionName: brpc::RemoveProtocolPrefix
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::size
    - find
    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:2759,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2769,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2772,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: 2775
      start: 2756
    functionDepth: 0
    functionLinenumber: 2756
    functionLinenumberEnd: 2775
    functionName: brpc::ParseRtmpHostAndPort
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - substr
    - find
    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:2779,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2782,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2787,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2789,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: 2791
      start: 2777
    functionDepth: 1
    functionLinenumber: 2777
    functionLinenumberEnd: 2791
    functionName: brpc::RemoveQueryStrings
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::clear
    - substr
    - find
    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:2797,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2812,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2816,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2817,1
    - Dst: butil::StringPiece*::find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2819,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2826,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: 2828
      start: 2794
    functionDepth: 1
    functionLinenumber: 2794
    functionLinenumberEnd: 2828
    functionName: brpc::SplitVHostFromApp
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::clear
    - substr
    - find
    - butil::StringSplitter::field
    - butil::StringSplitter::length
    - butil::StringPiece::starts_with
    - butil::StringPiece::data
    - butil::StringPiece::size
    - butil::StringPiece::substr
    - butil::StringPiece*::find_last_of
    - butil::StringPiece*::remove_suffix
    - 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:2837,1
    - Dst: brpc::RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2840,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2843,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2846,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2856,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2857,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2859,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,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: 2869
      start: 2830
    functionDepth: 2
    functionLinenumber: 2830
    functionLinenumberEnd: 2869
    functionName: brpc::ParseRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece*::clear
    - butil::StringPiece::remove_prefix
    - brpc::ParseRtmpHostAndPort
    - butil::StringPiece::find_first_of
    - butil::StringPiece::size
    - butil::StringPiece::substr
    - brpc::SplitVHostFromApp
    - brpc::RemoveRtmpPrefix
    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:2876,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2883,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2884,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2887,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2888,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2889,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2891,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,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: 2895
      start: 2871
    functionDepth: 2
    functionLinenumber: 2871
    functionLinenumberEnd: 2895
    functionName: brpc::MakeRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - brpc::size
    - brpc::empty
    - std::string::push_back
    - data
    - std::string::reserve
    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:
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    - brpc::policy::WriteBigEndian3Bytes
    - append
    - size
    - static_cast<char>
    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:
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    - brpc::policy::WriteBigEndian3Bytes
    - append
    - size
    - static_cast<char>
    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:
    - brpc::policy::WriteBigEndian4Bytes
    - memcpy
    - butil::Status::OK
    - brpc::policy::WriteBigEndian3Bytes
    - append
    - size
    - static_cast<char>
    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:
    - WriteAMFObject
    - WriteAMFString
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - brpc::FlvWriter::WriteScriptData
    - 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:
    - WriteAMFObject
    - WriteAMFString
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - brpc::FlvWriter::WriteScriptData
    - 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:
    - fetch
    - butil::Status::OK
    - LOG
    - pop_front
    - memcmp
    - 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: 2
    functionsReached:
    - butil::Status::OK
    - butil::Status::ok
    - brpc::FlvReader::ReadHeader
    - fetch1
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::PeekMessageType(FlvTagType* type_out)
  - BBCount: 5
    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: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:244,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:246,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:247,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:249,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:251,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:251,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:256,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:257,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:259,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 260
      start: 228
    functionDepth: 2
    functionLinenumber: 228
    functionLinenumberEnd: 260
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - fetch
    - butil::Status::OK
    - brpc::policy::ReadBigEndian3Bytes
    - CHECK
    - length
    - pop_front
    - cut1
    - cutn
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status FlvReader::Read(RtmpVideoMessage* msg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:264,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:266,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:269,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:271,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:272,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:278,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:280,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:281,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:283,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:285,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/rtmp.cpp:285,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:291,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:292,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:294,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 262
    functionDepth: 2
    functionLinenumber: 262
    functionLinenumberEnd: 295
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - fetch
    - butil::Status::OK
    - brpc::policy::ReadBigEndian3Bytes
    - CHECK
    - length
    - pop_front
    - cut1
    - cutn
    - 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:299,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:301,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:304,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:306,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:307,1
    - Dst: length
      Src: /src/brpc/src/brpc/rtmp.cpp:309,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:310,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:312,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:313,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:314,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:315,1
    - Dst: ReadAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:319,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:320,1
    - Dst: ReadAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:322,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:323,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:327,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - msg
    - name
    argTypes:
    - RtmpMetaData*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 328
      start: 297
    functionDepth: 2
    functionLinenumber: 297
    functionLinenumberEnd: 328
    functionName: brpc::FlvReader::Read
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - ReadAMFObject
    - fetch
    - ReadAMFString
    - brpc::policy::ReadBigEndian3Bytes
    - butil::Status::OK
    - length
    - pop_front
    - cutn
    - butil::IOBuf::IOBuf
    - 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: 339
      start: 330
    functionDepth: 0
    functionLinenumber: 330
    functionLinenumberEnd: 339
    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: 354
      start: 341
    functionDepth: 0
    functionLinenumber: 341
    functionLinenumberEnd: 354
    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: 383
      start: 356
    functionDepth: 0
    functionLinenumber: 356
    functionLinenumberEnd: 383
    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: 393
      start: 385
    functionDepth: 0
    functionLinenumber: 385
    functionLinenumberEnd: 393
    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: 401
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 401
    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: 409
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 409
    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:413,1
    - Dst: FlvSoundRate2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:414,1
    - Dst: FlvSoundBits2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:415,1
    - Dst: FlvSoundType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:416,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:417,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 418
      start: 411
    functionDepth: 1
    functionLinenumber: 411
    functionLinenumberEnd: 418
    functionName: '& operator<<(std::ostream& os, const RtmpAudioMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvSoundRate2Str
    - FlvSoundBits2Str
    - FlvAudioCodec2Str
    - FlvSoundType2Str
    - 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:422,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:423,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/rtmp.cpp:424,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - ' msg'
    argTypes:
    - std::ostream
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 420
    functionDepth: 1
    functionLinenumber: 420
    functionLinenumberEnd: 425
    functionName: '& operator<<(std::ostream& os, const RtmpVideoMessage& msg)'
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - FlvVideoCodec2Str
    - FlvVideoFrameType2Str
    - butil::ToPrintable::ToPrintable
    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:429,1
    - Dst: FlvAudioCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:430,1
    - Dst: data::fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:432,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:434,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:437,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:444,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:444,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:445,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 427
    functionDepth: 2
    functionLinenumber: 427
    functionLinenumberEnd: 446
    functionName: brpc::RtmpAACMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - data::size
    - data::append_to
    - butil::Status::OK
    - FlvAudioCodec2Str
    - BuiltinServiceTest::TestStatus
    - data::fetch1
    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: 452
      start: 448
    functionDepth: 0
    functionLinenumber: 448
    functionLinenumberEnd: 452
    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:455,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:456,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:457,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:460,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:460,1
    - Dst: brpc::AudioSpecificConfig::Create
      Src: /src/brpc/src/brpc/rtmp.cpp:461,1
    - Dst: arraysize
      Src: /src/brpc/src/brpc/rtmp.cpp:461,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 462
      start: 454
    functionDepth: 2
    functionLinenumber: 454
    functionLinenumberEnd: 462
    functionName: brpc::AudioSpecificConfig::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - size
    - brpc::AudioSpecificConfig::Create
    - copy_to
    - BuiltinServiceTest::TestStatus
    - arraysize
    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:466,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:474,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:476,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 464
    functionDepth: 2
    functionLinenumber: 464
    functionLinenumberEnd: 477
    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:483,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 479
    functionDepth: 0
    functionLinenumber: 479
    functionLinenumberEnd: 488
    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:492,1
    - Dst: FlvVideoCodec2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:493,1
    - Dst: data::fetch
      Src: /src/brpc/src/brpc/rtmp.cpp:496,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:498,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:501,1
    - Dst: brpc::policy::ReadBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:506,1
    - Dst: data::append_to
      Src: /src/brpc/src/brpc/rtmp.cpp:507,1
    - Dst: data::size
      Src: /src/brpc/src/brpc/rtmp.cpp:507,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:508,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 490
    functionDepth: 2
    functionLinenumber: 490
    functionLinenumberEnd: 509
    functionName: brpc::RtmpAVCMessage::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - data::size
    - data::append_to
    - butil::Status::OK
    - brpc::policy::ReadBigEndian3Bytes
    - FlvVideoCodec2Str
    - data::fetch
    - 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:515,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 520
      start: 511
    functionDepth: 0
    functionLinenumber: 511
    functionLinenumberEnd: 520
    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:526,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 522
    functionDepth: 0
    functionLinenumber: 522
    functionLinenumberEnd: 531
    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: 549
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 549
    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: 557
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 557
    functionName: brpc::AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void AVCDecoderConfigurationRecord::AVCDecoderConfigurationRecord()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: AVCProfile2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:561,1
    - Dst: sps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:567,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:571,1
    - Dst: pps_list::size
      Src: /src/brpc/src/brpc/rtmp.cpp:574,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:578,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - AVCDecoderConfigurationRecord
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 582
    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:594,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:595,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:596,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:617,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:620,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:623,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: brpc::AVCDecoderConfigurationRecord::ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:628,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:633,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:637,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:638,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:644,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:647,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:648,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:653,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:655,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:662,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:663,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:668,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:686,1
    - Dst: butil::StringPiece::copy
      Src: /src/brpc/src/brpc/rtmp.cpp:690,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:701,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:715,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:720,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:730,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:731,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:735,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: avc_nalu_read_uev
      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_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:744,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:745,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:749,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:753,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:759,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:760,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:764,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:773,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:774,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:777,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:778,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:782,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:792,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:795,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:799,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:803,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: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:812,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:816,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:817,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:820,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:821,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:825,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:902,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:903,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:907,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:912,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:914,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:918,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:920,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:929,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:934,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:935,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:938,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:943,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:953,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:956,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:964,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:969,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:978,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:979,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:982,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:983,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:986,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:987,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1011,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1014,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1054,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1054,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1060,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1062,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1068,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1069,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1073,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1079,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1082,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1088,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1088,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1090,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,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: std::make_shared<RtmpConnect>
      Src: /src/brpc/src/brpc/rtmp.cpp:1116,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1117,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1118,1
    - Dst: RtmpSocketCreator::RtmpSocketCreator
      Src: /src/brpc/src/brpc/rtmp.cpp:1124,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1126,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1134,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1141,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1145,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1152,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1156,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    - Dst: CommonInit
      Src: /src/brpc/src/brpc/rtmp.cpp:1168,1
    - Dst: Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1175,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1189,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1203,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1206,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1217,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1220,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1228,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    - Dst: RtmpClientImpl::RtmpClientImpl
      Src: /src/brpc/src/brpc/rtmp.cpp:1241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1243,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1246,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1249,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:1263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1282,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1286,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1288,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1293,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1304,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1308,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1312,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1314,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1315,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1316,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1325,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1329,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1330,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1332,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1336,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1340,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1350,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1370,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1371,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1372,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1381,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1389,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1402,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1403,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1404,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1408,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1418,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1423,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1426,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1432,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1434,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1440,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1441,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1442,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1451,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1455,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1456,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: SocketMessagePtr::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1473,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1474,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1475,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1476,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1534,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1539,1
    - Dst: OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1545,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1554,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1560,1
    - Dst: OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1561,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1567,1
    - Dst: OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1568,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1574,1
    - Dst: OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1575,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1581,1
    - Dst: OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1582,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1588,1
    - Dst: OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1589,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1590,1
    - Dst: BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1595,1
    - Dst: OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1596,1
    - Dst: EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1597,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1605,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1606,1
    - Dst: OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1615,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1633,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1634,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:1638,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:1644,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1650,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1651,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1657,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1664,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1665,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1666,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1670,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1671,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1685,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1686,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1690,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1695,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1696,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1715,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1721,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1728,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1729,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1731,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1744,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1747,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1748,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1762,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1763,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1770,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1781,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1783,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1792,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1798,1
    - Dst: ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1803,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1807,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1811,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1814,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1816,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1829,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1830,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1844,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1845,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1846,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1849,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1850,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1854,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1865,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1869,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1871,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1888,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1889,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1894,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1898,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1916,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1920,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1922,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1924,1
    - Dst: stream_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:1938,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1939,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1948,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1952,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1953,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1954,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1955,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1957,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1958,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1968,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1971,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1975,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1989,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1993,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1994,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1995,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1996,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1997,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1998,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2003,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2031,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2035,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2036,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2037,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2046,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2050,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2051,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2060,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2078,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2079,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2080,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2081,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2082,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2083,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2087,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:2113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2115,1
    - Dst: butil::intrusive_ptr::options
      Src: /src/brpc/src/brpc/rtmp.cpp:2122,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: butil::intrusive_ptr::Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2128,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: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2133,1
    - Dst: butil::intrusive_ptr::Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: butil::intrusive_ptr::rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2141,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2149,1
    - Dst: OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2156,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2163,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2164,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2165,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2169,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2170,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2171,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2172,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2178,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2189,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2191,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2195,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2198,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rtmp.cpp:2206,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2208,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2209,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2213,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2239,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2246,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2252,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2253,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2254,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2259,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2267,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2268,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2272,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2275,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2278,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2282,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2307,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    - Dst: OnPlayable
      Src: /src/brpc/src/brpc/rtmp.cpp:2312,1
    - Dst: CallOnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:2316,1
    - Dst: CallOnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2320,1
    - Dst: CallOnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2324,1
    - Dst: CallOnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2328,1
    - Dst: CallOnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2332,1
    - Dst: CallOnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2336,1
    - Dst: OnSubStreamStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2340,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2347,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2349,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2352,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2358,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2366,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2369,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2384,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2391,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2393,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2395,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2399,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2400,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2404,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2409,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: butil::intrusive_ptr::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: butil::intrusive_ptr::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2430,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2436,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2447,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2451,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2452,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2455,1
    - Dst: CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2456,1
    - Dst: Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2460,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2466,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2471,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2486,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2487,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2490,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2494,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2498,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2503,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2504,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2511,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2512,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2519,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2520,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2527,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2528,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2535,1
    - Dst: AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2536,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2539,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2543,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2549,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2557,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2559,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2562,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2567,1
    - Dst: local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2569,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2572,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2585,1
    - Dst: get_rtmp_bvars
      Src: /src/brpc/src/brpc/rtmp.cpp:2589,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2593,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2600,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2603,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2609,1
    - Dst: set_error
      Src: /src/brpc/src/brpc/rtmp.cpp:2617,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:2644,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2648,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2656,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2669,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2671,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2673,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2679,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2687,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2688,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2689,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2694,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2703,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2705,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2711,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2713,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2719,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2726,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2729,1
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2734,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:2745,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2751,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2752,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2759,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2769,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2772,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2779,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2782,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2787,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2789,1
    - Dst: find
      Src: /src/brpc/src/brpc/rtmp.cpp:2797,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2812,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2816,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2817,1
    - Dst: find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2819,1
    - Dst: remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2826,1
    - Dst: butil::StringPiece::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2837,1
    - Dst: RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2840,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2843,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2846,1
    - Dst: ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2856,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2857,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2859,1
    - Dst: SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2883,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2884,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2887,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2888,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2889,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2891,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    CyclomaticComplexity: 304
    EdgeCount: 304
    ICount: 1457
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2897
      start: 584
    functionDepth: 6
    functionLinenumber: 584
    functionLinenumberEnd: 2897
    functionName: brpc::AVCDecoderConfigurationRecord::Create
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - RtmpInfo::set_level
    - OnSubStreamStop
    - RtmpInfo::set_description
    - CallOnStop
    - store
    - brpc::policy::WriteBigEndian3Bytes
    - socket_map
    - find_last_of
    - OnFirstMessage
    - is_server_accepted
    - pop_front
    - butil::intrusive_ptr::SendSharedObjectMessage
    - empty
    - SignalError
    - CHECK_NE
    - BuiltinServiceTest::TestStatus
    - OnSharedObjectMessage
    - OnUserData
    - butil::intrusive_ptr::intrusive_ptr
    - policy::RtmpContext*::RemoveMessageStream
    - remote_side
    - SocketMessagePtr::next::reset
    - butil::StringPiece::starts_with
    - std::string
    - butil::intrusive_ptr::SendVideoMessage
    - data
    - std::make_shared<RtmpConnect>
    - SocketMessagePtr::body::append
    - get
    - butil::intrusive_ptr::is_server_accepted
    - size
    - RtmpPublishType2Str
    - BAIDU_SCOPED_LOCK
    - log_id
    - find
    - brpc::policy::is_video_frame_type_valid
    - clear
    - StartCancel
    - Failed
    - butil::BaseIteratorRangeToNumberTraits::max
    - butil::StringPiece::size
    - ShortDebugString
    - copy_to
    - EndProcessingMessage
    - SendControlMessage
    - reset
    - push_back
    - ReleaseAdditionalReference
    - NotifyOnFailed
    - reserve
    - stream_id
    - CHECK_LT
    - OnClientStreamCreated*::cntl::call_id
    - CallOnMetaData
    - butil::StringPiece::clear
    - std::string::reserve
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - butil::intrusive_ptr::SendCuePoint
    - OnStopInternal
    - butil::intrusive_ptr<RtmpClientStream>
    - butil::intrusive_ptr::Publish
    - options
    - policy::RtmpContext*::SetState
    - OnCuePoint
    - CallOnUserData
    - RtmpInfo::code
    - std::string::append
    - bthread_id_unlock_and_destroy
    - SocketMapKey
    - OnAudioMessage
    - description
    - swap
    - policy::RtmpTransactionHandler*::Cancel
    - WriteAMFUint32
    - WriteAMFString
    - stream_name::empty
    - bthread_timer_add
    - brpc::policy::ReadBigEndian4Bytes
    - CHECK
    - brpc::policy::WriteBigEndian2Bytes
    - RtmpSocketCreator::RtmpSocketCreator
    - std::string::push_back
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - butil::microseconds_from_now
    - butil::intrusive_ptr::SignalError
    - bthread_timer_del
    - RtmpInfo::set_code
    - substr
    - brpc::SetTrackMeAddress
    - LaunchSubStream
    - butil::StringPiece::data
    - static_cast<policy::RtmpContext*>
    - butil::intrusive_ptr::rtmp_url
    - ParseRtmpHostAndPort
    - AcquireStreamToSend
    - AMFOutputStream::good
    - CommonInit
    - bthread_id_create
    - Recreate
    - butil::intrusive_ptr::SendMetaData
    - butil::StringSplitter::length
    - CallOnStopIfNeeded
    - Init
    - butil::intrusive_ptr::Recreate
    - fd
    - policy::RtmpContext*::RemoveTransaction
    - butil::intrusive_ptr::SendAACMessage
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - exchange
    - policy::RtmpContext*::set_simplified_rtmp
    - ErrorText
    - connection_type
    - publish_name::empty
    - butil::intrusive_ptr::SendAVCMessage
    - brpc::policy::SendC0C1
    - butil::gettimeofday_us
    - bthread_id_error
    - butil::StringSplitter::field
    - butil::intrusive_ptr::get
    - CallOnVideoMessage
    - policy::RtmpContext*::SendConnectRequest
    - SocketMessagePtr::size
    - play_name::empty
    - OnPlayable
    - policy::RtmpContext*::SetConnectCallback
    - starts_with
    - Write
    - get_rtmp_bvars
    - RemoveRtmpPrefix
    - local_side
    - Join
    - WriteAMFNumber
    - butil::intrusive_ptr::Destroy
    - OnClientStreamCreated*::cntl::set_max_retry
    - std::unique_lock::unlock
    - OnClientStreamCreated*::cntl::set_stream_creator
    - CallOnAudioMessage
    - id
    - NewSubStream
    - avc_nalu_read_bit
    - remove_suffix
    - brpc::policy::WriteBigEndian4Bytes
    - butil::StringPiece::copy
    - parsing_context
    - get_client_side_messenger
    - PLOG_IF
    - butil::StringPiece::find_first_of
    - OnMetaData
    - RtmpClientImpl::RtmpClientImpl
    - next_as_annexb
    - OnStop
    - butil::intrusive_ptr::has_data_ever
    - policy::RtmpContext*::only_check_simple_s0s1
    - has_data_ever
    - stream_name::c_str
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Play
    - cutn
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - brpc::policy::ReadBigEndian2Bytes
    - SplitVHostFromApp
    - butil::StringPiece::remove_prefix
    - brpc::policy::is_video_codec_valid
    - policy::RtmpContext::RtmpContext
    - BeginProcessingMessage
    - butil::Status::OK
    - _chan::CallMethod
    - LOG
    - WriteAMFNull
    - level
    - fetch1
    - ErrorCode
    - CreateSocket
    - butil::IOBuf::size
    - butil::intrusive_ptr::SendAudioMessage
    - LOG_IF
    - SetFailed
    - PLOG
    - SocketUniquePtr::release
    - policy::RtmpContext*::client_options
    - butil::intrusive_ptr::Init
    - butil::StringPiece::substr
    - butil::Status::ok
    - policy::RtmpContext*::OnConnected
    - CallOnSharedObjectMessage
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - OnClientStreamCreated*::cntl::set_connection_type
    - butil::endpoint2str
    - brpc::AVCDecoderConfigurationRecord::ParseSPS
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - OnVideoMessage
    - brpc::policy::MakeUnsentControlMessage
    - set_error
    - c_str
    - as_string
    - WriteAMFObject
    - butil::EndPoint
    - OnClientStreamCreated*::cntl::set_request_code
    - SendMessage
    - brpc::policy::WriteWithoutOvercrowded
    - OnClientStreamCreated::OnClientStreamCreated
    - done
    - code
    - stream_name
    - butil::intrusive_ptr::options
    - OnClientStreamCreated*::stream::reset
    - find_avc_annexb_nalu_stop_code
    - butil::intrusive_ptr::OnStopInternal
    - CallOnCuePoint
    - set_end
    - OnFailedToCreateStream
    - next_as_ibmf
    - load
    - butil::StringPiece::empty
    - berror
    - OnClientStreamCreated*::cntl::connection_type
    - find_avc_annexb_nalu_start_code
    - avc_nalu_read_uev
    - hash_code::has_been_set
    - SocketMessagePtr::body::push_back
    - SocketUniquePtr::ShareStats
    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:594,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:595,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:596,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:610,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:615,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:616,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:617,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:619,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:620,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:622,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:623,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:624,1
    - Dst: ParseSPS
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:627,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/rtmp.cpp:628,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:631,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:633,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:636,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:637,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:638,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:641,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:643,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:644,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:646,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:647,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:648,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:651,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:653,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:655,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - size
    - AVCDecoderConfigurationRecord::Create
    argTypes:
    - buf
    - buf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 587
    functionDepth: 2
    functionLinenumber: 587
    functionLinenumberEnd: 656
    functionName: brpc::DEFINE_SMALL_ARRAY
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - reserve
    - butil::StringPiece::empty
    - butil::Status::OK
    - clear
    - butil::StringPiece::size
    - butil::StringPiece::data
    - ParseSPS
    - butil::StringPiece::substr
    - butil::Status::ok
    - push_back
    - BuiltinServiceTest::TestStatus
    - brpc::policy::ReadBigEndian2Bytes
    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:662,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:663,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:668,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:678,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:686,1
    - Dst: copy
      Src: /src/brpc/src/brpc/rtmp.cpp:690,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:701,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:707,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:711,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:715,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:719,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:720,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:723,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:730,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:731,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:735,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:736,1
    - Dst: avc_nalu_read_uev
      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_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:744,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:745,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:748,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:749,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:752,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:753,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:759,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:760,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:764,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:773,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:774,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:777,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:778,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:782,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:783,1
    - Dst: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:787,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:788,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:791,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:792,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:795,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:796,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:799,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:800,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:803,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: avc_nalu_read_bit
      Src: /src/brpc/src/brpc/rtmp.cpp:812,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:813,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:816,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:817,1
    - Dst: avc_nalu_read_uev
      Src: /src/brpc/src/brpc/rtmp.cpp:820,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/rtmp.cpp:821,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/rtmp.cpp:825,1
    CyclomaticComplexity: 49
    EdgeCount: 49
    ICount: 113
    argCount: 2
    argNames:
    - ' buf'
    - sps_length
    argTypes:
    - butil::StringPiece
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 826
      start: 658
    functionDepth: 2
    functionLinenumber: 658
    functionLinenumberEnd: 826
    functionName: brpc::AVCDecoderConfigurationRecord::ParseSPS
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - BuiltinServiceTest::TestStatus
    - butil::Status::OK
    - copy
    - avc_nalu_read_uev
    - empty
    - avc_nalu_read_bit
    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: 848
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 848
    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: 884
      start: 850
    functionDepth: 0
    functionLinenumber: 850
    functionLinenumberEnd: 884
    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: 895
      start: 886
    functionDepth: 0
    functionLinenumber: 886
    functionLinenumberEnd: 895
    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: 898
      start: 897
    functionDepth: 0
    functionLinenumber: 897
    functionLinenumberEnd: 898
    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:902,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:903,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:906,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:907,1
    - Dst: find_avc_annexb_nalu_start_code
      Src: /src/brpc/src/brpc/rtmp.cpp:911,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:912,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:914,1
    - Dst: next_as_annexb
      Src: /src/brpc/src/brpc/rtmp.cpp:917,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:918,1
    - Dst: next_as_ibmf
      Src: /src/brpc/src/brpc/rtmp.cpp:920,1
    - Dst: set_end
      Src: /src/brpc/src/brpc/rtmp.cpp:923,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 926
      start: 900
    functionDepth: 0
    functionLinenumber: 900
    functionLinenumberEnd: 926
    functionName: AVCNaluIterator::operator++()
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - next_as_ibmf
    - find_avc_annexb_nalu_start_code
    - pop_front
    - next_as_annexb
    - set_end
    - size
    linkageType: ''
    returnType: void
    signature: void AVCNaluIterator::operator++()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:929,1
    - Dst: find_avc_annexb_nalu_stop_code
      Src: /src/brpc/src/brpc/rtmp.cpp:934,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:935,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:938,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:939,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:943,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 946
      start: 928
    functionDepth: 1
    functionLinenumber: 928
    functionLinenumberEnd: 946
    functionName: brpc::AVCNaluIterator::next_as_annexb
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - clear
    - pop_front
    - cutn
    - empty
    - find_avc_annexb_nalu_stop_code
    - fetch1
    linkageType: ''
    returnType: bool
    signature: bool AVCNaluIterator::next_as_annexb()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rtmp.cpp:951,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:953,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:956,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:957,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:963,1
    - Dst: brpc::policy::ReadBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:964,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:966,1
    - Dst: brpc::policy::ReadBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:967,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/rtmp.cpp:969,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:975,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:978,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:979,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/rtmp.cpp:982,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rtmp.cpp:983,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rtmp.cpp:986,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rtmp.cpp:987,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 991
      start: 948
    functionDepth: 1
    functionLinenumber: 948
    functionLinenumberEnd: 991
    functionName: brpc::AVCNaluIterator::next_as_ibmf
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::policy::ReadBigEndian4Bytes
    - LOG
    - pop_front
    - cutn
    - empty
    - copy_to
    - fetch1
    - CHECK_NE
    - size
    - brpc::policy::ReadBigEndian2Bytes
    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: 1004
      start: 993
    functionDepth: 0
    functionLinenumber: 993
    functionLinenumberEnd: 1004
    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:1011,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1012
      start: 1010
    functionDepth: 0
    functionLinenumber: 1010
    functionLinenumberEnd: 1012
    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:1014,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1016
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1016
    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: 1029
      start: 1029
    functionDepth: 0
    functionLinenumber: 1029
    functionLinenumberEnd: 1029
    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: 1030
      start: 1030
    functionDepth: 0
    functionLinenumber: 1030
    functionLinenumberEnd: 1030
    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:1054,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1054,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1056,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1057,1
    - Dst: policy::RtmpContext*::client_options
      Src: /src/brpc/src/brpc/rtmp.cpp:1060,1
    - Dst: policy::RtmpContext*::set_simplified_rtmp
      Src: /src/brpc/src/brpc/rtmp.cpp:1062,1
    - Dst: policy::RtmpContext*::SendConnectRequest
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1063,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1064,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1065,1
    - Dst: policy::RtmpContext*::SetState
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1067,1
    - Dst: policy::RtmpContext*::set_create_stream_with_play_or_publish
      Src: /src/brpc/src/brpc/rtmp.cpp:1068,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1069,1
    - Dst: policy::RtmpContext*::SetConnectCallback
      Src: /src/brpc/src/brpc/rtmp.cpp:1073,1
    - Dst: brpc::policy::SendC0C1
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rtmp.cpp:1077,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1078,1
    - Dst: done
      Src: /src/brpc/src/brpc/rtmp.cpp:1079,1
    - Dst: policy::RtmpContext*::only_check_simple_s0s1
      Src: /src/brpc/src/brpc/rtmp.cpp:1082,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 2
    argNames:
    - s
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1084
      start: 1050
    functionDepth: 1
    functionLinenumber: 1050
    functionLinenumberEnd: 1084
    functionName: brpc::RtmpConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::only_check_simple_s0s1
    - brpc::policy::SendC0C1
    - policy::RtmpContext*::SetState
    - policy::RtmpContext*::client_options
    - LOG
    - done
    - Socket*::remote_side
    - Socket*::fd
    - static_cast<policy::RtmpContext*>
    - policy::RtmpContext*::SendConnectRequest
    - policy::RtmpContext*::set_create_stream_with_play_or_publish
    - Socket*::parsing_context
    - policy::RtmpContext*::SetConnectCallback
    - policy::RtmpContext*::set_simplified_rtmp
    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:1088,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1088,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1090,1
    - Dst: policy::RtmpContext*::OnConnected
      Src: /src/brpc/src/brpc/rtmp.cpp:1092,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1094
      start: 1086
    functionDepth: 1
    functionLinenumber: 1086
    functionLinenumberEnd: 1094
    functionName: brpc::RtmpConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::OnConnected
    - static_cast<policy::RtmpContext*>
    - Socket*::parsing_context
    - LOG
    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: 1100
      start: 1098
    functionDepth: 0
    functionLinenumber: 1098
    functionLinenumberEnd: 1100
    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: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: 4
    argCount: 2
    argNames:
    - ' opt'
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1107
      start: 1102
    functionDepth: 0
    functionLinenumber: 1102
    functionLinenumberEnd: 1107
    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:1116,1
    - Dst: policy::RtmpContext::RtmpContext
      Src: /src/brpc/src/brpc/rtmp.cpp:1117,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rtmp.cpp:1118,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' pt'
    - id
    argTypes:
    - butil::EndPoint
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1119
      start: 1113
    functionDepth: 0
    functionLinenumber: 1113
    functionLinenumberEnd: 1119
    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:1124,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1126,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1130
      start: 1121
    functionDepth: 3
    functionLinenumber: 1121
    functionLinenumberEnd: 1130
    functionName: brpc::RtmpClientImpl::CommonInit
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - brpc::RtmpClientImpl::Init
    - RtmpSocketCreator::RtmpSocketCreator
    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:1134,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1141,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1142
      start: 1132
    functionDepth: 2
    functionLinenumber: 1132
    functionLinenumberEnd: 1142
    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:1145,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1152,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1143
    functionDepth: 2
    functionLinenumber: 1143
    functionLinenumberEnd: 1153
    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:1156,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1163,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1164
      start: 1154
    functionDepth: 2
    functionLinenumber: 1154
    functionLinenumberEnd: 1164
    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:1168,1
    - Dst: brpc::RtmpClientImpl::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1175,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: 1176
      start: 1165
    functionDepth: 2
    functionLinenumber: 1165
    functionLinenumberEnd: 1176
    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: 1178
      start: 1178
    functionDepth: 0
    functionLinenumber: 1178
    functionLinenumberEnd: 1178
    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: 1179
      start: 1179
    functionDepth: 0
    functionLinenumber: 1179
    functionLinenumberEnd: 1179
    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: 1180
      start: 1180
    functionDepth: 0
    functionLinenumber: 1180
    functionLinenumberEnd: 1180
    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: 1185
      start: 1182
    functionDepth: 0
    functionLinenumber: 1182
    functionLinenumberEnd: 1185
    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:1189,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1194
      start: 1187
    functionDepth: 0
    functionLinenumber: 1187
    functionLinenumberEnd: 1194
    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:1198,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1200,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1203,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1206,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - butil::EndPoint
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1208
      start: 1196
    functionDepth: 1
    functionLinenumber: 1196
    functionLinenumberEnd: 1208
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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:1212,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1214,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1217,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1220,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - server_addr_and_port
    - ' options'
    argTypes:
    - char*
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1222
      start: 1210
    functionDepth: 1
    functionLinenumber: 1210
    functionLinenumberEnd: 1222
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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:1226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1228,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1231,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1234,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - server_addr
    - port
    - ' options'
    argTypes:
    - char*
    - int
    - RtmpClientOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1236
      start: 1224
    functionDepth: 1
    functionLinenumber: 1224
    functionLinenumberEnd: 1236
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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:1241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1243,1
    - Dst: butil::intrusive_ptr::Init
      Src: /src/brpc/src/brpc/rtmp.cpp:1246,1
    - Dst: butil::intrusive_ptr::swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1249,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: 1251
      start: 1238
    functionDepth: 1
    functionLinenumber: 1238
    functionLinenumberEnd: 1251
    functionName: brpc::RtmpClient::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 10
    functionsReached:
    - butil::intrusive_ptr::swap
    - butil::intrusive_ptr::Init
    - RtmpClientImpl::RtmpClientImpl
    - LOG
    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: 1253
      start: 1253
    functionDepth: 0
    functionLinenumber: 1253
    functionLinenumberEnd: 1253
    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:1263,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - is_client
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1265
      start: 1255
    functionDepth: 0
    functionLinenumber: 1255
    functionLinenumberEnd: 1265
    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: 1268
      start: 1267
    functionDepth: 0
    functionLinenumber: 1267
    functionLinenumberEnd: 1268
    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: 1272
      start: 1270
    functionDepth: 0
    functionLinenumber: 1270
    functionLinenumberEnd: 1272
    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:1282,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1286,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1288,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1293,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: 1294
      start: 1274
    functionDepth: 1
    functionLinenumber: 1274
    functionLinenumberEnd: 1294
    functionName: brpc::RtmpStreamBase::SendMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - Write
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - size
    - LOG
    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:1304,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: 1305
      start: 1296
    functionDepth: 0
    functionLinenumber: 1296
    functionLinenumberEnd: 1305
    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:1308,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1312,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1313,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1314,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1315,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1316,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1320,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - ' cuepoint'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1321
      start: 1307
    functionDepth: 2
    functionLinenumber: 1307
    functionLinenumberEnd: 1321
    functionName: brpc::RtmpStreamBase::SendCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - LOG
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:1325,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1329,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1330,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1332,1
    - Dst: brpc::RtmpStreamBase::SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1336,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' metadata'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1337
      start: 1323
    functionDepth: 2
    functionLinenumber: 1323
    functionLinenumberEnd: 1337
    functionName: brpc::RtmpStreamBase::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFObject
    - brpc::RtmpStreamBase::SendMessage
    - WriteAMFString
    - LOG
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:1340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1342
      start: 1339
    functionDepth: 1
    functionLinenumber: 1339
    functionLinenumberEnd: 1342
    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:1350,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1358,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1360,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1370,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1371,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1372,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 22
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1373
      start: 1344
    functionDepth: 1
    functionLinenumber: 1344
    functionLinenumberEnd: 1373
    functionName: brpc::RtmpStreamBase::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::push_back
    - SocketMessagePtr::body::append
    - Write
    - size
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAudioMessage(const RtmpAudioMessage& msg)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1381,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1389,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1391,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1402,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1403,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1404,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1375
    functionDepth: 1
    functionLinenumber: 1375
    functionLinenumberEnd: 1405
    functionName: brpc::RtmpStreamBase::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::append
    - Write
    - size
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendAACMessage(const RtmpAACMessage& msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1408,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1410
      start: 1407
    functionDepth: 1
    functionLinenumber: 1407
    functionLinenumberEnd: 1410
    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:1418,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1422,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1423,1
    - Dst: brpc::policy::is_video_codec_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1425,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1426,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1432,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1434,1
    - Dst: SocketMessagePtr::body::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:1440,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1441,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1442,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1443
      start: 1412
    functionDepth: 1
    functionLinenumber: 1412
    functionLinenumberEnd: 1443
    functionName: brpc::RtmpStreamBase::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::is_video_codec_valid
    - brpc::policy::is_video_frame_type_valid
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::push_back
    - SocketMessagePtr::body::append
    - Write
    - size
    linkageType: ''
    returnType: int
    signature: int RtmpStreamBase::SendVideoMessage(const RtmpVideoMessage& msg)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1451,1
    - Dst: brpc::policy::is_video_frame_type_valid
      Src: /src/brpc/src/brpc/rtmp.cpp:1455,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1456,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1462,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:1464,1
    - Dst: brpc::policy::WriteBigEndian3Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1473,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1474,1
    - Dst: SocketMessagePtr::body::append
      Src: /src/brpc/src/brpc/rtmp.cpp:1475,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1476,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 28
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1445
    functionDepth: 1
    functionLinenumber: 1445
    functionLinenumberEnd: 1477
    functionName: brpc::RtmpStreamBase::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::is_video_frame_type_valid
    - brpc::policy::WriteBigEndian3Bytes
    - LOG
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - SocketMessagePtr::body::append
    - Write
    - size
    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: 1481
      start: 1479
    functionDepth: 0
    functionLinenumber: 1479
    functionLinenumberEnd: 1481
    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: 1489
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1489
    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: 1493
      start: 1491
    functionDepth: 0
    functionLinenumber: 1491
    functionLinenumberEnd: 1493
    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: 1495
      start: 1495
    functionDepth: 0
    functionLinenumber: 1495
    functionLinenumberEnd: 1495
    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:1498,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1498,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1500
      start: 1497
    functionDepth: 2
    functionLinenumber: 1497
    functionLinenumberEnd: 1500
    functionName: brpc::RtmpStreamBase::OnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnUserData(void*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1503,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1505
      start: 1502
    functionDepth: 2
    functionLinenumber: 1502
    functionLinenumberEnd: 1505
    functionName: brpc::RtmpStreamBase::OnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnCuePoint(RtmpCuePoint* cuepoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1508,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1511
      start: 1507
    functionDepth: 2
    functionLinenumber: 1507
    functionLinenumberEnd: 1511
    functionName: brpc::RtmpStreamBase::OnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    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:1514,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1514,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1516
      start: 1513
    functionDepth: 2
    functionLinenumber: 1513
    functionLinenumberEnd: 1516
    functionName: brpc::RtmpStreamBase::OnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnSharedObjectMessage(RtmpSharedObjectMessage*)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1519,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1520
      start: 1518
    functionDepth: 2
    functionLinenumber: 1518
    functionLinenumberEnd: 1520
    functionName: brpc::RtmpStreamBase::OnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::OnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    - Dst: brpc::RtmpStreamBase::stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1523,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1524
      start: 1522
    functionDepth: 2
    functionLinenumber: 1522
    functionLinenumberEnd: 1524
    functionName: brpc::RtmpStreamBase::OnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpStreamBase::stream_id
    - brpc::RtmpStreamBase::remote_side
    - LOG
    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: 1528
      start: 1526
    functionDepth: 0
    functionLinenumber: 1526
    functionLinenumberEnd: 1528
    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:1533,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1534,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1539,1
    - Dst: brpc::RtmpStreamBase::OnFirstMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1545,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - fun_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1548
      start: 1530
    functionDepth: 1
    functionLinenumber: 1530
    functionLinenumberEnd: 1548
    functionName: brpc::RtmpStreamBase::BeginProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 6
    functionsReached:
    - brpc::RtmpStreamBase::OnFirstMessage
    - LOG
    - std::unique_lock::unlock
    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:1554,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1555,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1557
      start: 1550
    functionDepth: 1
    functionLinenumber: 1550
    functionLinenumberEnd: 1557
    functionName: brpc::RtmpStreamBase::EndProcessingMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 6
    functionsReached:
    - brpc::RtmpStreamBase::OnStop
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::EndProcessingMessage()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1560,1
    - Dst: brpc::RtmpStreamBase::OnUserData
      Src: /src/brpc/src/brpc/rtmp.cpp:1561,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1564
      start: 1559
    functionDepth: 2
    functionLinenumber: 1559
    functionLinenumberEnd: 1564
    functionName: brpc::RtmpStreamBase::CallOnUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - 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:1567,1
    - Dst: brpc::RtmpStreamBase::OnCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1568,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1569,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - obj
    argTypes:
    - RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1571
      start: 1566
    functionDepth: 2
    functionLinenumber: 1566
    functionLinenumberEnd: 1571
    functionName: brpc::RtmpStreamBase::CallOnCuePoint
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnCuePoint
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnCuePoint(RtmpCuePoint* obj)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1574,1
    - Dst: brpc::RtmpStreamBase::OnMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:1575,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1576,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - obj
    - ' name'
    argTypes:
    - RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1578
      start: 1573
    functionDepth: 2
    functionLinenumber: 1573
    functionLinenumberEnd: 1578
    functionName: brpc::RtmpStreamBase::CallOnMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnMetaData
    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:1581,1
    - Dst: brpc::RtmpStreamBase::OnSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1582,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1583,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1585
      start: 1580
    functionDepth: 2
    functionLinenumber: 1580
    functionLinenumberEnd: 1585
    functionName: brpc::RtmpStreamBase::CallOnSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - 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:1588,1
    - Dst: brpc::RtmpStreamBase::OnAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1589,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1590,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1592
      start: 1587
    functionDepth: 2
    functionLinenumber: 1587
    functionLinenumberEnd: 1592
    functionName: brpc::RtmpStreamBase::CallOnAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnAudioMessage
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnAudioMessage(RtmpAudioMessage* msg)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::BeginProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1595,1
    - Dst: brpc::RtmpStreamBase::OnVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1596,1
    - Dst: brpc::RtmpStreamBase::EndProcessingMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1597,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1599
      start: 1594
    functionDepth: 2
    functionLinenumber: 1594
    functionLinenumberEnd: 1599
    functionName: brpc::RtmpStreamBase::CallOnVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - brpc::RtmpStreamBase::BeginProcessingMessage
    - brpc::RtmpStreamBase::EndProcessingMessage
    - brpc::RtmpStreamBase::OnVideoMessage
    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:1605,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1606,1
    - Dst: brpc::RtmpStreamBase::OnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1615,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1616
      start: 1601
    functionDepth: 1
    functionLinenumber: 1601
    functionLinenumberEnd: 1616
    functionName: brpc::RtmpStreamBase::CallOnStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::RtmpStreamBase::OnStop
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpStreamBase::CallOnStop()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RtmpStreamBase::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1619,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1619
      start: 1618
    functionDepth: 1
    functionLinenumber: 1618
    functionLinenumberEnd: 1619
    functionName: brpc::RtmpStreamBase::remote_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 14
    functionsReached:
    - butil::EndPoint
    - brpc::RtmpStreamBase::remote_side
    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:1622,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:1622,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1622
      start: 1621
    functionDepth: 1
    functionLinenumber: 1621
    functionLinenumberEnd: 1622
    functionName: brpc::RtmpStreamBase::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::EndPoint
    - brpc::RtmpStreamBase::local_side
    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:1633,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1634,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1635
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1635
    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:1638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1639
      start: 1637
    functionDepth: 0
    functionLinenumber: 1637
    functionLinenumberEnd: 1639
    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:1644,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1650,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1651,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1652,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1657,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1658,1
    - Dst: StartCancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1659,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1664,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1665,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1666,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1670,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1671,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 30
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1677
      start: 1641
    functionDepth: 2
    functionLinenumber: 1641
    functionLinenumberEnd: 1677
    functionName: brpc::RtmpClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - bthread_id_error
    - StartCancel
    - brpc::RtmpClientStream::OnStopInternal
    - swap
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::Destroy()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1685,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1686,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1690,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1695,1
    - Dst: bthread_id_error
      Src: /src/brpc/src/brpc/rtmp.cpp:1696,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1703
      start: 1679
    functionDepth: 2
    functionLinenumber: 1679
    functionLinenumberEnd: 1703
    functionName: brpc::RtmpClientStream::SignalError
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - brpc::RtmpClientStream::OnStopInternal
    - std::unique_lock::unlock
    - bthread_id_error
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::SignalError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1710,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:1715,1
    - Dst: CreateSocket
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1716,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1717,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1721,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1722,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1723,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rtmp.cpp:1728,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1729,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1731,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1735,1
    - Dst: SocketUniquePtr::ShareStats
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: SocketUniquePtr*::get
      Src: /src/brpc/src/brpc/rtmp.cpp:1736,1
    - Dst: SocketUniquePtr*::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rtmp.cpp:1737,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1739
      start: 1705
    functionDepth: 3
    functionLinenumber: 1705
    functionLinenumberEnd: 1739
    functionName: brpc::RtmpClientStream::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr*::reset
    - remote_side
    - SocketUniquePtr::release
    - SocketUniquePtr*::get
    - brpc::SetTrackMeAddress
    - socket_map
    - Controller*::connection_type
    - SocketMapKey
    - SocketUniquePtr::ShareStats
    - Controller*::SetFailed
    - get
    - id
    - CreateSocket
    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:1744,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1747,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:1748,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1750
      start: 1741
    functionDepth: 6
    functionLinenumber: 1741
    functionLinenumberEnd: 1750
    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:1762,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1763,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1770,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1771
      start: 1752
    functionDepth: 2
    functionLinenumber: 1752
    functionLinenumberEnd: 1771
    functionName: brpc::RtmpClientStream::OnFailedToCreateStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - CHECK
    - brpc::RtmpClientStream::OnStopInternal
    - std::unique_lock::unlock
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::OnFailedToCreateStream()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1780,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1781,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1783,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:1792,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: 1794
      start: 1773
    functionDepth: 1
    functionLinenumber: 1773
    functionLinenumberEnd: 1794
    functionName: brpc::RtmpClientStream::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - remote_side
    - socket_map
    - SocketMapKey
    - swap
    - 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:1798,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/rtmp.cpp:1803,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/rtmp.cpp:1806,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1807,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1809,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1811,1
    - Dst: policy::RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/rtmp.cpp:1814,1
    - Dst: policy::RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/rtmp.cpp:1816,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1820,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1829,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/rtmp.cpp:1830,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rtmp.cpp:1832,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1833,1
    - Dst: brpc::RtmpClientStream::OnFailedToCreateStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1834,1
    - Dst: butil::intrusive_ptr<RtmpClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:1837,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1844,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1845,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1846,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:1849,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:1850,1
    - Dst: NotifyOnFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1854,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 42
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1856
      start: 1797
    functionDepth: 3
    functionLinenumber: 1797
    functionLinenumberEnd: 1856
    functionName: brpc::RtmpClientStream::DestroyStreamCreator
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr<RtmpClientStream>
    - LOG
    - policy::RtmpTransactionHandler*::Cancel
    - CHECK
    - brpc::RtmpClientStream::OnFailedToCreateStream
    - Controller*::ErrorCode
    - std::unique_lock::unlock
    - parsing_context
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::RtmpClientStream::OnStopInternal
    - Controller*::log_id
    - static_cast<policy::RtmpContext*>
    - bthread_id_create
    - NotifyOnFailed
    - Controller*::Failed
    - berror
    - CHECK_LT
    - policy::RtmpContext*::RemoveTransaction
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void RtmpClientStream::DestroyStreamCreator(Controller* cntl)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1860,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rtmp.cpp:1863,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1865,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1869,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1870,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1871,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1872,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1874,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1875,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1882,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1886,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1887,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1888,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1889,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1890,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1892,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1894,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:1896,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1898,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1899,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rtmp.cpp:1904,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:1909,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:1911,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1913,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1916,1
    - Dst: socket_map
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: SocketMapKey
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:1919,1
    - Dst: id
      Src: /src/brpc/src/brpc/rtmp.cpp:1920,1
    - Dst: ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/rtmp.cpp:1922,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:1924,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 42
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1925
      start: 1858
    functionDepth: 1
    functionLinenumber: 1858
    functionLinenumberEnd: 1925
    functionName: brpc::RtmpClientStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 9
    functionsReached:
    - CallOnStop
    - socket_map
    - WriteAMFNull
    - LOG
    - SocketMapKey
    - butil::IOBuf::size
    - WriteAMFUint32
    - SetFailed
    - policy::RtmpContext*::RemoveMessageStream
    - SocketMessagePtr::next::reset
    - PLOG
    - WriteAMFString
    - remote_side
    - CHECK
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::MakeUnsentControlMessage
    - get
    - id
    - brpc::policy::WriteWithoutOvercrowded
    - parsing_context
    - Failed
    - static_cast<policy::RtmpContext*>
    - AMFOutputStream::good
    - ReleaseAdditionalReference
    - butil::IOBuf::IOBuf
    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: 1931
      start: 1927
    functionDepth: 0
    functionLinenumber: 1927
    functionLinenumberEnd: 1931
    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:1938,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1939,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1944,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:1948,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1952,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1953,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1954,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1955,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1956,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:1957,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:1958,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1959,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1961,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:1962,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1968,1
    - Dst: brpc::policy::WriteBigEndian2Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1971,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:1973,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:1974,1
    - Dst: brpc::policy::MakeUnsentControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:1975,1
    - Dst: SocketMessagePtr::next::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:1977,1
    - Dst: Write
      Src: /src/brpc/src/brpc/rtmp.cpp:1985,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 36
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlayOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1986
      start: 1933
    functionDepth: 1
    functionLinenumber: 1933
    functionLinenumberEnd: 1986
    functionName: brpc::RtmpClientStream::Play
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - options
    - LOG
    - WriteAMFNull
    - Write
    - butil::IOBuf::size
    - WriteAMFUint32
    - SocketMessagePtr::next::reset
    - WriteAMFString
    - stream_name::empty
    - CHECK
    - brpc::policy::WriteBigEndian2Bytes
    - WriteAMFNumber
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::MakeUnsentControlMessage
    - brpc::policy::WriteBigEndian4Bytes
    - AMFOutputStream::good
    - stream_id
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    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:1989,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:1993,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:1994,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:1995,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:1996,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:1997,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:1998,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2003,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2004
      start: 1988
    functionDepth: 1
    functionLinenumber: 1988
    functionLinenumberEnd: 2004
    functionName: brpc::RtmpClientStream::Play2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - WriteAMFObject
    - SendMessage
    - WriteAMFString
    - WriteAMFNull
    - LOG
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    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: 2013
      start: 2006
    functionDepth: 0
    functionLinenumber: 2006
    functionLinenumberEnd: 2013
    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: 2027
      start: 2015
    functionDepth: 0
    functionLinenumber: 2015
    functionLinenumberEnd: 2027
    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:2031,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2035,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2036,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2037,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2038,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2039,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2040,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2042,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - ' name'
    - type
    argTypes:
    - butil::StringPiece
    - RtmpPublishType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2043
      start: 2029
    functionDepth: 1
    functionLinenumber: 2029
    functionLinenumberEnd: 2043
    functionName: brpc::RtmpClientStream::Publish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SendMessage
    - WriteAMFString
    - CHECK
    - WriteAMFNull
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    - RtmpPublishType2Str
    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:2046,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2050,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2051,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2052,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2053,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2054,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2056,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2057
      start: 2045
    functionDepth: 1
    functionLinenumber: 2045
    functionLinenumberEnd: 2057
    functionName: brpc::RtmpClientStream::Seek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SendMessage
    - WriteAMFString
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    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:2060,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2064,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2065,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2066,1
    - Dst: WriteAMFBool
      Src: /src/brpc/src/brpc/rtmp.cpp:2067,1
    - Dst: WriteAMFNumber
      Src: /src/brpc/src/brpc/rtmp.cpp:2068,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/rtmp.cpp:2069,1
    - Dst: SendMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2071,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 9
    argCount: 2
    argNames:
    - pause_or_unpause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2072
      start: 2059
    functionDepth: 1
    functionLinenumber: 2059
    functionLinenumberEnd: 2072
    functionName: brpc::RtmpClientStream::Pause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - SendMessage
    - WriteAMFString
    - AMFOutputStream::good
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - WriteAMFUint32
    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:2075,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2076,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: description
      Src: /src/brpc/src/brpc/rtmp.cpp:2077,1
    - Dst: brpc::RtmpClientStream::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2078,1
    - Dst: level
      Src: /src/brpc/src/brpc/rtmp.cpp:2079,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2080,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2081,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2082,1
    - Dst: code
      Src: /src/brpc/src/brpc/rtmp.cpp:2083,1
    - Dst: store
      Src: /src/brpc/src/brpc/rtmp.cpp:2087,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 10
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - RtmpInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2090
      start: 2074
    functionDepth: 2
    functionLinenumber: 2074
    functionLinenumberEnd: 2090
    functionName: brpc::RtmpClientStream::OnStatus
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_id
    - store
    - LOG
    - code
    - level
    - description
    - brpc::RtmpClientStream::SignalError
    - play_name::empty
    - publish_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: 2097
      start: 2092
    functionDepth: 0
    functionLinenumber: 2092
    functionLinenumberEnd: 2097
    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: 2102
      start: 2102
    functionDepth: 0
    functionLinenumber: 2102
    functionLinenumberEnd: 2102
    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:2113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2114,1
    - Dst: ErrorText
      Src: /src/brpc/src/brpc/rtmp.cpp:2115,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2122,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2124,1
    - Dst: Play
      Src: /src/brpc/src/brpc/rtmp.cpp:2128,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2129,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2130,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2133,1
    - Dst: Publish
      Src: /src/brpc/src/brpc/rtmp.cpp:2135,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: rtmp_url
      Src: /src/brpc/src/brpc/rtmp.cpp:2136,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2137,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2141,1
    - Dst: SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2142,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2144
      start: 2111
    functionDepth: 1
    functionLinenumber: 2111
    functionLinenumberEnd: 2144
    functionName: brpc::OnClientStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - Publish
    - options
    - Failed
    - LOG
    - Play
    - SignalError
    - play_name::empty
    - ErrorText
    - rtmp_url
    - publish_name::empty
    linkageType: ''
    returnType: void
    signature: void OnClientStreamCreated::Run()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2149,1
    - Dst: brpc::RtmpClientStream::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2150,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2156,1
    - Dst: OnClientStreamCreated::OnClientStreamCreated
      Src: /src/brpc/src/brpc/rtmp.cpp:2163,1
    - Dst: OnClientStreamCreated*::stream::reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2164,1
    - Dst: OnClientStreamCreated*::cntl::set_stream_creator
      Src: /src/brpc/src/brpc/rtmp.cpp:2165,1
    - Dst: OnClientStreamCreated*::cntl::set_connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2166,1
    - Dst: OnClientStreamCreated*::cntl::connection_type
      Src: /src/brpc/src/brpc/rtmp.cpp:2169,1
    - Dst: OnClientStreamCreated*::cntl::set_max_retry
      Src: /src/brpc/src/brpc/rtmp.cpp:2170,1
    - Dst: hash_code::has_been_set
      Src: /src/brpc/src/brpc/rtmp.cpp:2171,1
    - Dst: OnClientStreamCreated*::cntl::set_request_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2172,1
    - Dst: OnClientStreamCreated*::cntl::call_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2178,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2189,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2191,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/rtmp.cpp:2194,1
    - Dst: OnClientStreamCreated*::CancelBeforeCallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2195,1
    - Dst: _chan::CallMethod
      Src: /src/brpc/src/brpc/rtmp.cpp:2198,1
    - Dst: Join
      Src: /src/brpc/src/brpc/rtmp.cpp:2200,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - client
    - ' options'
    argTypes:
    - RtmpClient*
    - RtmpClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2202
      start: 2146
    functionDepth: 2
    functionLinenumber: 2146
    functionLinenumberEnd: 2202
    functionName: brpc::RtmpClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - OnClientStreamCreated*::cntl::set_request_code
    - OnClientStreamCreated*::CancelBeforeCallMethod
    - OnClientStreamCreated*::cntl::connection_type
    - Join
    - OnClientStreamCreated::OnClientStreamCreated
    - OnClientStreamCreated*::cntl::call_id
    - brpc::RtmpClientStream::OnStopInternal
    - LOG
    - hash_code::has_been_set
    - _chan::CallMethod
    - OnClientStreamCreated*::cntl::set_max_retry
    - OnClientStreamCreated*::stream::reset
    - OnClientStreamCreated*::cntl::set_connection_type
    - std::unique_lock::unlock
    - OnClientStreamCreated*::cntl::set_stream_creator
    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:2206,1
    - Dst: options
      Src: /src/brpc/src/brpc/rtmp.cpp:2208,1
    - Dst: stream_name
      Src: /src/brpc/src/brpc/rtmp.cpp:2209,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2211,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2212,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2213,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2214,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2216
      start: 2204
    functionDepth: 1
    functionLinenumber: 2204
    functionLinenumberEnd: 2216
    functionName: brpc::RtmpClientStream::rtmp_url
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - options
    - std::string
    - butil::StringPiece::size
    - std::string::append
    - butil::StringPiece::data
    - std::string::push_back
    - stream_name
    - std::string::reserve
    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: 2225
      start: 2220
    functionDepth: 0
    functionLinenumber: 2220
    functionLinenumberEnd: 2225
    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:2239,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rtmp.cpp:2240,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2241
      start: 2227
    functionDepth: 1
    functionLinenumber: 2227
    functionLinenumberEnd: 2241
    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:2246,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2247
      start: 2243
    functionDepth: 0
    functionLinenumber: 2243
    functionLinenumberEnd: 2247
    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:2252,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2253,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2254,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2256
      start: 2249
    functionDepth: 0
    functionLinenumber: 2249
    functionLinenumberEnd: 2256
    functionName: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached:
    - load
    - CallOnStop
    - exchange
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::CallOnStopIfNeeded()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/rtmp.cpp:2259,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2267,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2268,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2270,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2272,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2275,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2278,1
    - Dst: bthread_timer_del
      Src: /src/brpc/src/brpc/rtmp.cpp:2282,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2288,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2289
      start: 2258
    functionDepth: 2
    functionLinenumber: 2258
    functionLinenumberEnd: 2289
    functionName: brpc::RtmpRetryingClientStream::Destroy
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - BAIDU_SCOPED_LOCK
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - butil::intrusive_ptr::Destroy
    - swap
    - exchange
    - bthread_timer_del
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2295,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2296,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2300,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2307,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2308,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 2
    argNames:
    - sub_stream_creator
    - ' options'
    argTypes:
    - SubStreamCreator*
    - RtmpRetryingClientStreamOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2309
      start: 2291
    functionDepth: 2
    functionLinenumber: 2291
    functionLinenumberEnd: 2309
    functionName: brpc::RtmpRetryingClientStream::Init
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::gettimeofday_us
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - LOG
    - brpc::RtmpRetryingClientStream::Recreate
    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:2312,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2313
      start: 2311
    functionDepth: 1
    functionLinenumber: 2311
    functionLinenumberEnd: 2313
    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:2316,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2317
      start: 2315
    functionDepth: 0
    functionLinenumber: 2315
    functionLinenumberEnd: 2317
    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:2320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cuepoint
    argTypes:
    - brpc::RtmpCuePoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2321
      start: 2319
    functionDepth: 0
    functionLinenumber: 2319
    functionLinenumberEnd: 2321
    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:2324,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - metadata
    - ' name'
    argTypes:
    - brpc::RtmpMetaData*
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2325
      start: 2323
    functionDepth: 0
    functionLinenumber: 2323
    functionLinenumberEnd: 2325
    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:2328,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpAudioMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2329
      start: 2327
    functionDepth: 0
    functionLinenumber: 2327
    functionLinenumberEnd: 2329
    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:2332,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - brpc::RtmpVideoMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2333
      start: 2331
    functionDepth: 0
    functionLinenumber: 2331
    functionLinenumberEnd: 2333
    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:2336,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - RtmpSharedObjectMessage*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2337
      start: 2335
    functionDepth: 0
    functionLinenumber: 2335
    functionLinenumberEnd: 2337
    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:2340,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2341
      start: 2339
    functionDepth: 1
    functionLinenumber: 2339
    functionLinenumberEnd: 2341
    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: 2344
      start: 2343
    functionDepth: 0
    functionLinenumber: 2343
    functionLinenumberEnd: 2344
    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:2347,1
    - Dst: NewSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: RetryingClientMessageHandler::RetryingClientMessageHandler
      Src: /src/brpc/src/brpc/rtmp.cpp:2348,1
    - Dst: butil::intrusive_ptr::intrusive_ptr
      Src: /src/brpc/src/brpc/rtmp.cpp:2349,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2352,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2358,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2360,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2366,1
    - Dst: butil::intrusive_ptr::Destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2369,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2372,1
    - Dst: LaunchSubStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    - Dst: butil::intrusive_ptr::get
      Src: /src/brpc/src/brpc/rtmp.cpp:2377,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2378
      start: 2346
    functionDepth: 1
    functionLinenumber: 2346
    functionLinenumberEnd: 2378
    functionName: brpc::RtmpRetryingClientStream::Recreate
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 3
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - load
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - LaunchSubStream
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::Destroy
    - RetryingClientMessageHandler::RetryingClientMessageHandler
    - swap
    - NewSubStream
    linkageType: ''
    returnType: void
    signature: void RtmpRetryingClientStream::Recreate()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::intrusive_ptr::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2385
      start: 2380
    functionDepth: 0
    functionLinenumber: 2380
    functionLinenumberEnd: 2385
    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:2391,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2393,1
    - Dst: swap
      Src: /src/brpc/src/brpc/rtmp.cpp:2395,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2399,1
    - Dst: load
      Src: /src/brpc/src/brpc/rtmp.cpp:2400,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2404,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2409,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: RtmpStreamBase*::has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2413,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: RtmpStreamBase*::is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2414,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2415,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2427,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2430,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2436,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: has_data_ever
      Src: /src/brpc/src/brpc/rtmp.cpp:2439,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2440,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2444,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rtmp.cpp:2447,1
    - Dst: butil::intrusive_ptr<RtmpRetryingClientStream>
      Src: /src/brpc/src/brpc/rtmp.cpp:2451,1
    - Dst: bthread_timer_add
      Src: /src/brpc/src/brpc/rtmp.cpp:2452,1
    - Dst: butil::microseconds_from_now
      Src: /src/brpc/src/brpc/rtmp.cpp:2453,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2455,1
    - Dst: brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
      Src: /src/brpc/src/brpc/rtmp.cpp:2456,1
    - Dst: brpc::RtmpRetryingClientStream::Recreate
      Src: /src/brpc/src/brpc/rtmp.cpp:2460,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 41
    argCount: 1
    argNames:
    - sub_stream
    argTypes:
    - RtmpStreamBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2462
      start: 2387
    functionDepth: 3
    functionLinenumber: 2387
    functionLinenumberEnd: 2462
    functionName: brpc::RtmpRetryingClientStream::OnSubStreamStop
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - load
    - has_data_ever
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - brpc::RtmpRetryingClientStream::CallOnStopIfNeeded
    - bthread_timer_add
    - RtmpStreamBase*::has_data_ever
    - brpc::RtmpRetryingClientStream::Recreate
    - LOG
    - butil::microseconds_from_now
    - swap
    - play_name::empty
    - butil::intrusive_ptr<RtmpRetryingClientStream>
    - RtmpStreamBase*::is_server_accepted
    - publish_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:2466,1
    - Dst: is_server_accepted
      Src: /src/brpc/src/brpc/rtmp.cpp:2471,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - butil::intrusive_ptr<RtmpStreamBase>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2483
      start: 2464
    functionDepth: 1
    functionLinenumber: 2464
    functionLinenumberEnd: 2483
    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:2486,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2487,1
    - Dst: butil::intrusive_ptr::SendCuePoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2490,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' obj'
    argTypes:
    - RtmpCuePoint
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2491
      start: 2485
    functionDepth: 2
    functionLinenumber: 2485
    functionLinenumberEnd: 2491
    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:2494,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2495,1
    - Dst: butil::intrusive_ptr::SendMetaData
      Src: /src/brpc/src/brpc/rtmp.cpp:2498,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' obj'
    - ' name'
    argTypes:
    - RtmpMetaData
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2499
      start: 2493
    functionDepth: 2
    functionLinenumber: 2493
    functionLinenumberEnd: 2499
    functionName: brpc::RtmpRetryingClientStream::SendMetaData
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendMetaData
    - 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:2503,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2504,1
    - Dst: butil::intrusive_ptr::SendSharedObjectMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2507,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpSharedObjectMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2508
      start: 2501
    functionDepth: 2
    functionLinenumber: 2501
    functionLinenumberEnd: 2508
    functionName: brpc::RtmpRetryingClientStream::SendSharedObjectMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    - butil::intrusive_ptr::SendSharedObjectMessage
    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:2511,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2512,1
    - Dst: butil::intrusive_ptr::SendAudioMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2515,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAudioMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2516
      start: 2510
    functionDepth: 2
    functionLinenumber: 2510
    functionLinenumberEnd: 2516
    functionName: brpc::RtmpRetryingClientStream::SendAudioMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendAudioMessage
    - 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:2519,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2520,1
    - Dst: butil::intrusive_ptr::SendAACMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2523,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAACMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2524
      start: 2518
    functionDepth: 2
    functionLinenumber: 2518
    functionLinenumberEnd: 2524
    functionName: brpc::RtmpRetryingClientStream::SendAACMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendAACMessage
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    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:2527,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2528,1
    - Dst: butil::intrusive_ptr::SendVideoMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2531,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpVideoMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2532
      start: 2526
    functionDepth: 2
    functionLinenumber: 2526
    functionLinenumberEnd: 2532
    functionName: brpc::RtmpRetryingClientStream::SendVideoMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SendVideoMessage
    - 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:2535,1
    - Dst: brpc::RtmpRetryingClientStream::AcquireStreamToSend
      Src: /src/brpc/src/brpc/rtmp.cpp:2536,1
    - Dst: butil::intrusive_ptr::SendAVCMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2539,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - RtmpAVCMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2540
      start: 2534
    functionDepth: 2
    functionLinenumber: 2534
    functionLinenumberEnd: 2540
    functionName: brpc::RtmpRetryingClientStream::SendAVCMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::RtmpRetryingClientStream::AcquireStreamToSend
    - butil::intrusive_ptr::SendAVCMessage
    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:2543,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rtmp.cpp:2545,1
    - Dst: butil::intrusive_ptr::SignalError
      Src: /src/brpc/src/brpc/rtmp.cpp:2549,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2551
      start: 2542
    functionDepth: 1
    functionLinenumber: 2542
    functionLinenumberEnd: 2551
    functionName: brpc::RtmpRetryingClientStream::StopCurrentStream
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::intrusive_ptr::intrusive_ptr
    - butil::intrusive_ptr::SignalError
    - 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: 2553
      start: 2553
    functionDepth: 0
    functionLinenumber: 2553
    functionLinenumberEnd: 2553
    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:2557,1
    - Dst: brpc::RtmpRetryingClientStream::remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2559,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2563
      start: 2555
    functionDepth: 1
    functionLinenumber: 2555
    functionLinenumberEnd: 2563
    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:2567,1
    - Dst: brpc::RtmpRetryingClientStream::local_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2569,1
    - Dst: butil::EndPoint
      Src: /src/brpc/src/brpc/rtmp.cpp:2572,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2573
      start: 2565
    functionDepth: 1
    functionLinenumber: 2565
    functionLinenumberEnd: 2573
    functionName: brpc::RtmpRetryingClientStream::local_side
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::EndPoint
    - BAIDU_SCOPED_LOCK
    - brpc::RtmpRetryingClientStream::local_side
    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: 2578
      start: 2576
    functionDepth: 0
    functionLinenumber: 2576
    functionLinenumberEnd: 2578
    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:2585,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2586
      start: 2580
    functionDepth: 0
    functionLinenumber: 2580
    functionLinenumberEnd: 2586
    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:2589,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2590
      start: 2588
    functionDepth: 0
    functionLinenumber: 2588
    functionLinenumberEnd: 2590
    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:2593,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2594
      start: 2592
    functionDepth: 1
    functionLinenumber: 2592
    functionLinenumberEnd: 2594
    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:2600,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2602,1
    - Dst: stream_name::c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2603,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: 2605
      start: 2596
    functionDepth: 1
    functionLinenumber: 2596
    functionLinenumberEnd: 2605
    functionName: brpc::RtmpServerStream::OnPlay
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_id
    - stream_name::c_str
    - butil::Status*::set_error
    - 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:2608,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2608,1
    - Dst: ShortDebugString
      Src: /src/brpc/src/brpc/rtmp.cpp:2609,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' opt'
    argTypes:
    - RtmpPlay2Options
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2610
      start: 2607
    functionDepth: 1
    functionLinenumber: 2607
    functionLinenumberEnd: 2610
    functionName: brpc::RtmpServerStream::OnPlay2
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - ShortDebugString
    - remote_side
    - LOG
    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:2617,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2618,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,1
    - Dst: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/rtmp.cpp:2619,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: 2620
      start: 2612
    functionDepth: 1
    functionLinenumber: 2612
    functionLinenumberEnd: 2620
    functionName: brpc::RtmpServerStream::OnPublish
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - remote_side
    - stream_id
    - butil::Status*::set_error
    - butil::endpoint2str
    - c_str
    - RtmpPublishType2Str
    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:2623,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2623,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - offset_ms
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2626
      start: 2622
    functionDepth: 1
    functionLinenumber: 2622
    functionLinenumberEnd: 2626
    functionName: brpc::RtmpServerStream::OnSeek
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::OnSeek(double offset_ms)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2629,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - pause
    - offset_ms
    argTypes:
    - bool
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2633
      start: 2628
    functionDepth: 1
    functionLinenumber: 2628
    functionLinenumberEnd: 2633
    functionName: brpc::RtmpServerStream::OnPause
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - remote_side
    - LOG
    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: 2635
      start: 2635
    functionDepth: 0
    functionLinenumber: 2635
    functionLinenumberEnd: 2635
    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:2644,1
    - Dst: size
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2645,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2648,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rtmp.cpp:2656,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/rtmp.cpp:2661,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/rtmp.cpp:2662,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/rtmp.cpp:2663,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2669,1
    - Dst: RtmpInfo::set_code
      Src: /src/brpc/src/brpc/rtmp.cpp:2671,1
    - Dst: RtmpInfo::set_level
      Src: /src/brpc/src/brpc/rtmp.cpp:2673,1
    - Dst: empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2674,1
    - Dst: RtmpInfo::set_description
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/rtmp.cpp:2675,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/rtmp.cpp:2677,1
    - Dst: policy::RtmpUnsentMessage::RtmpUnsentMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2679,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2680,1
    - Dst: brpc::policy::WriteWithoutOvercrowded
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: get
      Src: /src/brpc/src/brpc/rtmp.cpp:2686,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2687,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2688,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2689,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rtmp.cpp:2692,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2693,1
    - Dst: RtmpInfo::code
      Src: /src/brpc/src/brpc/rtmp.cpp:2694,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 35
    argCount: 1
    argNames:
    - ' error_desc'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2696
      start: 2637
    functionDepth: 1
    functionLinenumber: 2637
    functionLinenumberEnd: 2696
    functionName: brpc::RtmpServerStream::SendStopMessage
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - RtmpInfo::code
    - WriteAMFNull
    - empty
    - butil::IOBuf::size
    - WriteAMFUint32
    - LOG_IF
    - SetFailed
    - remote_side
    - WriteAMFString
    - policy::RtmpUnsentMessage::RtmpUnsentMessage
    - data
    - as_string
    - get
    - size
    - WriteAMFObject
    - RtmpInfo::set_code
    - brpc::policy::WriteWithoutOvercrowded
    - PLOG_IF
    - butil::IOBuf::IOBuf
    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:2703,1
    - Dst: brpc::policy::WriteBigEndian4Bytes
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/rtmp.cpp:2704,1
    - Dst: SendControlMessage
      Src: /src/brpc/src/brpc/rtmp.cpp:2705,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2706
      start: 2700
    functionDepth: 1
    functionLinenumber: 2700
    functionLinenumberEnd: 2706
    functionName: brpc::RtmpServerStream::SendStreamDry
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - stream_id
    - SendControlMessage
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::policy::WriteBigEndian4Bytes
    linkageType: ''
    returnType: int
    signature: int RtmpServerStream::SendStreamDry()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rtmp.cpp:2711,1
    - Dst: butil::intrusive_ptr::OnStopInternal
      Src: /src/brpc/src/brpc/rtmp.cpp:2712,1
    - Dst: bthread_id_unlock_and_destroy
      Src: /src/brpc/src/brpc/rtmp.cpp:2713,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - id
    - data
    argTypes:
    - bthread_id_t
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2715
      start: 2708
    functionDepth: 6
    functionLinenumber: 2708
    functionLinenumberEnd: 2715
    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:2719,1
    - Dst: static_cast<policy::RtmpContext*>
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/rtmp.cpp:2722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: remote_side
      Src: /src/brpc/src/brpc/rtmp.cpp:2724,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2726,1
    - Dst: policy::RtmpContext*::RemoveMessageStream
      Src: /src/brpc/src/brpc/rtmp.cpp:2728,1
    - Dst: CallOnStop
      Src: /src/brpc/src/brpc/rtmp.cpp:2729,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2731
      start: 2717
    functionDepth: 1
    functionLinenumber: 2717
    functionLinenumberEnd: 2731
    functionName: brpc::RtmpServerStream::OnStopInternal
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - policy::RtmpContext*::RemoveMessageStream
    - remote_side
    - parsing_context
    - CallOnStop
    - LOG
    - static_cast<policy::RtmpContext*>
    linkageType: ''
    returnType: void
    signature: void RtmpServerStream::OnStopInternal()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2734,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: 2733
    functionDepth: 0
    functionLinenumber: 2733
    functionLinenumberEnd: 2742
    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:2745,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2751,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2752,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' url_in'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 2754
      start: 2744
    functionDepth: 0
    functionLinenumber: 2744
    functionLinenumberEnd: 2754
    functionName: brpc::RemoveProtocolPrefix
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::size
    - find
    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:2759,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2769,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2772,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: 2775
      start: 2756
    functionDepth: 0
    functionLinenumber: 2756
    functionLinenumberEnd: 2775
    functionName: brpc::ParseRtmpHostAndPort
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - substr
    - find
    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:2779,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2782,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2787,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2789,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: 2791
      start: 2777
    functionDepth: 1
    functionLinenumber: 2777
    functionLinenumberEnd: 2791
    functionName: brpc::RemoveQueryStrings
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece*::clear
    - substr
    - find
    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:2797,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2803,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2809,1
    - Dst: substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2812,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2813,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/rtmp.cpp:2815,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/rtmp.cpp:2816,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2817,1
    - Dst: butil::StringPiece*::find_last_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2819,1
    - Dst: butil::StringPiece*::remove_suffix
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2821,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2826,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: 2828
      start: 2794
    functionDepth: 1
    functionLinenumber: 2794
    functionLinenumberEnd: 2828
    functionName: brpc::SplitVHostFromApp
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 1
    functionsReached:
    - butil::StringPiece*::clear
    - substr
    - find
    - butil::StringSplitter::field
    - butil::StringSplitter::length
    - butil::StringPiece::starts_with
    - butil::StringPiece::data
    - butil::StringPiece::size
    - butil::StringPiece::substr
    - butil::StringPiece*::find_last_of
    - butil::StringPiece*::remove_suffix
    - 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:2837,1
    - Dst: brpc::RemoveRtmpPrefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2839,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2840,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2843,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/rtmp.cpp:2846,1
    - Dst: brpc::ParseRtmpHostAndPort
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2851,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2854,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2856,1
    - Dst: butil::StringPiece::find_first_of
      Src: /src/brpc/src/brpc/rtmp.cpp:2857,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2859,1
    - Dst: brpc::SplitVHostFromApp
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/rtmp.cpp:2861,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2864,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/rtmp.cpp:2866,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: 2869
      start: 2830
    functionDepth: 2
    functionLinenumber: 2830
    functionLinenumberEnd: 2869
    functionName: brpc::ParseRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece*::clear
    - butil::StringPiece::remove_prefix
    - brpc::ParseRtmpHostAndPort
    - butil::StringPiece::find_first_of
    - butil::StringPiece::size
    - butil::StringPiece::substr
    - brpc::SplitVHostFromApp
    - brpc::RemoveRtmpPrefix
    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:2876,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2876,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2877,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2878,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2879,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2880,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2881,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2883,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2884,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2885,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2887,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/rtmp.cpp:2888,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2889,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/rtmp.cpp:2891,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: data
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/rtmp.cpp:2892,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: 2895
      start: 2871
    functionDepth: 2
    functionLinenumber: 2871
    functionLinenumberEnd: 2895
    functionName: brpc::MakeRtmpURL
    functionSourceFile: /src/brpc/src/brpc/rtmp.cpp
    functionUses: 0
    functionsReached:
    - std::string::append
    - brpc::size
    - brpc::empty
    - std::string::push_back
    - data
    - std::string::reserve
    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
    - memset
    - LOG
    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
    - snprintf
    - pthread_once
    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
    - memset
    - LOG
    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
    - snprintf
    - pthread_once
    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:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma_transport.h:45,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: brpc::RdmaTransport::GetRdmaEp
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: rdma::RdmaEndpoint
    signature: rdma::RdmaEndpoint * GetRdmaEp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma_transport.h:45,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: brpc::RdmaTransport::GetRdmaEp
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: rdma::RdmaEndpoint
    signature: rdma::RdmaEndpoint * GetRdmaEp()
  - 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::major_version
    - brpc::HttpHeader::minor_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:
    - c_str
    - brpc::HttpHeader::RemoveHeader
    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::major_version
    - brpc::HttpHeader::minor_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:
    - c_str
    - brpc::HttpHeader::RemoveHeader
    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::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
    - butil::get_object<ArenaRpcPBMessages>
    - GetRequestPrototype
    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:
    - static_cast<ArenaRpcPBMessages*>
    - butil::return_object
    - auto::arena::Reset
    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::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
    - butil::get_object<ArenaRpcPBMessages>
    - GetRequestPrototype
    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:
    - static_cast<ArenaRpcPBMessages*>
    - butil::return_object
    - auto::arena::Reset
    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::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
    - butil::get_object<ArenaRpcPBMessages>
    - GetRequestPrototype
    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:
    - static_cast<ArenaRpcPBMessages*>
    - butil::return_object
    - auto::arena::Reset
    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::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
    - butil::get_object<ArenaRpcPBMessages>
    - GetRequestPrototype
    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:
    - static_cast<ArenaRpcPBMessages*>
    - butil::return_object
    - auto::arena::Reset
    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: 78
    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: 78
    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: 78
    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: 78
    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: 78
    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: 78
    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: 66
    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: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    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: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    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: 272
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 272
    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:277,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: 278
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 278
    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: 78
    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: 78
    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: 78
    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: 78
    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: 78
    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: 78
    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: 66
    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: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 227
    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: 248
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 248
    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: 272
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 272
    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:277,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: 278
      start: 273
    functionDepth: 1
    functionLinenumber: 273
    functionLinenumberEnd: 278
    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: 45
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 45
    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: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*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:58,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:61,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:62,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:63,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:66,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:67,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:68,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*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:75,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:79,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:80,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:81,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/redis_reply.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.cpp:94,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 48
    argCount: 1
    argNames:
    - appender
    argTypes:
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 96
    functionName: brpc::RedisReply::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBufAppender*::append
    - CHECK
    - LOG
    - brpc::RedisReply::SerializeTo
    - butil::IOBufAppender*::append_decimal
    - butil::IOBufAppender*::push_back
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::SerializeTo(butil::IOBufAppender* appender)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: brpc::RedisReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 8
    functionsReached:
    - brpc::RedisReply::ConsumePartialIOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisReply::ConsumePartialIOBuf(butil::IOBuf& buf)
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:104,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:113,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_reply.cpp:125,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:133,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/redis_reply.cpp:134,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:135,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/redis_reply.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:137,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:143,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:148,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:153,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/redis_reply.cpp:156,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:156,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_reply.cpp:166,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:168,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_reply.cpp:173,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:175,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:179,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:194,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:200,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:207,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:208,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:213,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:216,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:217,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:226,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:233,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:249,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:256,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:260,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:262,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:282,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 148
    argCount: 2
    argNames:
    - ' buf'
    - depth
    argTypes:
    - butil::IOBuf
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 286
    functionName: brpc::RedisReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 9
    functionsReached:
    - allocate
    - strtoll
    - fetch1
    - brpc::RedisReply::ConsumePartialIOBuf
    - brpc::RedisReply::size
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - butil::BasicStringPiece::BasicStringPiece
    - butil::IOBuf::copy_to_cstr
    - pop_front
    - RedisReply::RedisReply
    - cutn
    - butil::IOBuf::size
    - cut_until
    - copy_to
    - CHECK_EQ
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisReply::ConsumePartialIOBuf(butil::IOBuf& buf, int depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 291
    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:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' printer'
    argTypes:
    - std::ostream
    - RedisStringPrinter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 301
    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: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: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:320,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:320,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:326,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:327,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:327,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:327,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 329
    functionName: brpc::RedisStringPrinter::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached:
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    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:337,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:339,1
    - Dst: brpc::RedisReply::Print
      Src: /src/brpc/src/brpc/redis_reply.cpp:349,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:364,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:366,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 373
    functionName: brpc::RedisReply::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 1
    functionsReached:
    - RedisStringPrinter
    - brpc::RedisReply::Print
    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:380,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:382,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:386,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:392,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:396,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:413,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:417,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:420,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 375
    functionDepth: 1
    functionLinenumber: 375
    functionLinenumberEnd: 425
    functionName: brpc::RedisReply::CopyFromDifferentArena
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 3
    functionsReached:
    - allocate
    - memcpy
    - LOG
    - RedisReply::RedisReply
    - brpc::RedisReply::CopyFromDifferentArena
    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:429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:433,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:441,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:445,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 449
    functionName: brpc::RedisReply::SetArray
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 2
    functionsReached:
    - RedisReply::RedisReply
    - brpc::RedisReply::Reset
    - allocate
    - LOG
    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:453,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:455,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:457,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:457,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:460,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:462,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:465,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:465,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' str'
    - type
    argTypes:
    - butil::StringPiece
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 451
    functionDepth: 2
    functionLinenumber: 451
    functionLinenumberEnd: 471
    functionName: brpc::RedisReply::SetStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - brpc::RedisReply::Reset
    - allocate
    - memcpy
    - brpc::RedisReply::data
    - brpc::RedisReply::size
    - 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:475,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_reply.cpp:477,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:480,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:483,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_reply.cpp:486,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/redis_reply.cpp:487,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:488,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - fmt
    - args
    - type
    argTypes:
    - char*
    - va_list
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 473
    functionDepth: 3
    functionLinenumber: 473
    functionLinenumberEnd: 490
    functionName: brpc::RedisReply::FormatStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    - va_end
    - LOG
    - va_copy
    - butil::string_vappendf
    - vsnprintf
    - std::string::reserve
    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: 45
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 45
    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: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*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:58,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:61,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:62,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:63,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:66,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:67,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:68,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*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:75,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/redis_reply.cpp:79,1
    - Dst: butil::IOBufAppender*::append_decimal
      Src: /src/brpc/src/brpc/redis_reply.cpp:80,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/redis_reply.cpp:81,1
    - Dst: brpc::RedisReply::SerializeTo
      Src: /src/brpc/src/brpc/redis_reply.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/redis_reply.cpp:94,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 48
    argCount: 1
    argNames:
    - appender
    argTypes:
    - butil::IOBufAppender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 96
    functionName: brpc::RedisReply::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBufAppender*::append
    - CHECK
    - LOG
    - brpc::RedisReply::SerializeTo
    - butil::IOBufAppender*::append_decimal
    - butil::IOBufAppender*::push_back
    linkageType: ''
    returnType: bool
    signature: bool RedisReply::SerializeTo(butil::IOBufAppender* appender)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:99,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 100
    functionName: brpc::RedisReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 10
    functionsReached:
    - brpc::RedisReply::ConsumePartialIOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisReply::ConsumePartialIOBuf(butil::IOBuf& buf)
  - BBCount: 30
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:104,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:113,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/redis_reply.cpp:125,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:133,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/redis_reply.cpp:134,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:135,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/redis_reply.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:137,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:143,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:148,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:153,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/redis_reply.cpp:156,1
    - Dst: butil::IOBuf::copy_to_cstr
      Src: /src/brpc/src/brpc/redis_reply.cpp:156,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/redis_reply.cpp:166,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:168,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_reply.cpp:173,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:175,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:179,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:194,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:200,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:207,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:208,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:213,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:216,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:217,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/redis_reply.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:226,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:233,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:249,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:256,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:260,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/redis_reply.cpp:262,1
    - Dst: brpc::RedisReply::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_reply.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:282,1
    CyclomaticComplexity: 29
    EdgeCount: 29
    ICount: 148
    argCount: 2
    argNames:
    - ' buf'
    - depth
    argTypes:
    - butil::IOBuf
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 286
      start: 102
    functionDepth: 1
    functionLinenumber: 102
    functionLinenumberEnd: 286
    functionName: brpc::RedisReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 11
    functionsReached:
    - allocate
    - strtoll
    - fetch1
    - brpc::RedisReply::ConsumePartialIOBuf
    - brpc::RedisReply::size
    - butil::BaseIteratorRangeToNumberTraits::max
    - LOG
    - butil::BasicStringPiece::BasicStringPiece
    - butil::IOBuf::copy_to_cstr
    - pop_front
    - RedisReply::RedisReply
    - cutn
    - butil::IOBuf::size
    - cut_until
    - copy_to
    - CHECK_EQ
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError RedisReply::ConsumePartialIOBuf(butil::IOBuf& buf, int depth)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 2
    argNames:
    - str
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 291
      start: 290
    functionDepth: 0
    functionLinenumber: 290
    functionLinenumberEnd: 291
    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:299,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' printer'
    argTypes:
    - std::ostream
    - RedisStringPrinter
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 297
    functionDepth: 0
    functionLinenumber: 297
    functionLinenumberEnd: 301
    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: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: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:316,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:320,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:320,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:326,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/redis_reply.cpp:327,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_reply.cpp:327,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_reply.cpp:327,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 303
    functionDepth: 1
    functionLinenumber: 303
    functionLinenumberEnd: 329
    functionName: brpc::RedisStringPrinter::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 0
    functionsReached:
    - data
    - size
    - butil::BasicStringPiece::BasicStringPiece
    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:337,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:339,1
    - Dst: brpc::RedisReply::Print
      Src: /src/brpc/src/brpc/redis_reply.cpp:349,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:364,1
    - Dst: RedisStringPrinter
      Src: /src/brpc/src/brpc/redis_reply.cpp:366,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 373
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 373
    functionName: brpc::RedisReply::Print
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 2
    functionsReached:
    - RedisStringPrinter
    - brpc::RedisReply::Print
    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:380,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:382,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:386,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:392,1
    - Dst: brpc::RedisReply::CopyFromDifferentArena
      Src: /src/brpc/src/brpc/redis_reply.cpp:396,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:413,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:417,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:420,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - RedisReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 425
      start: 375
    functionDepth: 1
    functionLinenumber: 375
    functionLinenumberEnd: 425
    functionName: brpc::RedisReply::CopyFromDifferentArena
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 4
    functionsReached:
    - allocate
    - memcpy
    - LOG
    - RedisReply::RedisReply
    - brpc::RedisReply::CopyFromDifferentArena
    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:429,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:433,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:439,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:441,1
    - Dst: RedisReply::RedisReply
      Src: /src/brpc/src/brpc/redis_reply.cpp:445,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 427
    functionDepth: 1
    functionLinenumber: 427
    functionLinenumberEnd: 449
    functionName: brpc::RedisReply::SetArray
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 2
    functionsReached:
    - RedisReply::RedisReply
    - brpc::RedisReply::Reset
    - allocate
    - LOG
    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:453,1
    - Dst: brpc::RedisReply::size
      Src: /src/brpc/src/brpc/redis_reply.cpp:455,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:457,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:457,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/redis_reply.cpp:460,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:462,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/redis_reply.cpp:465,1
    - Dst: brpc::RedisReply::data
      Src: /src/brpc/src/brpc/redis_reply.cpp:465,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' str'
    - type
    argTypes:
    - butil::StringPiece
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 451
    functionDepth: 2
    functionLinenumber: 451
    functionLinenumberEnd: 471
    functionName: brpc::RedisReply::SetStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 7
    functionsReached:
    - brpc::RedisReply::Reset
    - allocate
    - memcpy
    - brpc::RedisReply::data
    - brpc::RedisReply::size
    - 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:475,1
    - Dst: vsnprintf
      Src: /src/brpc/src/brpc/redis_reply.cpp:477,1
    - Dst: va_end
      Src: /src/brpc/src/brpc/redis_reply.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_reply.cpp:480,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:483,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/redis_reply.cpp:486,1
    - Dst: butil::string_vappendf
      Src: /src/brpc/src/brpc/redis_reply.cpp:487,1
    - Dst: brpc::RedisReply::SetStringImpl
      Src: /src/brpc/src/brpc/redis_reply.cpp:488,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 3
    argNames:
    - fmt
    - args
    - type
    argTypes:
    - char*
    - va_list
    - RedisReplyType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 473
    functionDepth: 3
    functionLinenumber: 473
    functionLinenumberEnd: 490
    functionName: brpc::RedisReply::FormatStringImpl
    functionSourceFile: /src/brpc/src/brpc/redis_reply.cpp
    functionUses: 6
    functionsReached:
    - brpc::RedisReply::SetStringImpl
    - va_end
    - LOG
    - va_copy
    - butil::string_vappendf
    - vsnprintf
    - std::string::reserve
    linkageType: ''
    returnType: void
    signature: void RedisReply::FormatStringImpl(const char* fmt, va_list args, RedisReplyType
      type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma_transport.cpp:34,1
    - Dst: rdma::RdmaEndpoint::RdmaEndpoint
      Src: /src/brpc/src/brpc/rdma_transport.cpp:36,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:39,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma_transport.cpp:40,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma_transport.cpp:41,1
    - Dst: static_cast<SocketUser*>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:57,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rdma_transport.cpp:57,1
    - Dst: std::make_shared<TcpTransport>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:63,1
    - Dst: brpc::RdmaTransport::Init
      Src: /src/brpc/src/brpc/rdma_transport.cpp:64,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 2
    argNames:
    - socket
    - options
    argTypes:
    - Socket*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 65
    functionName: brpc::RdmaTransport::Init
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 1
    functionsReached:
    - Socket*::SetFailed
    - PLOG
    - berror
    - std::make_shared<TcpTransport>
    - get_client_side_messenger
    - CHECK
    - brpc::RdmaTransport::Init
    - rdma::RdmaEndpoint::RdmaEndpoint
    - static_cast<SocketUser*>
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::Init(Socket *socket, const SocketOptions &options)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 73
    functionName: brpc::RdmaTransport::Release
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::Release()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::Reset
      Src: /src/brpc/src/brpc/rdma_transport.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 81
    functionName: brpc::RdmaTransport::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 1
    functionsReached:
    - brpc::RdmaTransport::Reset
    linkageType: ''
    returnType: int
    signature: int RdmaTransport::Reset(int32_t expected_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<rdma::RdmaConnect>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 88
    functionName: brpc::RdmaTransport::Connect
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<rdma::RdmaConnect>
    linkageType: ''
    returnType: std::shared_ptr<AppConnect>
    signature: std::shared_ptr<AppConnect> RdmaTransport::Connect()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/rdma_transport.cpp:98,1
    - Dst: brpc::RdmaTransport::CutFromIOBuf
      Src: /src/brpc/src/brpc/rdma_transport.cpp:100,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 90
    functionDepth: 1
    functionLinenumber: 90
    functionLinenumberEnd: 102
    functionName: brpc::RdmaTransport::CutFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 1
    functionsReached:
    - brpc::RdmaTransport::CutFromIOBufList
    - brpc::RdmaTransport::CutFromIOBuf
    linkageType: ''
    returnType: int
    signature: int RdmaTransport::CutFromIOBuf(butil::IOBuf *buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/rdma_transport.cpp:106,1
    - Dst: brpc::RdmaTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/rdma_transport.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 109
    functionName: brpc::RdmaTransport::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::RdmaTransport::CutFromIOBufList
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaTransport::CutFromIOBufList(butil::IOBuf **buf, size_t
      ndata)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/rdma_transport.cpp:114,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma_transport.cpp:115,1
    - Dst: IsWritable
      Src: /src/brpc/src/brpc/rdma_transport.cpp:116,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma_transport.cpp:118,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:121,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma_transport.cpp:122,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma_transport.cpp:124,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma_transport.cpp:125,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rdma_transport.cpp:127,1
    - Dst: brpc::RdmaTransport::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma_transport.cpp:137,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - _epollout_butex
    - pollin
    - duetime
    argTypes:
    - butil::atomic<int>*
    - bool
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 111
    functionDepth: 4
    functionLinenumber: 111
    functionLinenumberEnd: 140
    functionName: brpc::RdmaTransport::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 1
    functionsReached:
    - SetFailed
    - PLOG
    - bthread::butex_wait
    - berror
    - Failed
    - butil::atomic<int>*::load
    - IsWritable
    - CHECK
    - brpc::RdmaTransport::WaitEpollOut
    - description
    linkageType: ''
    returnType: int
    signature: "int RdmaTransport::WaitEpollOut(butil::atomic<int> *_epollout_butex,\n
      \                                   bool pollin, const timespec duetime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/rdma_transport.cpp:145,1
    - Dst: EventDispatcherUnsched
      Src: /src/brpc/src/brpc/rdma_transport.cpp:146,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/rdma_transport.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:149,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/rdma_transport.cpp:150,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma_transport.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:153,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/rdma_transport.cpp:154,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 142
    functionDepth: 4
    functionLinenumber: 142
    functionLinenumberEnd: 156
    functionName: brpc::RdmaTransport::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - LOG
    - OnEdge
    - EventDispatcherUnsched
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::ProcessEvent(bthread_attr_t attr)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/rdma_transport.cpp:163,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/rdma_transport.cpp:169,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/rdma_transport.cpp:180,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:181,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma_transport.cpp:182,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma_transport.cpp:184,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/rdma_transport.cpp:188,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - ' input_msg'
    - num_bthread_created
    - last_msg
    argTypes:
    - InputMessageClosure
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 158
    functionDepth: 4
    functionLinenumber: 158
    functionLinenumberEnd: 190
    functionName: brpc::RdmaTransport::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - release
    - keytable_pool
    - bthread_attr_set_name
    - bthread_self_tag
    - ProcessInputMessage
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void RdmaTransport::QueueMessage(InputMessageClosure& input_msg,\n
      \                                int* num_bthread_created, bool last_msg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DebugInfo
      Src: /src/brpc/src/brpc/rdma_transport.cpp:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 196
    functionName: brpc::RdmaTransport::Debug
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - DebugInfo
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::Debug(std::ostream &os)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::OptionsAvailableOverRdma
      Src: /src/brpc/src/brpc/rdma_transport.cpp:200,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:200,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/rdma_transport.cpp:203,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:204,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:204,1
    - Dst: brpc::RdmaTransport::OptionsAvailableForRdma
      Src: /src/brpc/src/brpc/rdma_transport.cpp:208,1
    - Dst: static_cast<const ChannelOptions *>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:208,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/rdma_transport.cpp:211,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:212,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:212,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - serverOrNot
    - _options
    argTypes:
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 198
    functionDepth: 2
    functionLinenumber: 198
    functionLinenumberEnd: 219
    functionName: brpc::RdmaTransport::ContextInitOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::RdmaTransport::OptionsAvailableForRdma
    - brpc::rdma::InitPollingModeWithTag
    - static_cast<const ChannelOptions *>
    - brpc::RdmaTransport::OptionsAvailableOverRdma
    - bthread_self_tag
    - brpc::rdma::GlobalRdmaInitializeOrDie
    - static_cast<const ServerOptions *>
    linkageType: ''
    returnType: int
    signature: int RdmaTransport::ContextInitOrDie(bool serverOrNot, const void* _options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/rdma_transport.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:223,1
    - Dst: brpc::rdma::SupportedByRdma
      Src: /src/brpc/src/brpc/rdma_transport.cpp:226,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/rdma_transport.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:227,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/rdma_transport.cpp:227,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 232
    functionName: brpc::RdmaTransport::OptionsAvailableForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 1
    functionsReached:
    - ChannelOptions*::has_ssl_options
    - ChannelOptions*::protocol::name
    - LOG
    - brpc::rdma::SupportedByRdma
    linkageType: ''
    returnType: bool
    signature: bool RdmaTransport::OptionsAvailableForRdma(const ChannelOptions* opt)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:236,1
    - Dst: ServerOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/rdma_transport.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:248,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 252
    functionName: brpc::RdmaTransport::OptionsAvailableOverRdma
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 1
    functionsReached:
    - ServerOptions*::has_ssl_options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RdmaTransport::OptionsAvailableOverRdma(const ServerOptions* opt)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma_transport.cpp:34,1
    - Dst: rdma::RdmaEndpoint::RdmaEndpoint
      Src: /src/brpc/src/brpc/rdma_transport.cpp:36,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:39,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/rdma_transport.cpp:40,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma_transport.cpp:41,1
    - Dst: static_cast<SocketUser*>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:57,1
    - Dst: get_client_side_messenger
      Src: /src/brpc/src/brpc/rdma_transport.cpp:57,1
    - Dst: std::make_shared<TcpTransport>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:63,1
    - Dst: brpc::RdmaTransport::Init
      Src: /src/brpc/src/brpc/rdma_transport.cpp:64,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 2
    argNames:
    - socket
    - options
    argTypes:
    - Socket*
    - SocketOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 65
    functionName: brpc::RdmaTransport::Init
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - Socket*::SetFailed
    - PLOG
    - berror
    - std::make_shared<TcpTransport>
    - get_client_side_messenger
    - CHECK
    - brpc::RdmaTransport::Init
    - rdma::RdmaEndpoint::RdmaEndpoint
    - static_cast<SocketUser*>
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::Init(Socket *socket, const SocketOptions &options)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 73
    functionName: brpc::RdmaTransport::Release
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::Release()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::Reset
      Src: /src/brpc/src/brpc/rdma_transport.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - expected_nref
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 75
    functionDepth: 0
    functionLinenumber: 75
    functionLinenumberEnd: 81
    functionName: brpc::RdmaTransport::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::RdmaTransport::Reset
    linkageType: ''
    returnType: int
    signature: int RdmaTransport::Reset(int32_t expected_nref)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<rdma::RdmaConnect>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 88
    functionName: brpc::RdmaTransport::Connect
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - std::make_shared<rdma::RdmaConnect>
    linkageType: ''
    returnType: std::shared_ptr<AppConnect>
    signature: std::shared_ptr<AppConnect> RdmaTransport::Connect()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/rdma_transport.cpp:98,1
    - Dst: brpc::RdmaTransport::CutFromIOBuf
      Src: /src/brpc/src/brpc/rdma_transport.cpp:100,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 90
    functionDepth: 2
    functionLinenumber: 90
    functionLinenumberEnd: 102
    functionName: brpc::RdmaTransport::CutFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::RdmaTransport::CutFromIOBufList
    - brpc::RdmaTransport::CutFromIOBuf
    linkageType: ''
    returnType: int
    signature: int RdmaTransport::CutFromIOBuf(butil::IOBuf *buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/rdma_transport.cpp:106,1
    - Dst: brpc::RdmaTransport::CutFromIOBufList
      Src: /src/brpc/src/brpc/rdma_transport.cpp:108,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - buf
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 104
    functionDepth: 1
    functionLinenumber: 104
    functionLinenumberEnd: 109
    functionName: brpc::RdmaTransport::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 4
    functionsReached:
    - brpc::RdmaTransport::CutFromIOBufList
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t RdmaTransport::CutFromIOBufList(butil::IOBuf **buf, size_t
      ndata)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/rdma_transport.cpp:114,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma_transport.cpp:115,1
    - Dst: IsWritable
      Src: /src/brpc/src/brpc/rdma_transport.cpp:116,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma_transport.cpp:118,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:121,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma_transport.cpp:122,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma_transport.cpp:124,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma_transport.cpp:125,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/rdma_transport.cpp:127,1
    - Dst: brpc::RdmaTransport::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma_transport.cpp:137,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - _epollout_butex
    - pollin
    - duetime
    argTypes:
    - butil::atomic<int>*
    - bool
    - timespec
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 140
      start: 111
    functionDepth: 4
    functionLinenumber: 111
    functionLinenumberEnd: 140
    functionName: brpc::RdmaTransport::WaitEpollOut
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - SetFailed
    - PLOG
    - bthread::butex_wait
    - berror
    - Failed
    - butil::atomic<int>*::load
    - IsWritable
    - CHECK
    - brpc::RdmaTransport::WaitEpollOut
    - description
    linkageType: ''
    returnType: int
    signature: "int RdmaTransport::WaitEpollOut(butil::atomic<int> *_epollout_butex,\n
      \                                   bool pollin, const timespec duetime)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/rdma_transport.cpp:145,1
    - Dst: EventDispatcherUnsched
      Src: /src/brpc/src/brpc/rdma_transport.cpp:146,1
    - Dst: bthread_start_urgent
      Src: /src/brpc/src/brpc/rdma_transport.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:149,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/rdma_transport.cpp:150,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma_transport.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:153,1
    - Dst: OnEdge
      Src: /src/brpc/src/brpc/rdma_transport.cpp:154,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - attr
    argTypes:
    - bthread_attr_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 142
    functionDepth: 4
    functionLinenumber: 142
    functionLinenumberEnd: 156
    functionName: brpc::RdmaTransport::ProcessEvent
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - bthread_start_background
    - LOG
    - OnEdge
    - EventDispatcherUnsched
    - bthread_start_urgent
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::ProcessEvent(bthread_attr_t attr)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/rdma_transport.cpp:163,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/rdma_transport.cpp:169,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/rdma_transport.cpp:180,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:181,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma_transport.cpp:182,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma_transport.cpp:184,1
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/rdma_transport.cpp:188,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - ' input_msg'
    - num_bthread_created
    - last_msg
    argTypes:
    - InputMessageClosure
    - int*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 158
    functionDepth: 4
    functionLinenumber: 158
    functionLinenumberEnd: 190
    functionName: brpc::RdmaTransport::QueueMessage
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - release
    - keytable_pool
    - bthread_attr_set_name
    - bthread_self_tag
    - ProcessInputMessage
    - bthread_start_background
    linkageType: ''
    returnType: void
    signature: "void RdmaTransport::QueueMessage(InputMessageClosure& input_msg,\n
      \                                int* num_bthread_created, bool last_msg)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DebugInfo
      Src: /src/brpc/src/brpc/rdma_transport.cpp:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 4
    argCount: 1
    argNames:
    - os
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 196
    functionName: brpc::RdmaTransport::Debug
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 0
    functionsReached:
    - DebugInfo
    linkageType: ''
    returnType: void
    signature: void RdmaTransport::Debug(std::ostream &os)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RdmaTransport::OptionsAvailableOverRdma
      Src: /src/brpc/src/brpc/rdma_transport.cpp:200,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:200,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/rdma_transport.cpp:203,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:204,1
    - Dst: static_cast<const ServerOptions *>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:204,1
    - Dst: brpc::RdmaTransport::OptionsAvailableForRdma
      Src: /src/brpc/src/brpc/rdma_transport.cpp:208,1
    - Dst: static_cast<const ChannelOptions *>
      Src: /src/brpc/src/brpc/rdma_transport.cpp:208,1
    - Dst: brpc::rdma::GlobalRdmaInitializeOrDie
      Src: /src/brpc/src/brpc/rdma_transport.cpp:211,1
    - Dst: brpc::rdma::InitPollingModeWithTag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:212,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma_transport.cpp:212,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 2
    argNames:
    - serverOrNot
    - _options
    argTypes:
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 219
      start: 198
    functionDepth: 2
    functionLinenumber: 198
    functionLinenumberEnd: 219
    functionName: brpc::RdmaTransport::ContextInitOrDie
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - brpc::RdmaTransport::OptionsAvailableForRdma
    - brpc::rdma::InitPollingModeWithTag
    - static_cast<const ChannelOptions *>
    - brpc::RdmaTransport::OptionsAvailableOverRdma
    - bthread_self_tag
    - brpc::rdma::GlobalRdmaInitializeOrDie
    - static_cast<const ServerOptions *>
    linkageType: ''
    returnType: int
    signature: int RdmaTransport::ContextInitOrDie(bool serverOrNot, const void* _options)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ChannelOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/rdma_transport.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:223,1
    - Dst: brpc::rdma::SupportedByRdma
      Src: /src/brpc/src/brpc/rdma_transport.cpp:226,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/rdma_transport.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:227,1
    - Dst: ChannelOptions*::protocol::name
      Src: /src/brpc/src/brpc/rdma_transport.cpp:227,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 232
      start: 221
    functionDepth: 1
    functionLinenumber: 221
    functionLinenumberEnd: 232
    functionName: brpc::RdmaTransport::OptionsAvailableForRdma
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - ChannelOptions*::has_ssl_options
    - ChannelOptions*::protocol::name
    - LOG
    - brpc::rdma::SupportedByRdma
    linkageType: ''
    returnType: bool
    signature: bool RdmaTransport::OptionsAvailableForRdma(const ChannelOptions* opt)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:236,1
    - Dst: ServerOptions*::has_ssl_options
      Src: /src/brpc/src/brpc/rdma_transport.cpp:239,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma_transport.cpp:248,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - opt
    argTypes:
    - ServerOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 252
      start: 234
    functionDepth: 1
    functionLinenumber: 234
    functionLinenumberEnd: 252
    functionName: brpc::RdmaTransport::OptionsAvailableOverRdma
    functionSourceFile: /src/brpc/src/brpc/rdma_transport.cpp
    functionUses: 2
    functionsReached:
    - ServerOptions*::has_ssl_options
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool RdmaTransport::OptionsAvailableOverRdma(const ServerOptions* opt)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/load_balancer.cpp:40,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/load_balancer.cpp:40,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/load_balancer.cpp:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - id
    - out
    argTypes:
    - SocketId
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 3
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: brpc::LoadBalancer::IsServerAvailable
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::IsAvailable
    linkageType: ''
    returnType: bool
    signature: bool LoadBalancer::IsServerAvailable(SocketId id, SocketUniquePtr*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SharedLoadBalancer*>
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    - Dst: DescribeOptions
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 1
    functionLinenumber: 47
    functionLinenumberEnd: 49
    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:53,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/load_balancer.cpp:58,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/load_balancer.cpp:61,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.cpp:61,1
    - Dst: expose
      Src: /src/brpc/src/brpc/load_balancer.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 65
    functionName: brpc::SharedLoadBalancer::ExposeLB
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 2
    functionsReached:
    - fetch_add
    - unlock
    - snprintf
    - lock
    - expose
    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: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    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:75,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/load_balancer.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 80
    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:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:86,1
    - Dst: LoadBalancerExtension
      Src: /src/brpc/src/brpc/load_balancer.cpp:89,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/load_balancer.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:91,1
    - Dst: LoadBalancer*::New
      Src: /src/brpc/src/brpc/load_balancer.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:96,1
    - Dst: brpc::SharedLoadBalancer::ExposeLB
      Src: /src/brpc/src/brpc/load_balancer.cpp:100,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - lb_protocol
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 82
    functionDepth: 1
    functionLinenumber: 82
    functionLinenumberEnd: 103
    functionName: brpc::SharedLoadBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 4
    functionsReached:
    - LoadBalancer*::New
    - std::string::c_str
    - LOG
    - LoadBalancerExtension
    - brpc::SharedLoadBalancer::ParseParameters
    - brpc::SharedLoadBalancer::ExposeLB
    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:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 112
    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:117,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/load_balancer.cpp:118,1
    - Dst: empty
      Src: /src/brpc/src/brpc/load_balancer.cpp:119,1
    - Dst: find
      Src: /src/brpc/src/brpc/load_balancer.cpp:123,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:125,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:125,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:127,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:127,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:128,1
    - Dst: substr
      Src: /src/brpc/src/brpc/load_balancer.cpp:129,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: 134
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 134
    functionName: brpc::SharedLoadBalancer::ParseParameters
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 1
    functionsReached:
    - butil::StringPiece*::clear
    - std::string*::append
    - substr
    - find
    - std::string*::clear
    - empty
    - data
    - size
    linkageType: ''
    returnType: bool
    signature: "bool SharedLoadBalancer::ParseParameters(const butil::StringPiece&
      lb_protocol,\n                                         std::string* lb_name,\n
      \                                        butil::StringPiece* lb_params)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/load_balancer.cpp:40,1
    - Dst: SocketUniquePtr::IsAvailable
      Src: /src/brpc/src/brpc/load_balancer.cpp:40,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/load_balancer.cpp:42,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 2
    argNames:
    - id
    - out
    argTypes:
    - SocketId
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 38
    functionDepth: 3
    functionLinenumber: 38
    functionLinenumberEnd: 45
    functionName: brpc::LoadBalancer::IsServerAvailable
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::move
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::IsAvailable
    linkageType: ''
    returnType: bool
    signature: bool LoadBalancer::IsServerAvailable(SocketId id, SocketUniquePtr*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<SharedLoadBalancer*>
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    - Dst: brpc::SharedLoadBalancer::Describe
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    - Dst: DescribeOptions
      Src: /src/brpc/src/brpc/load_balancer.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - arg
    argTypes:
    - std::ostream
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 2
    functionLinenumber: 47
    functionLinenumberEnd: 49
    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:53,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/load_balancer.cpp:58,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/load_balancer.cpp:61,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/load_balancer.cpp:61,1
    - Dst: expose
      Src: /src/brpc/src/brpc/load_balancer.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 65
    functionName: brpc::SharedLoadBalancer::ExposeLB
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 3
    functionsReached:
    - fetch_add
    - unlock
    - snprintf
    - lock
    - expose
    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: 72
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 72
    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:75,1
    - Dst: Destroy
      Src: /src/brpc/src/brpc/load_balancer.cpp:77,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 80
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 80
    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:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:86,1
    - Dst: LoadBalancerExtension
      Src: /src/brpc/src/brpc/load_balancer.cpp:89,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/load_balancer.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:91,1
    - Dst: LoadBalancer*::New
      Src: /src/brpc/src/brpc/load_balancer.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/load_balancer.cpp:96,1
    - Dst: brpc::SharedLoadBalancer::ExposeLB
      Src: /src/brpc/src/brpc/load_balancer.cpp:100,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - lb_protocol
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 82
    functionDepth: 2
    functionLinenumber: 82
    functionLinenumberEnd: 103
    functionName: brpc::SharedLoadBalancer::Init
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 4
    functionsReached:
    - LoadBalancer*::New
    - std::string::c_str
    - LOG
    - LoadBalancerExtension
    - brpc::SharedLoadBalancer::ParseParameters
    - brpc::SharedLoadBalancer::ExposeLB
    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:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 112
    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:117,1
    - Dst: butil::StringPiece*::clear
      Src: /src/brpc/src/brpc/load_balancer.cpp:118,1
    - Dst: empty
      Src: /src/brpc/src/brpc/load_balancer.cpp:119,1
    - Dst: find
      Src: /src/brpc/src/brpc/load_balancer.cpp:123,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:125,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:125,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/load_balancer.cpp:127,1
    - Dst: data
      Src: /src/brpc/src/brpc/load_balancer.cpp:127,1
    - Dst: size
      Src: /src/brpc/src/brpc/load_balancer.cpp:128,1
    - Dst: substr
      Src: /src/brpc/src/brpc/load_balancer.cpp:129,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: 134
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 134
    functionName: brpc::SharedLoadBalancer::ParseParameters
    functionSourceFile: /src/brpc/src/brpc/load_balancer.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece*::clear
    - std::string*::append
    - substr
    - find
    - std::string*::clear
    - empty
    - data
    - size
    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: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    functionName: brpc::ReaderWriterLock::ReaderWriterLock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ReaderWriterLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: wait
      Src: /src/brpc/src/brpc/couchbase.h:64,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:65,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:65,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/couchbase.h:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: brpc::ReaderWriterLock::lock_shared
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - load
    - fetch_add
    - wait
    linkageType: ''
    returnType: void
    signature: void lock_shared()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/couchbase.h:71,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:72,1
    - Dst: notify_one
      Src: /src/brpc/src/brpc/couchbase.h:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: brpc::ReaderWriterLock::unlock_shared
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - fetch_sub
    - notify_one
    - load
    linkageType: ''
    returnType: void
    signature: void unlock_shared()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/couchbase.h:80,1
    - Dst: wait
      Src: /src/brpc/src/brpc/couchbase.h:81,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:82,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:82,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/couchbase.h:84,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.h:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 86
    functionName: brpc::ReaderWriterLock::lock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - load
    - wait
    - store
    - fetch_add
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.h:89,1
    - Dst: notify_one
      Src: /src/brpc/src/brpc/couchbase.h:91,1
    - Dst: notify_all
      Src: /src/brpc/src/brpc/couchbase.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 93
    functionName: brpc::ReaderWriterLock::unlock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - store
    - notify_one
    - notify_all
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock_shared
      Src: /src/brpc/src/brpc/couchbase.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' lock'
    argTypes:
    - ReaderWriterLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::SharedLock::SharedLock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - lock_shared
    linkageType: ''
    returnType: void
    signature: void SharedLock(ReaderWriterLock& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlock_shared
      Src: /src/brpc/src/brpc/couchbase.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: ~SharedLock()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - unlock_shared
    linkageType: ''
    returnType: void
    signature: void ~SharedLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/couchbase.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' lock'
    argTypes:
    - ReaderWriterLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: brpc::UniqueLock::UniqueLock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - lock
    linkageType: ''
    returnType: void
    signature: void UniqueLock(ReaderWriterLock& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/brpc/couchbase.h:114,1
    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: ~UniqueLock()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~UniqueLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: brpc::CouchbaseManifestManager::CouchbaseManifestManager
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseManifestManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: ~CouchbaseManifestManager()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseManifestManager()
  - 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::CouchbaseOperations::isPipelineActive
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool isPipelineActive() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.h:205,1
    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::CouchbaseOperations::getPipelineSize
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t getPipelineSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 209
    functionName: brpc::CouchbaseOperations::CouchbaseOperations
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: ~CouchbaseOperations()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseOperations()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - local_cache_reference
    argTypes:
    - "std::unordered_map<std::string /*bucket*/,\n                      CouchbaseManifestManager::CollectionManifest>*"
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 267
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 4
    functionsReached:
    - sharedCtor
    linkageType: ''
    returnType: void
    signature: "void CouchbaseRequest(\n        std::unordered_map<std::string /*bucket*/,\n
      \                     CouchbaseManifestManager::CollectionManifest>*\n            local_cache_reference)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 4
    functionsReached:
    - sharedCtor
    linkageType: ''
    returnType: void
    signature: void CouchbaseRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedDtor
      Src: /src/brpc/src/brpc/couchbase.h:272,1
    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: ~CouchbaseRequest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - sharedDtor
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:276,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 278
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 4
    functionsReached:
    - sharedCtor
    - MergeFrom
    linkageType: ''
    returnType: void
    signature: void CouchbaseRequest(const CouchbaseRequest& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 285
    functionName: '& operator=(const CouchbaseRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    linkageType: ''
    returnType: CouchbaseRequest
    signature: CouchbaseRequest & operator=(const CouchbaseRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 352
    functionDepth: 0
    functionLinenumber: 352
    functionLinenumberEnd: 352
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::pipelinedCount
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int pipelinedCount() 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: '& rawBuffer()'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & rawBuffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 357
    functionName: '& rawBuffer() const'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & rawBuffer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 384
    functionName: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 2
    functionsReached:
    - sharedCtor
    linkageType: ''
    returnType: void
    signature: void CouchbaseResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedDtor
      Src: /src/brpc/src/brpc/couchbase.h:385,1
    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: ~CouchbaseResponse()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - sharedDtor
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:389,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 391
    functionName: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 2
    functionsReached:
    - sharedCtor
    - MergeFrom
    linkageType: ''
    returnType: void
    signature: void CouchbaseResponse(const CouchbaseResponse& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 397
    functionName: '& operator=(const CouchbaseResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    linkageType: ''
    returnType: CouchbaseResponse
    signature: CouchbaseResponse & operator=(const CouchbaseResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 465
    functionName: '& rawBuffer()'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & rawBuffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 477
    functionName: '& lastError() const'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & lastError() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 60
      start: 59
    functionDepth: 0
    functionLinenumber: 59
    functionLinenumberEnd: 60
    functionName: brpc::ReaderWriterLock::ReaderWriterLock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ReaderWriterLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: wait
      Src: /src/brpc/src/brpc/couchbase.h:64,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:65,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:65,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/couchbase.h:67,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    functionName: brpc::ReaderWriterLock::lock_shared
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - load
    - fetch_add
    - wait
    linkageType: ''
    returnType: void
    signature: void lock_shared()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/couchbase.h:71,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:72,1
    - Dst: notify_one
      Src: /src/brpc/src/brpc/couchbase.h:74,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 76
    functionName: brpc::ReaderWriterLock::unlock_shared
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - fetch_sub
    - notify_one
    - load
    linkageType: ''
    returnType: void
    signature: void unlock_shared()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/couchbase.h:80,1
    - Dst: wait
      Src: /src/brpc/src/brpc/couchbase.h:81,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:82,1
    - Dst: load
      Src: /src/brpc/src/brpc/couchbase.h:82,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/couchbase.h:84,1
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.h:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 86
    functionName: brpc::ReaderWriterLock::lock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - load
    - wait
    - store
    - fetch_add
    - fetch_sub
    linkageType: ''
    returnType: void
    signature: void lock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/couchbase.h:89,1
    - Dst: notify_one
      Src: /src/brpc/src/brpc/couchbase.h:91,1
    - Dst: notify_all
      Src: /src/brpc/src/brpc/couchbase.h:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 93
    functionName: brpc::ReaderWriterLock::unlock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - store
    - notify_one
    - notify_all
    linkageType: ''
    returnType: void
    signature: void unlock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock_shared
      Src: /src/brpc/src/brpc/couchbase.h:103,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' lock'
    argTypes:
    - ReaderWriterLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    functionName: brpc::SharedLock::SharedLock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - lock_shared
    linkageType: ''
    returnType: void
    signature: void SharedLock(ReaderWriterLock& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlock_shared
      Src: /src/brpc/src/brpc/couchbase.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: ~SharedLock()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - unlock_shared
    linkageType: ''
    returnType: void
    signature: void ~SharedLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: lock
      Src: /src/brpc/src/brpc/couchbase.h:113,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' lock'
    argTypes:
    - ReaderWriterLock
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 113
    functionDepth: 0
    functionLinenumber: 113
    functionLinenumberEnd: 113
    functionName: brpc::UniqueLock::UniqueLock
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - lock
    linkageType: ''
    returnType: void
    signature: void UniqueLock(ReaderWriterLock& lock)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: unlock
      Src: /src/brpc/src/brpc/couchbase.h:114,1
    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: ~UniqueLock()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - unlock
    linkageType: ''
    returnType: void
    signature: void ~UniqueLock()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 134
      start: 134
    functionDepth: 0
    functionLinenumber: 134
    functionLinenumberEnd: 134
    functionName: brpc::CouchbaseManifestManager::CouchbaseManifestManager
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseManifestManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/couchbase.h:135,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 135
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 135
    functionName: ~CouchbaseManifestManager()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseManifestManager()
  - 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::CouchbaseOperations::isPipelineActive
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool isPipelineActive() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/couchbase.h:205,1
    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::CouchbaseOperations::getPipelineSize
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t getPipelineSize() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 207
    functionDepth: 0
    functionLinenumber: 207
    functionLinenumberEnd: 209
    functionName: brpc::CouchbaseOperations::CouchbaseOperations
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CouchbaseOperations()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 210
    functionName: ~CouchbaseOperations()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseOperations()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:266,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - local_cache_reference
    argTypes:
    - "std::unordered_map<std::string /*bucket*/,\n                      CouchbaseManifestManager::CollectionManifest>*"
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 267
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 4
    functionsReached:
    - sharedCtor
    linkageType: ''
    returnType: void
    signature: "void CouchbaseRequest(\n        std::unordered_map<std::string /*bucket*/,\n
      \                     CouchbaseManifestManager::CollectionManifest>*\n            local_cache_reference)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 4
    functionsReached:
    - sharedCtor
    linkageType: ''
    returnType: void
    signature: void CouchbaseRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedDtor
      Src: /src/brpc/src/brpc/couchbase.h:272,1
    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: ~CouchbaseRequest()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - sharedDtor
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:276,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:277,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 278
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::CouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 4
    functionsReached:
    - sharedCtor
    - MergeFrom
    linkageType: ''
    returnType: void
    signature: void CouchbaseRequest(const CouchbaseRequest& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:282,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 285
      start: 280
    functionDepth: 0
    functionLinenumber: 280
    functionLinenumberEnd: 285
    functionName: '& operator=(const CouchbaseRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    linkageType: ''
    returnType: CouchbaseRequest
    signature: CouchbaseRequest & operator=(const CouchbaseRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 352
      start: 352
    functionDepth: 0
    functionLinenumber: 352
    functionLinenumberEnd: 352
    functionName: brpc::CouchbaseOperations::CouchbaseRequest::pipelinedCount
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int pipelinedCount() 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: '& rawBuffer()'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & rawBuffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 357
    functionName: '& rawBuffer() const'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & rawBuffer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:383,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 382
    functionDepth: 0
    functionLinenumber: 382
    functionLinenumberEnd: 384
    functionName: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 2
    functionsReached:
    - sharedCtor
    linkageType: ''
    returnType: void
    signature: void CouchbaseResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedDtor
      Src: /src/brpc/src/brpc/couchbase.h:385,1
    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: ~CouchbaseResponse()
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - sharedDtor
    linkageType: ''
    returnType: void
    signature: void ~CouchbaseResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: sharedCtor
      Src: /src/brpc/src/brpc/couchbase.h:389,1
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 391
      start: 386
    functionDepth: 0
    functionLinenumber: 386
    functionLinenumberEnd: 391
    functionName: brpc::CouchbaseOperations::CouchbaseResponse::CouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 2
    functionsReached:
    - sharedCtor
    - MergeFrom
    linkageType: ''
    returnType: void
    signature: void CouchbaseResponse(const CouchbaseResponse& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MergeFrom
      Src: /src/brpc/src/brpc/couchbase.h:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - CouchbaseResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 392
    functionDepth: 0
    functionLinenumber: 392
    functionLinenumberEnd: 397
    functionName: '& operator=(const CouchbaseResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached:
    - MergeFrom
    linkageType: ''
    returnType: CouchbaseResponse
    signature: CouchbaseResponse & operator=(const CouchbaseResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 465
      start: 465
    functionDepth: 0
    functionLinenumber: 465
    functionLinenumberEnd: 465
    functionName: '& rawBuffer()'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & rawBuffer()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 477
      start: 477
    functionDepth: 0
    functionLinenumber: 477
    functionLinenumberEnd: 477
    functionName: '& lastError() const'
    functionSourceFile: /src/brpc/src/brpc/couchbase.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: std::string & lastError() const
  - 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>*::clear
    - std::vector<ChecksumHandler>*::push_back
    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:
    - ChecksumHandler*::Compute
    - brpc::FindChecksumHandler
    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:
    - ChecksumHandler*::Verify
    - brpc::FindChecksumHandler
    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>*::clear
    - std::vector<ChecksumHandler>*::push_back
    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:
    - ChecksumHandler*::Compute
    - brpc::FindChecksumHandler
    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:
    - ChecksumHandler*::Verify
    - brpc::FindChecksumHandler
    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
    - UpdateErrorCost
    - fetch_add
    - load
    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:
    - load
    - store
    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:
    - load
    - fetch_add
    - std::min
    - 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:
    - load
    - brpc::CircuitBreaker::MarkAsBroken
    - store
    - fetch_add
    - brpc::CircuitBreaker::OnCallEnd
    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:
    - fetch_add
    - brpc::CircuitBreaker::UpdateIsolationDuration
    - exchange
    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:
    - load
    - std::min
    - store
    - 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
    - UpdateErrorCost
    - fetch_add
    - load
    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:
    - load
    - store
    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:
    - load
    - fetch_add
    - std::min
    - 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:
    - load
    - brpc::CircuitBreaker::MarkAsBroken
    - store
    - fetch_add
    - brpc::CircuitBreaker::OnCallEnd
    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:
    - fetch_add
    - brpc::CircuitBreaker::UpdateIsolationDuration
    - exchange
    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:
    - load
    - std::min
    - store
    - 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: []
    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::EventDispatcherUnsched
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool EventDispatcherUnsched()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:54,1
    - Dst: brpc::Join
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:55,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 6
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::StopAndJoinGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - brpc::Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void StopAndJoinGlobalDispatchers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:61,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:62,1
    - Dst: EventDispatcher::EventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:64,1
    - Dst: set_priority_index
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:70,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:71,1
    - Dst: Start
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:71,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:76,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:76,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 77
    functionName: brpc::InitializeGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - Start
    - bvar::LatencyRecorder::LatencyRecorder
    - set_priority_index
    - EventDispatcher::EventDispatcher
    - CHECK_EQ
    - atexit
    linkageType: ''
    returnType: void
    signature: void InitializeGlobalDispatchers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:80,1
    - Dst: fmix32
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: brpc::GetGlobalEventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 1
    functionsReached:
    - fmix32
    - pthread_once
    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:90,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - IOEventDataOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 100
    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: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    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: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::EventDispatcherUnsched
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool EventDispatcherUnsched()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Stop
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:54,1
    - Dst: brpc::Join
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:55,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 6
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::StopAndJoinGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - brpc::Join
    - Stop
    linkageType: ''
    returnType: void
    signature: void StopAndJoinGlobalDispatchers()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:61,1
    - Dst: bvar::LatencyRecorder::LatencyRecorder
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:62,1
    - Dst: EventDispatcher::EventDispatcher
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:64,1
    - Dst: set_priority_index
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:70,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:71,1
    - Dst: Start
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:71,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:76,1
    - Dst: atexit
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:76,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 77
    functionName: brpc::InitializeGlobalDispatchers
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 0
    functionsReached:
    - Start
    - bvar::LatencyRecorder::LatencyRecorder
    - set_priority_index
    - EventDispatcher::EventDispatcher
    - CHECK_EQ
    - atexit
    linkageType: ''
    returnType: void
    signature: void InitializeGlobalDispatchers()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:80,1
    - Dst: fmix32
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:84,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - fd
    - tag
    argTypes:
    - int
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 86
    functionName: brpc::GetGlobalEventDispatcher
    functionSourceFile: /src/brpc/src/brpc/event_dispatcher.cpp
    functionUses: 1
    functionsReached:
    - fmix32
    - pthread_once
    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:90,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/event_dispatcher.cpp:94,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - IOEventDataOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 100
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 100
    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: 104
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 104
    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:
    - is_service
    - user
    - group
    - starter
    - 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:
    - is_service
    - user
    - group
    - starter
    - 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::TsPacket::Encode
    - brpc::policy::Write1Byte
    - brpc::TsPacket::ByteSize
    - LOG
    - brpc::policy::WriteBigEndian2Bytes
    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:
    - TsPayloadPATProgram
    - brpc::TsPacket::Reset
    - TsPayloadPAT::TsPayloadPAT
    - TsPayloadPAT*::programs::push_back
    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:
    - TsPayloadPMTESInfo::TsPayloadPMTESInfo
    - TsPayloadPMT*::infos::push_back
    - TsPayloadPMT::TsPayloadPMT
    - LOG
    - brpc::TsPacket::Reset
    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:
    - TsPayloadPES::TsPayloadPES
    - brpc::TsPacket::Reset
    - brpc::TsPacket::mutable_adaptation_field
    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:
    - memcpy
    - brpc::policy::Write1Byte
    - brpc::TsAdaptationField::adaptation_field_length
    - LOG
    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:
    - labs
    - CHECK_GE
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::Write1Byte
    - brpc::TsPayloadPES::ByteSize
    - brpc::policy::WriteBigEndian2Bytes
    - LOG
    - brpc::TsPayloadPES::encode_33bits_dts_pts
    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:
    - PsiEncode
    - brpc::policy::WriteBigEndian4Bytes
    - crc32_ts
    - CHECK_GE
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::TsPayloadPSI::ByteSize
    - 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:
    - ByteSize
    - brpc::policy::Write1Byte
    - LOG
    - brpc::policy::WriteBigEndian2Bytes
    - packet
    - Encode
    - size
    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:
    - memcpy
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    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:
    - clear
    - begin
    - end
    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:
    - TsPayloadPMTESInfo*::Encode
    - memcpy
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    - LOG
    - packet
    - TsPayloadPMTESInfo*::ByteSize
    - size
    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:
    - AACObjectType2Profile
    - TsMessage::payload::append
    - RtmpAACMessage::Create
    - brpc::TsWriter::Encode
    - butil::Status::OK
    - FlvAudioCodec2TsStream
    - butil::Status::ok
    - static_cast<int64_t>
    - FlvAudioCodec2Str
    - RtmpAACMessage::data::size
    - Create
    - BuiltinServiceTest::TestStatus
    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:
    - size
    - TsMessage::payload::append
    - sps_list::size
    - brpc::TsWriter::Encode
    - butil::Status::OK
    - FlvVideoCodec2TsStream
    - FlvVideoCodec2Str
    - AVCNaluIterator::nalu_type
    - butil::IOBuf::append
    - butil::Status::ok
    - static_cast<int64_t>
    - RtmpAVCMessage::Create
    - butil::IOBuf::IOBuf
    - pps_list::size
    - Create
    - BuiltinServiceTest::TestStatus
    - arraysize
    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:
    - butil::Status::OK
    - CHECK_LT
    - TsPacket::Encode
    - TsPacket::CreateAsPAT
    - TsPacket::CreateAsPMT
    - memset
    - append
    - BuiltinServiceTest::TestStatus
    - TsPacket::ByteSize
    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:
    - BuiltinServiceTest::TestStatus
    - is_audio
    - butil::Status::ok
    - brpc::TsWriter::EncodePATPMT
    - brpc::TsWriter::EncodePES
    - is_video
    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:
    - TsPacket::CreateAsPESContinue
    - butil::Status::OK
    - TsMessage*::payload::empty
    - is_audio
    - TsPacket::CreateAsPESFirst
    - CHECK_LT
    - std::min
    - LOG
    - TsMessage*::payload::size
    - TsMessage*::payload::cutn
    - TsPacket::Encode
    - memset
    - append
    - TsPacket::AddPadding
    - get
    - BuiltinServiceTest::TestStatus
    - TsPacket::ByteSize
    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::TsPacket::Encode
    - brpc::policy::Write1Byte
    - brpc::TsPacket::ByteSize
    - LOG
    - brpc::policy::WriteBigEndian2Bytes
    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:
    - TsPayloadPATProgram
    - brpc::TsPacket::Reset
    - TsPayloadPAT::TsPayloadPAT
    - TsPayloadPAT*::programs::push_back
    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:
    - TsPayloadPMTESInfo::TsPayloadPMTESInfo
    - TsPayloadPMT*::infos::push_back
    - TsPayloadPMT::TsPayloadPMT
    - LOG
    - brpc::TsPacket::Reset
    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:
    - TsPayloadPES::TsPayloadPES
    - brpc::TsPacket::Reset
    - brpc::TsPacket::mutable_adaptation_field
    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:
    - memcpy
    - brpc::policy::Write1Byte
    - brpc::TsAdaptationField::adaptation_field_length
    - LOG
    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:
    - labs
    - CHECK_GE
    - brpc::policy::WriteBigEndian3Bytes
    - brpc::policy::Write1Byte
    - brpc::TsPayloadPES::ByteSize
    - brpc::policy::WriteBigEndian2Bytes
    - LOG
    - brpc::TsPayloadPES::encode_33bits_dts_pts
    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:
    - PsiEncode
    - brpc::policy::WriteBigEndian4Bytes
    - crc32_ts
    - CHECK_GE
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    - brpc::TsPayloadPSI::ByteSize
    - 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:
    - ByteSize
    - brpc::policy::Write1Byte
    - LOG
    - brpc::policy::WriteBigEndian2Bytes
    - packet
    - Encode
    - size
    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:
    - memcpy
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    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:
    - clear
    - begin
    - end
    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:
    - TsPayloadPMTESInfo*::Encode
    - memcpy
    - brpc::policy::Write1Byte
    - brpc::policy::WriteBigEndian2Bytes
    - LOG
    - packet
    - TsPayloadPMTESInfo*::ByteSize
    - size
    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:
    - AACObjectType2Profile
    - TsMessage::payload::append
    - RtmpAACMessage::Create
    - brpc::TsWriter::Encode
    - butil::Status::OK
    - FlvAudioCodec2TsStream
    - butil::Status::ok
    - static_cast<int64_t>
    - FlvAudioCodec2Str
    - RtmpAACMessage::data::size
    - Create
    - BuiltinServiceTest::TestStatus
    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:
    - size
    - TsMessage::payload::append
    - sps_list::size
    - brpc::TsWriter::Encode
    - butil::Status::OK
    - FlvVideoCodec2TsStream
    - FlvVideoCodec2Str
    - AVCNaluIterator::nalu_type
    - butil::IOBuf::append
    - butil::Status::ok
    - static_cast<int64_t>
    - RtmpAVCMessage::Create
    - butil::IOBuf::IOBuf
    - pps_list::size
    - Create
    - BuiltinServiceTest::TestStatus
    - arraysize
    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:
    - butil::Status::OK
    - CHECK_LT
    - TsPacket::Encode
    - TsPacket::CreateAsPAT
    - TsPacket::CreateAsPMT
    - memset
    - append
    - BuiltinServiceTest::TestStatus
    - TsPacket::ByteSize
    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:
    - BuiltinServiceTest::TestStatus
    - is_audio
    - butil::Status::ok
    - brpc::TsWriter::EncodePATPMT
    - brpc::TsWriter::EncodePES
    - is_video
    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:
    - TsPacket::CreateAsPESContinue
    - butil::Status::OK
    - TsMessage*::payload::empty
    - is_audio
    - TsPacket::CreateAsPESFirst
    - CHECK_LT
    - std::min
    - LOG
    - TsMessage*::payload::size
    - TsMessage*::payload::cutn
    - TsPacket::Encode
    - memset
    - append
    - TsPacket::AddPadding
    - get
    - BuiltinServiceTest::TestStatus
    - TsPacket::ByteSize
    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: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    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: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    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: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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: 159
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 159
    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:173,1
    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: 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: 178
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 178
    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:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 194
    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: 201
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 201
    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: 206
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 206
    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: 208
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 208
    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: 215
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 215
    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: 220
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 220
    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: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    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: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    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: 231
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 231
    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:440,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:443,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket.h:462,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:482,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/socket.h:508,1
    - Dst: brpc::ssl_state
      Src: /src/brpc/src/brpc/socket.h:594,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/socket.h:675,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:676,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:677,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/socket.h:689,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:843,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:848,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:855,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:860,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:863,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:866,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/socket.h:903,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:906,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:909,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:929,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:938,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/socket.h:956,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:960,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:968,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:976,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:986,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:988,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:994,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:1000,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:1002,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 77
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1020
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 1020
    functionName: brpc::VersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    - butil::IOPortal::IOPortal
    - __format__
    - std::max
    - std::atomic_thread_fence
    - std::unique_ptr::unique_ptr
    - brpc::ssl_state
    - butil::EndPoint::EndPoint
    - DISALLOW_COPY_AND_ASSIGN
    - 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: 427
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 427
    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: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    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:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 440
    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:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:443,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 443
    functionName: brpc::fd_version
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fd_version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 446
    functionDepth: 0
    functionLinenumber: 446
    functionLinenumberEnd: 446
    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: 449
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 449
    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: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    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: 454
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 454
    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: 456
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 456
    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:462,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 464
    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: []
    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: 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: 474
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 474
    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: 475
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 475
    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:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 482
    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: 490
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 490
    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: 564
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 564
    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: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    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: 574
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 574
    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: 575
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 575
    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: 577
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 577
    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: 593
      start: 593
    functionDepth: 0
    functionLinenumber: 593
    functionLinenumberEnd: 593
    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:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 594
    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: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    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: 607
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 607
    functionName: brpc::socket_mode
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketMode
    signature: SocketMode socket_mode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 656
    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: 657
      start: 657
    functionDepth: 0
    functionLinenumber: 657
    functionLinenumberEnd: 657
    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: 663
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 663
    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: 667
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 667
    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:675,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:676,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:677,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 678
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 678
    functionName: brpc::last_active_time_us
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    - std::max
    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: 681
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 681
    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: 683
      start: 683
    functionDepth: 0
    functionLinenumber: 683
    functionLinenumberEnd: 683
    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: 685
      start: 685
    functionDepth: 0
    functionLinenumber: 685
    functionLinenumberEnd: 685
    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: 686
      start: 686
    functionDepth: 0
    functionLinenumber: 686
    functionLinenumberEnd: 686
    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: 834
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 834
    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: 82
      start: 82
    functionDepth: 0
    functionLinenumber: 82
    functionLinenumberEnd: 82
    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: 83
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 83
    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: 102
      start: 102
    functionDepth: 0
    functionLinenumber: 102
    functionLinenumberEnd: 102
    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: 121
      start: 121
    functionDepth: 0
    functionLinenumber: 121
    functionLinenumberEnd: 121
    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: 159
      start: 151
    functionDepth: 0
    functionLinenumber: 151
    functionLinenumberEnd: 159
    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:173,1
    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: 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: 178
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 178
    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:193,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 194
    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: 201
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 201
    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: 206
      start: 203
    functionDepth: 0
    functionLinenumber: 203
    functionLinenumberEnd: 206
    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: 208
      start: 208
    functionDepth: 0
    functionLinenumber: 208
    functionLinenumberEnd: 208
    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: 215
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 215
    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: 220
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 220
    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: 222
      start: 222
    functionDepth: 0
    functionLinenumber: 222
    functionLinenumberEnd: 222
    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: 227
      start: 224
    functionDepth: 0
    functionLinenumber: 224
    functionLinenumberEnd: 227
    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: 231
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 231
    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:440,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:443,1
    - Dst: std::atomic_thread_fence
      Src: /src/brpc/src/brpc/socket.h:462,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:482,1
    - Dst: __format__
      Src: /src/brpc/src/brpc/socket.h:508,1
    - Dst: brpc::ssl_state
      Src: /src/brpc/src/brpc/socket.h:594,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/socket.h:675,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:676,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:677,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/socket.h:689,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:843,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:848,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:855,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:860,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:863,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/socket.h:866,1
    - Dst: butil::IOPortal::IOPortal
      Src: /src/brpc/src/brpc/socket.h:903,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:906,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:909,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:929,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:938,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/socket.h:956,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:960,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:968,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:976,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:986,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:988,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:994,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:1000,1
    - Dst: butil::atomic::atomic
      Src: /src/brpc/src/brpc/socket.h:1002,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 77
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1020
      start: 317
    functionDepth: 1
    functionLinenumber: 317
    functionLinenumberEnd: 1020
    functionName: brpc::VersionedRefWithId
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    - butil::IOPortal::IOPortal
    - __format__
    - std::max
    - std::atomic_thread_fence
    - std::unique_ptr::unique_ptr
    - brpc::ssl_state
    - butil::EndPoint::EndPoint
    - DISALLOW_COPY_AND_ASSIGN
    - 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: 427
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 427
    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: 431
      start: 431
    functionDepth: 0
    functionLinenumber: 431
    functionLinenumberEnd: 431
    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:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 440
      start: 440
    functionDepth: 0
    functionLinenumber: 440
    functionLinenumberEnd: 440
    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:
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:443,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 443
    functionName: brpc::fd_version
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t fd_version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 446
    functionDepth: 0
    functionLinenumber: 446
    functionLinenumberEnd: 446
    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: 449
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 449
    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: 452
      start: 452
    functionDepth: 0
    functionLinenumber: 452
    functionLinenumberEnd: 452
    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: 454
      start: 454
    functionDepth: 0
    functionLinenumber: 454
    functionLinenumberEnd: 454
    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: 456
      start: 456
    functionDepth: 0
    functionLinenumber: 456
    functionLinenumberEnd: 456
    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:462,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 459
    functionDepth: 1
    functionLinenumber: 459
    functionLinenumberEnd: 464
    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: []
    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: 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: 474
      start: 474
    functionDepth: 0
    functionLinenumber: 474
    functionLinenumberEnd: 474
    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: 475
      start: 475
    functionDepth: 0
    functionLinenumber: 475
    functionLinenumberEnd: 475
    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:482,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 481
    functionDepth: 0
    functionLinenumber: 481
    functionLinenumberEnd: 482
    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: 490
      start: 490
    functionDepth: 0
    functionLinenumber: 490
    functionLinenumberEnd: 490
    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: 564
      start: 563
    functionDepth: 0
    functionLinenumber: 563
    functionLinenumberEnd: 564
    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: 565
      start: 565
    functionDepth: 0
    functionLinenumber: 565
    functionLinenumberEnd: 565
    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: 574
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 574
    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: 575
      start: 575
    functionDepth: 0
    functionLinenumber: 575
    functionLinenumberEnd: 575
    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: 577
      start: 577
    functionDepth: 0
    functionLinenumber: 577
    functionLinenumberEnd: 577
    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: 593
      start: 593
    functionDepth: 0
    functionLinenumber: 593
    functionLinenumberEnd: 593
    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:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 594
    functionDepth: 1
    functionLinenumber: 594
    functionLinenumberEnd: 594
    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: 601
      start: 601
    functionDepth: 0
    functionLinenumber: 601
    functionLinenumberEnd: 601
    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: 607
      start: 607
    functionDepth: 0
    functionLinenumber: 607
    functionLinenumberEnd: 607
    functionName: brpc::socket_mode
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: SocketMode
    signature: SocketMode socket_mode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 656
    functionDepth: 0
    functionLinenumber: 656
    functionLinenumberEnd: 656
    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: 657
      start: 657
    functionDepth: 0
    functionLinenumber: 657
    functionLinenumberEnd: 657
    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: 663
      start: 662
    functionDepth: 0
    functionLinenumber: 662
    functionLinenumberEnd: 663
    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: 667
      start: 666
    functionDepth: 0
    functionLinenumber: 666
    functionLinenumberEnd: 667
    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:675,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:676,1
    - Dst: load
      Src: /src/brpc/src/brpc/socket.h:677,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 678
      start: 674
    functionDepth: 0
    functionLinenumber: 674
    functionLinenumberEnd: 678
    functionName: brpc::last_active_time_us
    functionSourceFile: /src/brpc/src/brpc/socket.h
    functionUses: 0
    functionsReached:
    - load
    - std::max
    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: 681
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 681
    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: 683
      start: 683
    functionDepth: 0
    functionLinenumber: 683
    functionLinenumberEnd: 683
    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: 685
      start: 685
    functionDepth: 0
    functionLinenumber: 685
    functionLinenumberEnd: 685
    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: 686
      start: 686
    functionDepth: 0
    functionLinenumber: 686
    functionLinenumberEnd: 686
    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: 834
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 834
    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: 1043
      start: 1028
    functionDepth: 0
    functionLinenumber: 1028
    functionLinenumberEnd: 1043
    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: 1061
      start: 1046
    functionDepth: 0
    functionLinenumber: 1046
    functionLinenumberEnd: 1061
    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:
    - brpc::RpcDumpContext::SaveFlags
    - bvar::read_command_name
    - butil::gettimeofday_us
    - butil::DeleteFile
    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::RpcDumpContext
    - RpcDumpContext*::Dump
    - brpc::SampledRequest::destroy
    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::find
    - butil::FilePath
    - CHECK
    - std::string::replace
    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:
    - butil::gettimeofday_us
    - LOG
    - pop_front
    - empty
    - cut_into_file_descriptor
    - butil::CreateDirectoryAndGetError
    - butil::DeleteFile
    - PLOG
    - brpc::RpcDumpContext::Serialize
    - brpc::RpcDumpContext::SaveFlags
    - strftime
    - open
    - c_str
    - size
    - front
    - butil::FilePath
    - clear
    - push_back
    - localtime
    - value
    - butil::string_printf
    - close
    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:
    - reserve
    - SampledRequest*::request::size
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - unsafe_assign
    - LOG
    - append
    - CHECK_EQ
    - size
    - SampledRequest*::meta::SerializeToZeroCopyStream
    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:
    - std::string
    - size
    - 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::FilePath::value
    - PLOG
    - brpc::SampleIterator::Next
    - butil::FilePath::empty
    - clear
    - butil::FileEnumerator::FileEnumerator
    - empty
    - open
    - bvar::FileDumper::close
    - append_from_file_descriptor
    - 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:
    - std::unique_ptr::release
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - LOG
    - length
    - ParsePbFromIOBuf
    - pop_front
    - SampledRequest::SampledRequest
    - cutn
    - butil::IOBuf::IOBuf
    - fetch
    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:
    - brpc::RpcDumpContext::SaveFlags
    - bvar::read_command_name
    - butil::gettimeofday_us
    - butil::DeleteFile
    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::RpcDumpContext
    - RpcDumpContext*::Dump
    - brpc::SampledRequest::destroy
    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::find
    - butil::FilePath
    - CHECK
    - std::string::replace
    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:
    - butil::gettimeofday_us
    - LOG
    - pop_front
    - empty
    - cut_into_file_descriptor
    - butil::CreateDirectoryAndGetError
    - butil::DeleteFile
    - PLOG
    - brpc::RpcDumpContext::Serialize
    - brpc::RpcDumpContext::SaveFlags
    - strftime
    - open
    - c_str
    - size
    - front
    - butil::FilePath
    - clear
    - push_back
    - localtime
    - value
    - butil::string_printf
    - close
    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:
    - reserve
    - SampledRequest*::request::size
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - unsafe_assign
    - LOG
    - append
    - CHECK_EQ
    - size
    - SampledRequest*::meta::SerializeToZeroCopyStream
    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:
    - std::string
    - size
    - 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::FilePath::value
    - PLOG
    - brpc::SampleIterator::Next
    - butil::FilePath::empty
    - clear
    - butil::FileEnumerator::FileEnumerator
    - empty
    - open
    - bvar::FileDumper::close
    - append_from_file_descriptor
    - 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:
    - std::unique_ptr::release
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - LOG
    - length
    - ParsePbFromIOBuf
    - pop_front
    - SampledRequest::SampledRequest
    - cutn
    - butil::IOBuf::IOBuf
    - fetch
    linkageType: ''
    returnType: SampledRequest
    signature: SampledRequest * SampleIterator::Pop(butil::IOBuf& buf, bool* format_error)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm_transport.h:42,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::UBShmTransport::GetUBShmEp
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: ubring::UBShmEndpoint
    signature: ubring::UBShmEndpoint * GetUBShmEp()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm_transport.h:42,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::UBShmTransport::GetUBShmEp
    functionSourceFile: /src/brpc/src/brpc/ubshm_transport.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: ubring::UBShmEndpoint
    signature: ubring::UBShmEndpoint * GetUBShmEp()
  - 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: 12
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:85,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:86,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:94,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:95,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:96,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:97,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:100,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:102,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:102,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:103,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/input_messenger.cpp:111,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:122,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:122,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:125,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:134,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:135,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:137,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:144,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:145,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:146,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:147,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:150,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:152,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:152,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:153,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:162,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:163,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:167,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 51
    argCount: 3
    argNames:
    - m
    - index
    - read_eof
    argTypes:
    - Socket*
    - size_t*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 168
    functionName: brpc::InputMessenger::CutInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - load
    - Socket*::set_preferred_index
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - Socket*::CreatedByConnect
    - Socket*::preferred_index
    - Socket*::parsing_context
    - parse
    - LOG_IF
    - Socket*::reset_parsing_context
    - ParseResult::error
    - ParseResult::is_ok
    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:171,1
    - Dst: InputMessageBase*::_process
      Src: /src/brpc/src/brpc/input_messenger.cpp:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 174
    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:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - last_msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 1
    functionLinenumber: 177
    functionLinenumberEnd: 179
    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: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 186
    functionName: InputMessageClosure::~InputMessageClosure() noexcept(false)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessageClosure::~InputMessageClosure() noexcept(false)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:190,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 193
    functionName: brpc::InputMessageClosure::reset
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessageClosure::reset(InputMessageBase* m)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::AddInputBytes
      Src: /src/brpc/src/brpc/input_messenger.cpp:199,1
    - Dst: Socket*::_last_readtime_us::store
      Src: /src/brpc/src/brpc/input_messenger.cpp:202,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:204,1
    - Dst: brpc::InputMessenger::CutInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:208,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:209,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:210,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:214,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:217,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/input_messenger.cpp:219,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:220,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:224,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:224,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:225,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:226,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:226,1
    - Dst: Socket*::AddInputMessages
      Src: /src/brpc/src/brpc/input_messenger.cpp:231,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:233,1
    - Dst: Socket*::_read_buf::return_cached_blocks
      Src: /src/brpc/src/brpc/input_messenger.cpp:239,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:252,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:255,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:256,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:260,1
    - Dst: Socket*::_transport::QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:263,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/input_messenger.cpp:266,1
    - Dst: Socket*::PostponeEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:267,1
    - Dst: Socket*::FightAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:273,1
    - Dst: verify
      Src: /src/brpc/src/brpc/input_messenger.cpp:275,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/input_messenger.cpp:275,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:276,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:278,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:279,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:280,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:281,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:285,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/input_messenger.cpp:290,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:292,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:292,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:294,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:294,1
    - Dst: Socket*::_transport::QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:295,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:296,1
    - Dst: Socket*::_transport::QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:305,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:308,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 75
    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: 311
      start: 195
    functionDepth: 2
    functionLinenumber: 195
    functionLinenumberEnd: 311
    functionName: brpc::InputMessenger::ProcessNewMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::is_read_progressive
    - DestroyingPtr::get
    - Socket*::SetAuthentication
    - LOG
    - bthread_flush
    - Socket*::_last_readtime_us::store
    - LOG_IF
    - Socket*::_transport::QueueMessage
    - DestroyingPtr::release
    - Socket*::AddInputBytes
    - ParseResult::message
    - Socket*::PostponeEOF
    - ParseResult::error
    - Socket*::SetFailed
    - verify
    - brpc::InputMessenger::CutInputMessage
    - Socket*::_read_buf::return_cached_blocks
    - Socket*::FightAuthentication
    - reset
    - Socket*::description
    - Socket*::ReAddress
    - Socket*::AddInputMessages
    - ParseResult::is_ok
    - Socket*::_read_buf::length
    - ParseResult::error_str
    - butil::ToPrintable::ToPrintable
    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:324,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/input_messenger.cpp:324,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:333,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:334,1
    - Dst: Socket*::DoRead
      Src: /src/brpc/src/brpc/input_messenger.cpp:345,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:351,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:358,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:359,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:360,1
    - Dst: berror
      Src: /src/brpc/src/brpc/input_messenger.cpp:360,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/input_messenger.cpp:362,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:369,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:376,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 34
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 313
    functionDepth: 1
    functionLinenumber: 313
    functionLinenumberEnd: 378
    functionName: brpc::InputMessenger::OnNewMessages
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - butil::gettimeofday_us
    - PLOG
    - berror
    - Socket*::description
    - InputMessenger*::ProcessNewMessage
    - butil::cpuwide_time_us
    - Socket*::MoreReadEvents
    - Socket*::SetEOF
    - static_cast<InputMessenger*>
    - Socket*::user
    - Socket*::DoRead
    - LOG_IF
    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: 385
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 385
    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:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 392
    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:397,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:400,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:402,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:404,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:407,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:411,1
    - Dst: FindProtocolOfHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:414,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:416,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:421,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:429,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:430,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:433,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:434,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 437
    functionName: brpc::InputMessenger::AddHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - store
    - CHECK
    - LOG
    - memset
    - FindProtocolOfHandler
    - 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:442,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:445,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:447,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:449,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:452,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:456,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:459,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:461,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 463
    functionName: brpc::InputMessenger::AddNonProtocolHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - store
    - CHECK
    - LOG
    - memset
    - 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:474,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:483,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: 484
      start: 465
    functionDepth: 6
    functionLinenumber: 465
    functionLinenumberEnd: 484
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<SocketKeepaliveOptions>
      Src: /src/brpc/src/brpc/input_messenger.cpp:493,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:511,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 2
    argNames:
    - options
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 486
    functionDepth: 6
    functionLinenumber: 486
    functionLinenumberEnd: 512
    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(SocketOptions options, SocketId* id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 522
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    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:525,1
    - Dst: brpc::InputMessenger::FindProtocolIndex
      Src: /src/brpc/src/brpc/input_messenger.cpp:529,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 524
    functionDepth: 1
    functionLinenumber: 524
    functionLinenumberEnd: 531
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - brpc::InputMessenger::FindProtocolIndex
    - FindProtocol
    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: 538
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 538
    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:542,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:543,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:549,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 540
    functionDepth: 2
    functionLinenumber: 540
    functionLinenumberEnd: 554
    functionName: brpc::FindProtocolOfHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListProtocols
    - strcmp
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType FindProtocolOfHandler(const InputMessageHandler& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:559,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:560,1
    - Dst: DestroyImpl
      Src: /src/brpc/src/brpc/input_messenger.cpp:562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 564
    functionName: brpc::InputMessageBase::Destroy
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - CheckEOF
    - DestroyImpl
    - reset
    linkageType: ''
    returnType: void
    signature: void InputMessageBase::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:567,1
    - Dst: Socket*::CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:569,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 572
    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: 574
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 574
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:85,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:86,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:94,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:95,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:96,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:97,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:100,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:102,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:102,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:103,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/input_messenger.cpp:111,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:122,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:122,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:125,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:134,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:135,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:137,1
    - Dst: parse
      Src: /src/brpc/src/brpc/input_messenger.cpp:144,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:145,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:146,1
    - Dst: Socket*::set_preferred_index
      Src: /src/brpc/src/brpc/input_messenger.cpp:147,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:150,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:152,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:152,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/input_messenger.cpp:153,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:162,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/input_messenger.cpp:163,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/input_messenger.cpp:167,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 51
    argCount: 3
    argNames:
    - m
    - index
    - read_eof
    argTypes:
    - Socket*
    - size_t*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 168
    functionName: brpc::InputMessenger::CutInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - load
    - Socket*::set_preferred_index
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - Socket*::CreatedByConnect
    - Socket*::preferred_index
    - Socket*::parsing_context
    - parse
    - LOG_IF
    - Socket*::reset_parsing_context
    - ParseResult::error
    - ParseResult::is_ok
    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:171,1
    - Dst: InputMessageBase*::_process
      Src: /src/brpc/src/brpc/input_messenger.cpp:172,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 174
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 174
    functionName: brpc::ProcessInputMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    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:178,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - last_msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    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: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:184,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 186
      start: 182
    functionDepth: 0
    functionLinenumber: 182
    functionLinenumberEnd: 186
    functionName: InputMessageClosure::~InputMessageClosure() noexcept(false)
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessageClosure::~InputMessageClosure() noexcept(false)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ProcessInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:190,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - m
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 188
    functionDepth: 0
    functionLinenumber: 188
    functionLinenumberEnd: 193
    functionName: brpc::InputMessageClosure::reset
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - ProcessInputMessage
    linkageType: ''
    returnType: void
    signature: void InputMessageClosure::reset(InputMessageBase* m)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::AddInputBytes
      Src: /src/brpc/src/brpc/input_messenger.cpp:199,1
    - Dst: Socket*::_last_readtime_us::store
      Src: /src/brpc/src/brpc/input_messenger.cpp:202,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:204,1
    - Dst: brpc::InputMessenger::CutInputMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:208,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/input_messenger.cpp:209,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:210,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:214,1
    - Dst: ParseResult::error
      Src: /src/brpc/src/brpc/input_messenger.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:217,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/input_messenger.cpp:219,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:220,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:224,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:224,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:225,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:226,1
    - Dst: ParseResult::error_str
      Src: /src/brpc/src/brpc/input_messenger.cpp:226,1
    - Dst: Socket*::AddInputMessages
      Src: /src/brpc/src/brpc/input_messenger.cpp:231,1
    - Dst: Socket*::_read_buf::length
      Src: /src/brpc/src/brpc/input_messenger.cpp:233,1
    - Dst: Socket*::_read_buf::return_cached_blocks
      Src: /src/brpc/src/brpc/input_messenger.cpp:239,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:252,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:255,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:256,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/input_messenger.cpp:260,1
    - Dst: Socket*::_transport::QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:263,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/input_messenger.cpp:266,1
    - Dst: Socket*::PostponeEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:267,1
    - Dst: Socket*::FightAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:273,1
    - Dst: verify
      Src: /src/brpc/src/brpc/input_messenger.cpp:275,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/input_messenger.cpp:275,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:276,1
    - Dst: Socket*::SetAuthentication
      Src: /src/brpc/src/brpc/input_messenger.cpp:278,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:279,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:280,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:281,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:285,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/input_messenger.cpp:290,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:292,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:292,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:294,1
    - Dst: DestroyingPtr::release
      Src: /src/brpc/src/brpc/input_messenger.cpp:294,1
    - Dst: Socket*::_transport::QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:295,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:296,1
    - Dst: Socket*::_transport::QueueMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:305,1
    - Dst: bthread_flush
      Src: /src/brpc/src/brpc/input_messenger.cpp:308,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 75
    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: 311
      start: 195
    functionDepth: 2
    functionLinenumber: 195
    functionLinenumberEnd: 311
    functionName: brpc::InputMessenger::ProcessNewMessage
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::is_read_progressive
    - DestroyingPtr::get
    - Socket*::SetAuthentication
    - LOG
    - bthread_flush
    - Socket*::_last_readtime_us::store
    - LOG_IF
    - Socket*::_transport::QueueMessage
    - DestroyingPtr::release
    - Socket*::AddInputBytes
    - ParseResult::message
    - Socket*::PostponeEOF
    - ParseResult::error
    - Socket*::SetFailed
    - verify
    - brpc::InputMessenger::CutInputMessage
    - Socket*::_read_buf::return_cached_blocks
    - Socket*::FightAuthentication
    - reset
    - Socket*::description
    - Socket*::ReAddress
    - Socket*::AddInputMessages
    - ParseResult::is_ok
    - Socket*::_read_buf::length
    - ParseResult::error_str
    - butil::ToPrintable::ToPrintable
    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:324,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/input_messenger.cpp:324,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:333,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/input_messenger.cpp:334,1
    - Dst: Socket*::DoRead
      Src: /src/brpc/src/brpc/input_messenger.cpp:345,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/input_messenger.cpp:351,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:358,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/input_messenger.cpp:359,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/input_messenger.cpp:360,1
    - Dst: berror
      Src: /src/brpc/src/brpc/input_messenger.cpp:360,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/input_messenger.cpp:362,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/input_messenger.cpp:369,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:376,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 34
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 313
    functionDepth: 1
    functionLinenumber: 313
    functionLinenumberEnd: 378
    functionName: brpc::InputMessenger::OnNewMessages
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - butil::gettimeofday_us
    - PLOG
    - berror
    - Socket*::description
    - InputMessenger*::ProcessNewMessage
    - butil::cpuwide_time_us
    - Socket*::MoreReadEvents
    - Socket*::SetEOF
    - static_cast<InputMessenger*>
    - Socket*::user
    - Socket*::DoRead
    - LOG_IF
    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: 385
      start: 380
    functionDepth: 0
    functionLinenumber: 380
    functionLinenumberEnd: 385
    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:390,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 387
    functionDepth: 0
    functionLinenumber: 387
    functionLinenumberEnd: 392
    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:397,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:400,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:402,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:404,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:407,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:411,1
    - Dst: FindProtocolOfHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:414,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:416,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:421,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:429,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:430,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:433,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:434,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 39
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 437
    functionName: brpc::InputMessenger::AddHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 1
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - store
    - CHECK
    - LOG
    - memset
    - FindProtocolOfHandler
    - 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:442,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/input_messenger.cpp:445,1
    - Dst: InputMessageHandler::InputMessageHandler
      Src: /src/brpc/src/brpc/input_messenger.cpp:447,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/input_messenger.cpp:449,1
    - Dst: memset
      Src: /src/brpc/src/brpc/input_messenger.cpp:452,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/input_messenger.cpp:456,1
    - Dst: load
      Src: /src/brpc/src/brpc/input_messenger.cpp:459,1
    - Dst: store
      Src: /src/brpc/src/brpc/input_messenger.cpp:461,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 1
    argNames:
    - ' handler'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 463
    functionName: brpc::InputMessenger::AddNonProtocolHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - store
    - CHECK
    - LOG
    - memset
    - 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:474,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:483,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: 484
      start: 465
    functionDepth: 6
    functionLinenumber: 465
    functionLinenumberEnd: 484
    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: 7
    BranchProfiles: []
    Callsites:
    - Dst: std::make_shared<SocketKeepaliveOptions>
      Src: /src/brpc/src/brpc/input_messenger.cpp:493,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/input_messenger.cpp:511,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 2
    argNames:
    - options
    - id
    argTypes:
    - SocketOptions
    - SocketId*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 512
      start: 486
    functionDepth: 6
    functionLinenumber: 486
    functionLinenumberEnd: 512
    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(SocketOptions options, SocketId* id)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 7
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 514
    functionDepth: 0
    functionLinenumber: 514
    functionLinenumberEnd: 522
    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:525,1
    - Dst: brpc::InputMessenger::FindProtocolIndex
      Src: /src/brpc/src/brpc/input_messenger.cpp:529,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - type
    argTypes:
    - ProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 524
    functionDepth: 1
    functionLinenumber: 524
    functionLinenumberEnd: 531
    functionName: brpc::InputMessenger::FindProtocolIndex
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 2
    functionsReached:
    - brpc::InputMessenger::FindProtocolIndex
    - FindProtocol
    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: 538
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 538
    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:542,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/input_messenger.cpp:543,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/input_messenger.cpp:549,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 8
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - InputMessageHandler
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 554
      start: 540
    functionDepth: 2
    functionLinenumber: 540
    functionLinenumberEnd: 554
    functionName: brpc::FindProtocolOfHandler
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - std::vector::size
    - brpc::ListProtocols
    - strcmp
    linkageType: ''
    returnType: ProtocolType
    signature: ProtocolType FindProtocolOfHandler(const InputMessageHandler& h)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:559,1
    - Dst: reset
      Src: /src/brpc/src/brpc/input_messenger.cpp:560,1
    - Dst: DestroyImpl
      Src: /src/brpc/src/brpc/input_messenger.cpp:562,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 556
    functionDepth: 1
    functionLinenumber: 556
    functionLinenumberEnd: 564
    functionName: brpc::InputMessageBase::Destroy
    functionSourceFile: /src/brpc/src/brpc/input_messenger.cpp
    functionUses: 0
    functionsReached:
    - CheckEOF
    - DestroyImpl
    - reset
    linkageType: ''
    returnType: void
    signature: void InputMessageBase::Destroy()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: release
      Src: /src/brpc/src/brpc/input_messenger.cpp:567,1
    - Dst: Socket*::CheckEOF
      Src: /src/brpc/src/brpc/input_messenger.cpp:569,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 566
    functionDepth: 0
    functionLinenumber: 566
    functionLinenumberEnd: 572
    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: 574
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 574
    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: 47
    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>
    - brpc::policy::ReadThriftStruct
    - dynamic_cast<details::ThriftMessageHolder<T>*>
    - LOG
    - empty
    - butil::class_name<T>
    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:
    - brpc::ThriftStub::CallMethod
    - Controller*::_thrift_method_name::assign
    - details::ThriftDoneWrapper<RESPONSE>::ThriftDoneWrapper<RESPONSE>
    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: 47
    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>
    - brpc::policy::ReadThriftStruct
    - dynamic_cast<details::ThriftMessageHolder<T>*>
    - LOG
    - empty
    - butil::class_name<T>
    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:
    - brpc::ThriftStub::CallMethod
    - Controller*::_thrift_method_name::assign
    - details::ThriftDoneWrapper<RESPONSE>::ThriftDoneWrapper<RESPONSE>
    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:
    - static_cast<uint32_t>
    - ByteSizeLong
    - ByteSize
    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:
    - static_cast<uint32_t>
    - ByteSizeLong
    - ByteSize
    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::cpuwide_time_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:
    - std::unique_lock::unlock
    - butil::cpuwide_time_ms
    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:
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::IsAvailable
    - size
    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::cpuwide_time_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:
    - brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
    - butil::fast_rand_less_than
    - butil::cpuwide_time_ms
    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:
    - begin
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - std::shared_ptr<ClusterRecoverPolicy>*::reset
    - LOG
    - butil::KeyValuePairsSplitter::key
    - DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
    - butil::StringToInt64
    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::cpuwide_time_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:
    - std::unique_lock::unlock
    - butil::cpuwide_time_ms
    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:
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::IsAvailable
    - size
    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::cpuwide_time_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:
    - brpc::DefaultClusterRecoverPolicy::GetUsableServerCount
    - butil::fast_rand_less_than
    - butil::cpuwide_time_ms
    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:
    - begin
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - std::shared_ptr<ClusterRecoverPolicy>*::reset
    - LOG
    - butil::KeyValuePairsSplitter::key
    - DefaultClusterRecoverPolicy::DefaultClusterRecoverPolicy
    - butil::StringToInt64
    linkageType: ''
    returnType: bool
    signature: "bool GetRecoverPolicyByParams(const butil::StringPiece& params,\n
      \                             std::shared_ptr<ClusterRecoverPolicy>* ptr_out)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:78,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 83
    functionName: brpc::Trim
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - substr
    - isspace
    - brpc::size
    linkageType: ''
    returnType: std::string
    signature: std::string Trim(const std::string& in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::getline
      Src: /src/brpc/src/brpc/redis_cluster.cpp:89,1
    - Dst: brpc::Trim
      Src: /src/brpc/src/brpc/redis_cluster.cpp:90,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:91,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' text'
    - delim
    argTypes:
    - std::string
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 85
    functionDepth: 3
    functionLinenumber: 85
    functionLinenumberEnd: 96
    functionName: brpc::SplitByChar
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::getline
    - std::vector::push_back
    - std::string::empty
    - brpc::Trim
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByChar(const std::string& text, char
      delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' text'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: brpc::SplitByWhitespace
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByWhitespace(const std::string& text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:110,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:111,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:113,1
    - Dst: std::string::rfind
      Src: /src/brpc/src/brpc/redis_cluster.cpp:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 122
    functionName: brpc::EndpointHost
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - std::string::rfind
    - std::string::find
    - std::string::empty
    linkageType: ''
    returnType: std::string
    signature: std::string EndpointHost(const std::string& endpoint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/redis_cluster.cpp:125,1
    - Dst: type
      Src: /src/brpc/src/brpc/redis_cluster.cpp:128,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:129,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:130,1
    - Dst: const_cast<RedisReply&>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:133,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' reply'
    - out
    argTypes:
    - RedisReply
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 138
    functionName: brpc::EncodeReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::move_to
    - const_cast<RedisReply&>
    - butil::IOBufAppender::append
    - type
    linkageType: ''
    returnType: bool
    signature: bool EncodeReply(const RedisReply& reply, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:78,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 83
    functionName: brpc::Trim
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - static_cast<unsigned char>
    - substr
    - isspace
    - brpc::size
    linkageType: ''
    returnType: std::string
    signature: std::string Trim(const std::string& in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::getline
      Src: /src/brpc/src/brpc/redis_cluster.cpp:89,1
    - Dst: brpc::Trim
      Src: /src/brpc/src/brpc/redis_cluster.cpp:90,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:91,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' text'
    - delim
    argTypes:
    - std::string
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 85
    functionDepth: 3
    functionLinenumber: 85
    functionLinenumberEnd: 96
    functionName: brpc::SplitByChar
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::getline
    - std::vector::push_back
    - std::string::empty
    - brpc::Trim
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByChar(const std::string& text, char
      delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' text'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: brpc::SplitByWhitespace
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByWhitespace(const std::string& text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:110,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:111,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:113,1
    - Dst: std::string::rfind
      Src: /src/brpc/src/brpc/redis_cluster.cpp:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 122
    functionName: brpc::EndpointHost
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - std::string::rfind
    - std::string::find
    - std::string::empty
    linkageType: ''
    returnType: std::string
    signature: std::string EndpointHost(const std::string& endpoint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/redis_cluster.cpp:125,1
    - Dst: type
      Src: /src/brpc/src/brpc/redis_cluster.cpp:128,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:129,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:130,1
    - Dst: const_cast<RedisReply&>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:133,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' reply'
    - out
    argTypes:
    - RedisReply
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 138
    functionName: brpc::EncodeReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::move_to
    - const_cast<RedisReply&>
    - butil::IOBufAppender::append
    - type
    linkageType: ''
    returnType: bool
    signature: bool EncodeReply(const RedisReply& reply, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannelOptions::RedisClusterChannelOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 155
    functionName: RedisClusterChannel::SingleCommandResult::SingleCommandResult()
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::SingleCommandResult::SingleCommandResult()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/redis_cluster.cpp:169,1
    - Dst: assign
      Src: /src/brpc/src/brpc/redis_cluster.cpp:170,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 173
    functionName: brpc::RedisClusterChannel::RedisClusterChannel
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 80
    functionsReached:
    - std::string
    - Modify
    - assign
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::RedisClusterChannel()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/redis_cluster.cpp:176,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/redis_cluster.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: RedisClusterChannel::~RedisClusterChannel()
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::~RedisClusterChannel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:185,1
    - Dst: SplitByChar
      Src: /src/brpc/src/brpc/redis_cluster.cpp:196,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:198,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:203,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:207,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:209,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:214,1
    - Dst: store
      Src: /src/brpc/src/brpc/redis_cluster.cpp:219,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/redis_cluster.cpp:220,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:225,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 2
    argNames:
    - ' seed_nodes'
    - options
    argTypes:
    - std::string
    - RedisClusterChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 182
    functionDepth: 4
    functionLinenumber: 182
    functionLinenumberEnd: 229
    functionName: brpc::RedisClusterChannel::Init
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 16
    functionsReached:
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - BAIDU_SCOPED_LOCK
    - store
    - SplitByChar
    - LOG
    - brpc::RedisClusterChannel::RefreshTopology
    - empty
    - std::vector::size
    - std::vector::empty
    - bthread_start_background
    linkageType: ''
    returnType: int
    signature: "int RedisClusterChannel::Init(const std::string& seed_nodes,\n                              const
      RedisClusterChannelOptions* options)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:237,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:239,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:241,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:247,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:247,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:248,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:250,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:255,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:255,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:256,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:258,1
    - Dst: static_cast<const RedisRequest*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:263,1
    - Dst: static_cast<RedisResponse*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:264,1
    - Dst: brpc::RedisClusterChannel::CallMethodImpl
      Src: /src/brpc/src/brpc/redis_cluster.cpp:267,1
    - Dst: AsyncCall::AsyncCall
      Src: /src/brpc/src/brpc/redis_cluster.cpp:271,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:273,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:274,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/redis_cluster.cpp:284,1
    - Dst: brpc::RedisClusterChannel::CallMethodImpl
      Src: /src/brpc/src/brpc/redis_cluster.cpp:286,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:287,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 41
    argCount: 4
    argNames:
    - controller_base
    - request_base
    - response_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 231
    functionDepth: 4
    functionLinenumber: 231
    functionLinenumberEnd: 289
    functionName: brpc::RedisClusterChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 66
    functionsReached:
    - AsyncCall::AsyncCall
    - static_cast<Controller*>
    - google::protobuf::Closure*::Run
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::RedisClusterChannel::CallMethodImpl
    - bthread_start_background
    - static_cast<RedisResponse*>
    - LOG
    - static_cast<const RedisRequest*>
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      /*method*/,\n    google::protobuf::RpcController* controller_base,\n    const
      google::protobuf::Message* request_base,\n    google::protobuf::Message* response_base,\n
      \   google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::ParseRequest
      Src: /src/brpc/src/brpc/redis_cluster.cpp:295,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:298,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:299,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:303,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:304,1
    - Dst: brpc::RedisClusterChannel::ExecuteCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:305,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_cluster.cpp:310,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:311,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:312,1
    - Dst: RedisResponse*::Clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:315,1
    - Dst: RedisResponse*::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_cluster.cpp:316,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:316,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:316,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:317,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:318,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - cntl
    - ' request'
    - response
    argTypes:
    - Controller*
    - RedisRequest
    - RedisResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 291
    functionDepth: 1
    functionLinenumber: 291
    functionLinenumberEnd: 322
    functionName: brpc::RedisClusterChannel::CallMethodImpl
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::ParseRequest
    - std::vector::empty
    - brpc::RedisClusterChannel::ExecuteCommand
    - RedisResponse*::ConsumePartialIOBuf
    - static_cast<int>
    - butil::IOBuf::append
    - butil::IOBuf::empty
    - std::vector::size
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - RedisResponse*::Clear
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::CallMethodImpl(Controller* cntl,\n                                         const
      RedisRequest& request,\n                                         RedisResponse*
      response)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ParsedCommand>*::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:327,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_cluster.cpp:329,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/redis_cluster.cpp:330,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:331,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/src/brpc/redis_cluster.cpp:336,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:338,1
    - Dst: RedisCommandParser::Consume
      Src: /src/brpc/src/brpc/redis_cluster.cpp:340,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:342,1
    - Dst: ParsedCommand::args::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:346,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:346,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:347,1
    - Dst: ParsedCommand::args::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:348,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:348,1
    - Dst: std::vector<ParsedCommand>*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:350,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - ' request'
    - commands
    - cntl
    argTypes:
    - RedisRequest
    - std::vector<ParsedCommand>*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 324
    functionDepth: 2
    functionLinenumber: 324
    functionLinenumberEnd: 353
    functionName: brpc::RedisClusterChannel::ParseRequest
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - RedisCommandParser::Consume
    - SerializeTo
    - ParsedCommand::args::push_back
    - butil::Arena::Arena
    - butil::IOBuf::empty
    - ParsedCommand::args::reserve
    - Controller*::SetFailed
    - std::vector::size
    - std::vector<ParsedCommand>*::push_back
    - std::vector<ParsedCommand>*::clear
    - as_string
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ParseRequest(const RedisRequest& request,\n
      \                                      std::vector<ParsedCommand>* commands,\n
      \                                      Controller* cntl) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: args::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:358,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:359,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:365,1
    - Dst: brpc::RedisClusterChannel::ExecuteMGet
      Src: /src/brpc/src/brpc/redis_cluster.cpp:370,1
    - Dst: brpc::RedisClusterChannel::ExecuteMSet
      Src: /src/brpc/src/brpc/redis_cluster.cpp:373,1
    - Dst: brpc::RedisClusterChannel::ExecuteIntegerAggregate
      Src: /src/brpc/src/brpc/redis_cluster.cpp:376,1
    - Dst: brpc::RedisClusterChannel::ExecuteEvalLike
      Src: /src/brpc/src/brpc/redis_cluster.cpp:379,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:383,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:386,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 26
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 355
    functionDepth: 1
    functionLinenumber: 355
    functionLinenumberEnd: 388
    functionName: brpc::RedisClusterChannel::ExecuteCommand
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - brpc::RedisClusterChannel::ExecuteMSet
    - args::empty
    - butil::IOBuf*::swap
    - brpc::RedisClusterChannel::ExecuteMGet
    - brpc::RedisClusterChannel::ExecuteIntegerAggregate
    - brpc::RedisClusterChannel::ExecuteEvalLike
    - Controller*::SetFailed
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteCommand(const ParsedCommand& cmd,\n
      \                                        butil::IOBuf* encoded_reply,\n                                         Controller*
      cntl)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:394,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:395,1
    - Dst: brpc::RedisClusterChannel::IsNoKeyCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:403,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:403,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:404,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:405,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:406,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:407,1
    - Dst: brpc::RedisClusterChannel::PickAnyEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:412,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:413,1
    - Dst: brpc::RedisClusterChannel::PickAnyEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:414,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:415,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/redis_cluster.cpp:423,1
    - Dst: brpc::RedisClusterChannel::SendToEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:426,1
    - Dst: RedirectInfo::endpoint::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:433,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:435,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:441,1
    - Dst: RedirectInfo::endpoint::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:442,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/redis_cluster.cpp:443,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:456,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:461,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 52
    argCount: 4
    argNames:
    - ' args'
    - forced_endpoint
    - result
    - cntl
    argTypes:
    - std::vector<std::string>
    - std::string*
    - SingleCommandResult*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 390
    functionDepth: 1
    functionLinenumber: 390
    functionLinenumberEnd: 463
    functionName: brpc::RedisClusterChannel::ExecuteSingleCommand
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::PickAnyEndpoint
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - std::max
    - brpc::RedisClusterChannel::IsNoKeyCommand
    - Modify
    - static_cast<int>
    - brpc::RedisClusterChannel::RefreshTopology
    - brpc::RedisClusterChannel::PickEndpointForKey
    - empty
    - RedirectInfo::endpoint::empty
    - Controller*::SetFailed
    - brpc::RedisClusterChannel::SendToEndpoint
    - size
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteSingleCommand(const std::vector<std::string>&
      args,\n                                               const std::string* forced_endpoint,\n
      \                                              SingleCommandResult* result,\n
      \                                              Controller* cntl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:468,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:469,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:475,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:475,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:476,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:478,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:479,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:481,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:484,1
    - Dst: brpc::RedisClusterChannel::AppendArrayHeader
      Src: /src/brpc/src/brpc/redis_cluster.cpp:487,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:487,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:488,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:489,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 465
    functionDepth: 2
    functionLinenumber: 465
    functionLinenumberEnd: 492
    functionName: brpc::RedisClusterChannel::ExecuteMGet
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - std::vector::reserve
    - args::size
    - butil::IOBuf*::append
    - std::vector::push_back
    - brpc::RedisClusterChannel::AppendArrayHeader
    - std::vector::size
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteMGet(const ParsedCommand& cmd,\n
      \                                     butil::IOBuf* encoded_reply,\n                                      Controller*
      cntl)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:497,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:497,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:498,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:503,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:505,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:506,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:507,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:510,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:514,1
    - Dst: brpc::RedisClusterChannel::AppendStatusReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:519,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 521
    functionName: brpc::RedisClusterChannel::ExecuteMSet
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - args::size
    - std::vector::push_back
    - butil::IOBuf*::swap
    - brpc::RedisClusterChannel::AppendStatusReply
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteMSet(const ParsedCommand& cmd,\n
      \                                     butil::IOBuf* encoded_reply,\n                                      Controller*
      cntl)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:526,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:527,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:533,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:535,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:536,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:539,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:543,1
    - Dst: brpc::RedisClusterChannel::AppendIntegerReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:549,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 523
    functionDepth: 2
    functionLinenumber: 523
    functionLinenumberEnd: 551
    functionName: brpc::RedisClusterChannel::ExecuteIntegerAggregate
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - args::size
    - std::vector::push_back
    - butil::IOBuf*::swap
    - brpc::RedisClusterChannel::AppendIntegerReply
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteIntegerAggregate(const ParsedCommand&
      cmd,\n                                                  butil::IOBuf* encoded_reply,\n
      \                                                 Controller* cntl)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:556,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:557,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:563,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:564,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:569,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:569,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:570,1
    - Dst: brpc::RedisClusterChannel::HashSlot
      Src: /src/brpc/src/brpc/redis_cluster.cpp:578,1
    - Dst: brpc::RedisClusterChannel::HashSlot
      Src: /src/brpc/src/brpc/redis_cluster.cpp:580,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:581,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:588,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:589,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:590,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:591,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:598,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:604,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 553
    functionDepth: 2
    functionLinenumber: 553
    functionLinenumberEnd: 606
    functionName: brpc::RedisClusterChannel::ExecuteEvalLike
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - args::size
    - butil::IOBuf*::swap
    - static_cast<size_t>
    - brpc::RedisClusterChannel::RefreshTopology
    - brpc::RedisClusterChannel::PickEndpointForKey
    - Controller*::SetFailed
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    - brpc::RedisClusterChannel::HashSlot
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteEvalLike(const ParsedCommand& cmd,\n
      \                                         butil::IOBuf* encoded_reply,\n                                          Controller*
      cntl)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::HashSlot
      Src: /src/brpc/src/brpc/redis_cluster.cpp:611,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:612,1
    - Dst: Read
      Src: /src/brpc/src/brpc/redis_cluster.cpp:616,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:617,1
    - Dst: butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:617,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:621,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 3
    argNames:
    - ' key'
    - endpoint
    - slot
    argTypes:
    - std::string
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 629
    functionName: brpc::RedisClusterChannel::PickEndpointForKey
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
    - static_cast<int>
    - static_cast<size_t>
    - Read
    - empty
    - brpc::RedisClusterChannel::HashSlot
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::PickEndpointForKey(const std::string& key,\n
      \                                            std::string* endpoint,\n                                             int*
      slot) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:632,1
    - Dst: begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:634,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:634,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:638,1
    - Dst: front
      Src: /src/brpc/src/brpc/redis_cluster.cpp:639,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - endpoint
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 643
    functionName: brpc::RedisClusterChannel::PickAnyEndpoint
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - begin
    - front
    - BAIDU_SCOPED_LOCK
    - end
    - empty
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::PickAnyEndpoint(std::string* endpoint) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RedirectInfo*::endpoint::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:655,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:657,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:659,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:659,1
    - Dst: RedisRequest::AddCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:665,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:666,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:670,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:670,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:671,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:672,1
    - Dst: RedisRequest::AddCommandByComponents
      Src: /src/brpc/src/brpc/redis_cluster.cpp:674,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:675,1
    - Dst: brpc::RedisClusterChannel::BuildRedisRequest
      Src: /src/brpc/src/brpc/redis_cluster.cpp:679,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:680,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:687,1
    - Dst: Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:688,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:688,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/redis_cluster.cpp:690,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:691,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:692,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/src/brpc/redis_cluster.cpp:692,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:694,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/redis_cluster.cpp:695,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:700,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:701,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:703,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:708,1
    - Dst: EncodeReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:709,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:710,1
    - Dst: is_error
      Src: /src/brpc/src/brpc/redis_cluster.cpp:715,1
    - Dst: type
      Src: /src/brpc/src/brpc/redis_cluster.cpp:716,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_cluster.cpp:717,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:718,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:718,1
    - Dst: error_message
      Src: /src/brpc/src/brpc/redis_cluster.cpp:720,1
    - Dst: SingleCommandResult*::error_text::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:722,1
    - Dst: brpc::RedisClusterChannel::ParseRedirectReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:725,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 56
    argCount: 6
    argNames:
    - ' endpoint'
    - ' args'
    - asking
    - result
    - redirect
    - cntl
    argTypes:
    - std::string
    - std::vector<std::string>
    - bool
    - SingleCommandResult*
    - RedirectInfo*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 645
    functionDepth: 1
    functionLinenumber: 645
    functionLinenumberEnd: 727
    functionName: brpc::RedisClusterChannel::SendToEndpoint
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::ParseRedirectReply
    - std::vector::size
    - RedirectInfo*::endpoint::clear
    - std::vector::reserve
    - Controller*::timeout_ms
    - RedisRequest::AddCommand
    - Controller::Failed
    - RedisResponse::reply
    - is_integer
    - integer
    - Controller::ErrorCode
    - RedisResponse::reply_size
    - SingleCommandResult*::error_text::clear
    - is_error
    - data
    - c_str
    - Controller::set_timeout_ms
    - size
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - std::vector::push_back
    - error_message
    - brpc::RedisClusterChannel::BuildRedisRequest
    - Channel*::CallMethod
    - EncodeReply
    - RedisRequest::AddCommandByComponents
    - Controller::ErrorText
    - Controller*::SetFailed
    - type
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::SendToEndpoint(const std::string& endpoint,\n
      \                                        const std::vector<std::string>& args,\n
      \                                        bool asking,\n                                         SingleCommandResult*
      result,\n                                         RedirectInfo* redirect,\n
      \                                        Controller* cntl)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:732,1
    - Dst: begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:735,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:735,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:736,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/redis_cluster.cpp:740,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:740,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:740,1
    - Dst: std::vector::erase
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::unique
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:743,1
    - Dst: brpc::RedisClusterChannel::RefreshTopologyFromEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:744,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 749
      start: 729
    functionDepth: 1
    functionLinenumber: 729
    functionLinenumberEnd: 749
    functionName: brpc::RedisClusterChannel::RefreshTopology
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 3
    functionsReached:
    - begin
    - std::unique
    - std::vector::push_back
    - BAIDU_SCOPED_LOCK
    - end
    - std::vector::end
    - std::vector::begin
    - std::vector::erase
    - std::vector::size
    - brpc::RedisClusterChannel::RefreshTopologyFromEndpoint
    - std::sort
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::RefreshTopology()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:752,1
    - Dst: brpc::RedisClusterChannel::FetchAndParseClusterSlots
      Src: /src/brpc/src/brpc/redis_cluster.cpp:759,1
    - Dst: brpc::RedisClusterChannel::ApplyTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:761,1
    - Dst: std::vector::assign
      Src: /src/brpc/src/brpc/redis_cluster.cpp:765,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:765,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:766,1
    - Dst: brpc::RedisClusterChannel::FetchAndParseClusterNodes
      Src: /src/brpc/src/brpc/redis_cluster.cpp:767,1
    - Dst: brpc::RedisClusterChannel::ApplyTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:768,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 751
    functionDepth: 1
    functionLinenumber: 751
    functionLinenumberEnd: 772
    functionName: brpc::RedisClusterChannel::RefreshTopologyFromEndpoint
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::FetchAndParseClusterSlots
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - std::vector::assign
    - brpc::RedisClusterChannel::ApplyTopology
    - std::vector::clear
    - std::string
    - brpc::RedisClusterChannel::FetchAndParseClusterNodes
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::RefreshTopologyFromEndpoint(const std::string&
      endpoint)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RedisRequest::AddCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:780,1
    - Dst: Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:786,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/redis_cluster.cpp:787,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:788,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:792,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:792,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:796,1
    - Dst: EndpointHost
      Src: /src/brpc/src/brpc/redis_cluster.cpp:797,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:799,1
    - Dst: is_array
      Src: /src/brpc/src/brpc/redis_cluster.cpp:801,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:801,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:804,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:804,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:808,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:809,1
    - Dst: is_array
      Src: /src/brpc/src/brpc/redis_cluster.cpp:814,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:814,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:814,1
    - Dst: is_string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:818,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_cluster.cpp:819,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:821,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:825,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:832,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:833,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:835,1
    - Dst: std::min<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:836,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:836,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 44
    argCount: 4
    argNames:
    - channel
    - ' endpoint'
    - slot_to_endpoint
    - discovered_endpoints
    argTypes:
    - Channel*
    - std::string
    - std::vector<std::string>*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 843
    functionName: brpc::RedisClusterChannel::FetchAndParseClusterSlots
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - std::vector<std::string>*::push_back
    - std::max<int64_t>
    - EndpointHost
    - std::min<int64_t>
    - Controller::Failed
    - RedisRequest::AddCommand
    - RedisResponse::reply
    - std::string::empty
    - is_integer
    - integer
    - is_string
    - RedisResponse::reply_size
    - data
    - Controller::set_timeout_ms
    - size
    - std::ostringstream::str
    - is_array
    - Channel*::CallMethod
    - static_cast<int64_t>
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::FetchAndParseClusterSlots(\n    Channel*
      channel,\n    const std::string& endpoint,\n    std::vector<std::string>* slot_to_endpoint,\n
      \   std::vector<std::string>* discovered_endpoints)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: RedisRequest::AddCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:850,1
    - Dst: Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:856,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/redis_cluster.cpp:857,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:858,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:862,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:862,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:867,1
    - Dst: SplitByChar
      Src: /src/brpc/src/brpc/redis_cluster.cpp:868,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:869,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:871,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:871,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/redis_cluster.cpp:872,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:872,1
    - Dst: SplitByWhitespace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:874,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:875,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:880,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:883,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:884,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:885,1
    - Dst: brpc::RedisClusterChannel::ParseRedisNodeAddress
      Src: /src/brpc/src/brpc/redis_cluster.cpp:890,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:893,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:895,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:897,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:899,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:900,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:904,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:908,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:913,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:913,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:914,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:914,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:922,1
    - Dst: std::min<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:923,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:923,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 55
    argCount: 3
    argNames:
    - channel
    - slot_to_endpoint
    - discovered_endpoints
    argTypes:
    - Channel*
    - std::vector<std::string>*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 845
    functionDepth: 1
    functionLinenumber: 845
    functionLinenumberEnd: 931
    functionName: brpc::RedisClusterChannel::FetchAndParseClusterNodes
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - SplitByChar
    - std::vector<std::string>*::push_back
    - std::max<int64_t>
    - std::vector::size
    - empty
    - brpc::RedisClusterChannel::ParseRedisNodeAddress
    - std::min<int64_t>
    - Controller::Failed
    - RedisRequest::AddCommand
    - RedisResponse::reply
    - std::string::empty
    - RedisResponse::reply_size
    - Controller::set_timeout_ms
    - substr
    - find
    - std::string::resize
    - SplitByWhitespace
    - Channel*::CallMethod
    - static_cast<int64_t>
    - std::string::size
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::FetchAndParseClusterNodes(\n    Channel*
      channel,\n    std::vector<std::string>* slot_to_endpoint,\n    std::vector<std::string>*
      discovered_endpoints)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:937,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:938,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/redis_cluster.cpp:939,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:942,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:943,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/redis_cluster.cpp:944,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:948,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:949,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:950,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/redis_cluster.cpp:953,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:961,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:962,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:963,1
    - Dst: std::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:964,1
    - Dst: begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:964,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:964,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:965,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:966,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - ' slot_to_endpoint'
    - ' discovered_endpoints'
    argTypes:
    - std::vector<std::string>
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 933
    functionDepth: 1
    functionLinenumber: 933
    functionLinenumberEnd: 969
    functionName: brpc::RedisClusterChannel::ApplyTopology
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - Modify
    - std::find
    - std::set::insert
    - std::set::begin
    - empty
    - push_back
    - size
    - std::set::end
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::ApplyTopology(\n    const std::vector<std::string>&
      slot_to_endpoint,\n    const std::vector<std::string>& discovered_endpoints)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:973,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:975,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:976,1
    - Dst: std::unordered_map<std::string, std::unique_ptr<Channel> >::iterator::second::get
      Src: /src/brpc/src/brpc/redis_cluster.cpp:977,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:981,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/redis_cluster.cpp:987,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:987,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:991,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:993,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:994,1
    - Dst: std::unordered_map<std::string, std::unique_ptr<Channel> >::iterator::second::get
      Src: /src/brpc/src/brpc/redis_cluster.cpp:995,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/redis_cluster.cpp:997,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/redis_cluster.cpp:998,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 971
    functionDepth: 1
    functionLinenumber: 971
    functionLinenumberEnd: 1000
    functionName: brpc::RedisClusterChannel::GetOrCreateChannel
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 5
    functionsReached:
    - std::unique_ptr::get
    - find
    - BAIDU_SCOPED_LOCK
    - std::unordered_map<std::string, std::unique_ptr<Channel> >::iterator::second::get
    - end
    - std::unique_ptr::Init
    - std::move
    - c_str
    - Channel::Channel
    linkageType: ''
    returnType: Channel
    signature: Channel * RedisClusterChannel::GetOrCreateChannel(const std::string&
      endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::ExtractHashtag
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1003,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1005,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1006,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1007,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1008,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1011
    functionName: brpc::RedisClusterChannel::HashSlot
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - static_cast<uint16_t>
    - static_cast<uint8_t>
    - brpc::RedisClusterChannel::ExtractHashtag
    - std::string::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t RedisClusterChannel::HashSlot(const std::string& key)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1014,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1018,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1022,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1023
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1023
    functionName: brpc::RedisClusterChannel::ExtractHashtag
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - substr
    - find
    linkageType: ''
    returnType: std::string
    signature: std::string RedisClusterChannel::ExtractHashtag(const std::string&
      key)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: RedirectInfo*::endpoint::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1030,1
    - Dst: error_text::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1032,1
    - Dst: SplitByWhitespace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1036,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1037,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1050,1
    - Dst: brpc::RedisClusterChannel::ParseRedisNodeAddress
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1054,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1059,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - ' result'
    - redirect
    argTypes:
    - SingleCommandResult
    - RedirectInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1062
      start: 1025
    functionDepth: 1
    functionLinenumber: 1025
    functionLinenumberEnd: 1062
    functionName: brpc::RedisClusterChannel::ParseRedirectReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - static_cast<int>
    - std::vector::size
    - SplitByWhitespace
    - error_text::empty
    - brpc::RedisClusterChannel::ParseRedisNodeAddress
    - RedirectInfo*::endpoint::clear
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ParseRedirectReply(const SingleCommandResult&
      result,\n                                             RedirectInfo* redirect)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RedisRequest*::Clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1066,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1067,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1072,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1073,1
    - Dst: RedisRequest*::AddCommandByComponents
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1075,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1075,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' args'
    - request
    argTypes:
    - std::vector<std::string>
    - RedisRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1076
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1076
    functionName: brpc::RedisClusterChannel::BuildRedisRequest
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - RedisRequest*::AddCommandByComponents
    - empty
    - std::vector::size
    - RedisRequest*::Clear
    - size
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::BuildRedisRequest(const std::vector<std::string>&
      args,\n                                            RedisRequest* request)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1081,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1081,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - value
    argTypes:
    - butil::IOBuf*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1078
    functionDepth: 1
    functionLinenumber: 1078
    functionLinenumberEnd: 1082
    functionName: brpc::RedisClusterChannel::AppendIntegerReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::AppendIntegerReply(butil::IOBuf* buf, int64_t
      value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1086,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1087,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1088,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - ' value'
    argTypes:
    - butil::IOBuf*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1084
    functionDepth: 1
    functionLinenumber: 1084
    functionLinenumberEnd: 1089
    functionName: brpc::RedisClusterChannel::AppendStatusReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::push_back
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::AppendStatusReply(butil::IOBuf* buf,\n                                            const
      std::string& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1093,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1094,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1095,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - ' value'
    argTypes:
    - butil::IOBuf*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1096
      start: 1091
    functionDepth: 1
    functionLinenumber: 1091
    functionLinenumberEnd: 1096
    functionName: brpc::RedisClusterChannel::AppendErrorReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 5
    functionsReached:
    - butil::IOBuf*::push_back
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::AppendErrorReply(butil::IOBuf* buf,\n                                           const
      std::string& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1101,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - butil::IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1102
      start: 1098
    functionDepth: 1
    functionLinenumber: 1098
    functionLinenumberEnd: 1102
    functionName: brpc::RedisClusterChannel::AppendArrayHeader
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached:
    - std::ostringstream::str
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::AppendArrayHeader(butil::IOBuf* buf, size_t
      size)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1106,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1111,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1113,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1115,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1117,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1122,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1123,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1124,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1127,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1128,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1128,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1133,1
    - Dst: std::string::rfind
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1137,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1141,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1142,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1142,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1145,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1151,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 35
    argCount: 2
    argNames:
    - ' token'
    - endpoint
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1104
    functionDepth: 1
    functionLinenumber: 1104
    functionLinenumberEnd: 1153
    functionName: brpc::RedisClusterChannel::ParseRedisNodeAddress
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - std::string::substr
    - std::string::find
    - std::string::empty
    - std::string::resize
    - empty
    - std::ostringstream::str
    - std::string::rfind
    - std::string::size
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ParseRedisNodeAddress(const std::string&
      token,\n                                                std::string* endpoint)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1156,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1161,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1161,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1162,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' s'
    - out
    argTypes:
    - std::string
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1155
    functionDepth: 0
    functionLinenumber: 1155
    functionLinenumberEnd: 1167
    functionName: brpc::RedisClusterChannel::ParseInt
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 4
    functionsReached:
    - c_str
    - strtoll
    - empty
    - size
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::ParseInt(const std::string& s, int64_t* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - ' cmd'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1169
    functionDepth: 0
    functionLinenumber: 1169
    functionLinenumberEnd: 1173
    functionName: brpc::RedisClusterChannel::IsNoKeyCommand
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::IsNoKeyCommand(const std::string& cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RedisClusterChannel*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1176,1
    - Dst: RedisClusterChannel*::_stop_refresh::load
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1177,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1178,1
    - Dst: RedisClusterChannel*::_stop_refresh::load
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1180,1
    - Dst: std::min<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1181,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1182,1
    - Dst: RedisClusterChannel*::_stop_refresh::load
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1185,1
    - Dst: RedisClusterChannel*::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1188,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1191
      start: 1175
    functionDepth: 2
    functionLinenumber: 1175
    functionLinenumberEnd: 1191
    functionName: brpc::RedisClusterChannel::RunPeriodicRefresh
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - RedisClusterChannel*::_stop_refresh::load
    - bthread_usleep
    - std::max
    - RedisClusterChannel*::RefreshTopology
    - static_cast<RedisClusterChannel*>
    - std::min<int64_t>
    linkageType: ''
    returnType: void
    signature: void * RedisClusterChannel::RunPeriodicRefresh(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::self::CallMethodImpl
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1195,1
    - Dst: std::unique_ptr::done::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1198
    functionName: brpc::RedisClusterChannel::RunAsyncCall
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::self::CallMethodImpl
    - std::unique_ptr::done::Run
    linkageType: ''
    returnType: void
    signature: void * RedisClusterChannel::RunAsyncCall(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::PickAnyEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1203
      start: 1200
    functionDepth: 2
    functionLinenumber: 1200
    functionLinenumberEnd: 1203
    functionName: brpc::RedisClusterChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannel::PickAnyEndpoint
    linkageType: ''
    returnType: int
    signature: int RedisClusterChannel::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1208,1
    - Dst: butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1211,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1212,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1213,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1216,1
    - Dst: std::set::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1216,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1205
    functionDepth: 0
    functionLinenumber: 1205
    functionLinenumberEnd: 1217
    functionName: brpc::RedisClusterChannel::Weight
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
    - static_cast<int>
    - std::set::insert
    - Read
    - empty
    - std::set::size
    linkageType: ''
    returnType: int
    signature: int RedisClusterChannel::Weight()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:78,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 83
    functionName: brpc::Trim
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - static_cast<unsigned char>
    - substr
    - isspace
    - brpc::size
    linkageType: ''
    returnType: std::string
    signature: std::string Trim(const std::string& in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::getline
      Src: /src/brpc/src/brpc/redis_cluster.cpp:89,1
    - Dst: brpc::Trim
      Src: /src/brpc/src/brpc/redis_cluster.cpp:90,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:91,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' text'
    - delim
    argTypes:
    - std::string
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 85
    functionDepth: 3
    functionLinenumber: 85
    functionLinenumberEnd: 96
    functionName: brpc::SplitByChar
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::getline
    - std::vector::push_back
    - std::string::empty
    - brpc::Trim
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByChar(const std::string& text, char
      delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' text'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: brpc::SplitByWhitespace
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByWhitespace(const std::string& text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:110,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:111,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:113,1
    - Dst: std::string::rfind
      Src: /src/brpc/src/brpc/redis_cluster.cpp:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 122
    functionName: brpc::EndpointHost
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - std::string::rfind
    - std::string::find
    - std::string::empty
    linkageType: ''
    returnType: std::string
    signature: std::string EndpointHost(const std::string& endpoint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/redis_cluster.cpp:125,1
    - Dst: type
      Src: /src/brpc/src/brpc/redis_cluster.cpp:128,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:129,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:130,1
    - Dst: const_cast<RedisReply&>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:133,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' reply'
    - out
    argTypes:
    - RedisReply
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 138
    functionName: brpc::EncodeReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::move_to
    - const_cast<RedisReply&>
    - butil::IOBufAppender::append
    - type
    linkageType: ''
    returnType: bool
    signature: bool EncodeReply(const RedisReply& reply, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:75,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:78,1
    - Dst: isspace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:79,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:82,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 73
    functionDepth: 2
    functionLinenumber: 73
    functionLinenumberEnd: 83
    functionName: brpc::Trim
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 3
    functionsReached:
    - static_cast<unsigned char>
    - substr
    - isspace
    - brpc::size
    linkageType: ''
    returnType: std::string
    signature: std::string Trim(const std::string& in)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::getline
      Src: /src/brpc/src/brpc/redis_cluster.cpp:89,1
    - Dst: brpc::Trim
      Src: /src/brpc/src/brpc/redis_cluster.cpp:90,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:91,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:92,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' text'
    - delim
    argTypes:
    - std::string
    - char
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 85
    functionDepth: 3
    functionLinenumber: 85
    functionLinenumberEnd: 96
    functionName: brpc::SplitByChar
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::getline
    - std::vector::push_back
    - std::string::empty
    - brpc::Trim
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByChar(const std::string& text, char
      delim)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:103,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' text'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 106
    functionName: brpc::SplitByWhitespace
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    linkageType: ''
    returnType: std::vector<std::string>
    signature: std::vector<std::string> SplitByWhitespace(const std::string& text)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:110,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:111,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:113,1
    - Dst: std::string::rfind
      Src: /src/brpc/src/brpc/redis_cluster.cpp:117,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:121,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 11
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 122
    functionName: brpc::EndpointHost
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::string::substr
    - std::string::rfind
    - std::string::find
    - std::string::empty
    linkageType: ''
    returnType: std::string
    signature: std::string EndpointHost(const std::string& endpoint)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/redis_cluster.cpp:125,1
    - Dst: type
      Src: /src/brpc/src/brpc/redis_cluster.cpp:128,1
    - Dst: butil::IOBufAppender::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:129,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:130,1
    - Dst: const_cast<RedisReply&>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:133,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/redis_cluster.cpp:136,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - ' reply'
    - out
    argTypes:
    - RedisReply
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 138
    functionName: brpc::EncodeReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender::IOBufAppender
    - butil::IOBufAppender::move_to
    - const_cast<RedisReply&>
    - butil::IOBufAppender::append
    - type
    linkageType: ''
    returnType: bool
    signature: bool EncodeReply(const RedisReply& reply, butil::IOBuf* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 142
    functionDepth: 0
    functionLinenumber: 142
    functionLinenumberEnd: 148
    functionName: brpc::RedisClusterChannelOptions::RedisClusterChannelOptions
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 14
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannelOptions::RedisClusterChannelOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 150
    functionDepth: 0
    functionLinenumber: 150
    functionLinenumberEnd: 155
    functionName: RedisClusterChannel::SingleCommandResult::SingleCommandResult()
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::SingleCommandResult::SingleCommandResult()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/redis_cluster.cpp:169,1
    - Dst: assign
      Src: /src/brpc/src/brpc/redis_cluster.cpp:170,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:170,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 165
    functionDepth: 0
    functionLinenumber: 165
    functionLinenumberEnd: 173
    functionName: brpc::RedisClusterChannel::RedisClusterChannel
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 80
    functionsReached:
    - std::string
    - Modify
    - assign
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::RedisClusterChannel()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/redis_cluster.cpp:176,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/redis_cluster.cpp:178,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 175
    functionDepth: 2
    functionLinenumber: 175
    functionLinenumberEnd: 180
    functionName: RedisClusterChannel::~RedisClusterChannel()
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::~RedisClusterChannel()
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:184,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:185,1
    - Dst: SplitByChar
      Src: /src/brpc/src/brpc/redis_cluster.cpp:196,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:198,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:203,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:207,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:209,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:214,1
    - Dst: store
      Src: /src/brpc/src/brpc/redis_cluster.cpp:219,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/redis_cluster.cpp:220,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:225,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 35
    argCount: 2
    argNames:
    - ' seed_nodes'
    - options
    argTypes:
    - std::string
    - RedisClusterChannelOptions*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 182
    functionDepth: 4
    functionLinenumber: 182
    functionLinenumberEnd: 229
    functionName: brpc::RedisClusterChannel::Init
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 16
    functionsReached:
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - BAIDU_SCOPED_LOCK
    - store
    - SplitByChar
    - LOG
    - brpc::RedisClusterChannel::RefreshTopology
    - empty
    - std::vector::size
    - std::vector::empty
    - bthread_start_background
    linkageType: ''
    returnType: int
    signature: "int RedisClusterChannel::Init(const std::string& seed_nodes,\n                              const
      RedisClusterChannelOptions* options)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:237,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/redis_cluster.cpp:239,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:241,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:247,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:247,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:248,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:250,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:255,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/redis_cluster.cpp:255,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:256,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:258,1
    - Dst: static_cast<const RedisRequest*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:263,1
    - Dst: static_cast<RedisResponse*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:264,1
    - Dst: brpc::RedisClusterChannel::CallMethodImpl
      Src: /src/brpc/src/brpc/redis_cluster.cpp:267,1
    - Dst: AsyncCall::AsyncCall
      Src: /src/brpc/src/brpc/redis_cluster.cpp:271,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:273,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:274,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/redis_cluster.cpp:284,1
    - Dst: brpc::RedisClusterChannel::CallMethodImpl
      Src: /src/brpc/src/brpc/redis_cluster.cpp:286,1
    - Dst: google::protobuf::Closure*::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:287,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 41
    argCount: 4
    argNames:
    - controller_base
    - request_base
    - response_base
    - done
    argTypes:
    - google::protobuf::RpcController*
    - google::protobuf::Message*
    - google::protobuf::Message*
    - google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 231
    functionDepth: 4
    functionLinenumber: 231
    functionLinenumberEnd: 289
    functionName: brpc::RedisClusterChannel::CallMethod
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 66
    functionsReached:
    - AsyncCall::AsyncCall
    - static_cast<Controller*>
    - google::protobuf::Closure*::Run
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::RedisClusterChannel::CallMethodImpl
    - bthread_start_background
    - static_cast<RedisResponse*>
    - LOG
    - static_cast<const RedisRequest*>
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::CallMethod(\n    const google::protobuf::MethodDescriptor*
      /*method*/,\n    google::protobuf::RpcController* controller_base,\n    const
      google::protobuf::Message* request_base,\n    google::protobuf::Message* response_base,\n
      \   google::protobuf::Closure* done)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::ParseRequest
      Src: /src/brpc/src/brpc/redis_cluster.cpp:295,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:298,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:299,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:303,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:304,1
    - Dst: brpc::RedisClusterChannel::ExecuteCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:305,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_cluster.cpp:310,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:311,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:312,1
    - Dst: RedisResponse*::Clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:315,1
    - Dst: RedisResponse*::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/redis_cluster.cpp:316,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:316,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:316,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:317,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:318,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 3
    argNames:
    - cntl
    - ' request'
    - response
    argTypes:
    - Controller*
    - RedisRequest
    - RedisResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 291
    functionDepth: 3
    functionLinenumber: 291
    functionLinenumberEnd: 322
    functionName: brpc::RedisClusterChannel::CallMethodImpl
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::ParseRequest
    - std::vector::empty
    - brpc::RedisClusterChannel::ExecuteCommand
    - RedisResponse*::ConsumePartialIOBuf
    - static_cast<int>
    - butil::IOBuf::append
    - butil::IOBuf::empty
    - std::vector::size
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - RedisResponse*::Clear
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::CallMethodImpl(Controller* cntl,\n                                         const
      RedisRequest& request,\n                                         RedisResponse*
      response)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: std::vector<ParsedCommand>*::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:327,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/redis_cluster.cpp:329,1
    - Dst: SerializeTo
      Src: /src/brpc/src/brpc/redis_cluster.cpp:330,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:331,1
    - Dst: butil::Arena::Arena
      Src: /src/brpc/src/brpc/redis_cluster.cpp:336,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:338,1
    - Dst: RedisCommandParser::Consume
      Src: /src/brpc/src/brpc/redis_cluster.cpp:340,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:342,1
    - Dst: ParsedCommand::args::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:346,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:346,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:347,1
    - Dst: ParsedCommand::args::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:348,1
    - Dst: as_string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:348,1
    - Dst: std::vector<ParsedCommand>*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:350,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 3
    argNames:
    - ' request'
    - commands
    - cntl
    argTypes:
    - RedisRequest
    - std::vector<ParsedCommand>*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 353
      start: 324
    functionDepth: 2
    functionLinenumber: 324
    functionLinenumberEnd: 353
    functionName: brpc::RedisClusterChannel::ParseRequest
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - RedisCommandParser::Consume
    - SerializeTo
    - ParsedCommand::args::push_back
    - butil::Arena::Arena
    - butil::IOBuf::empty
    - ParsedCommand::args::reserve
    - Controller*::SetFailed
    - std::vector::size
    - std::vector<ParsedCommand>*::push_back
    - std::vector<ParsedCommand>*::clear
    - as_string
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ParseRequest(const RedisRequest& request,\n
      \                                      std::vector<ParsedCommand>* commands,\n
      \                                      Controller* cntl) const"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: args::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:358,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:359,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:365,1
    - Dst: brpc::RedisClusterChannel::ExecuteMGet
      Src: /src/brpc/src/brpc/redis_cluster.cpp:370,1
    - Dst: brpc::RedisClusterChannel::ExecuteMSet
      Src: /src/brpc/src/brpc/redis_cluster.cpp:373,1
    - Dst: brpc::RedisClusterChannel::ExecuteIntegerAggregate
      Src: /src/brpc/src/brpc/redis_cluster.cpp:376,1
    - Dst: brpc::RedisClusterChannel::ExecuteEvalLike
      Src: /src/brpc/src/brpc/redis_cluster.cpp:379,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:383,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:386,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 26
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 388
      start: 355
    functionDepth: 3
    functionLinenumber: 355
    functionLinenumberEnd: 388
    functionName: brpc::RedisClusterChannel::ExecuteCommand
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - brpc::RedisClusterChannel::ExecuteMSet
    - args::empty
    - butil::IOBuf*::swap
    - brpc::RedisClusterChannel::ExecuteMGet
    - brpc::RedisClusterChannel::ExecuteIntegerAggregate
    - brpc::RedisClusterChannel::ExecuteEvalLike
    - Controller*::SetFailed
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteCommand(const ParsedCommand& cmd,\n
      \                                        butil::IOBuf* encoded_reply,\n                                         Controller*
      cntl)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:394,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:395,1
    - Dst: brpc::RedisClusterChannel::IsNoKeyCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:403,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:403,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:404,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:405,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:406,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:407,1
    - Dst: brpc::RedisClusterChannel::PickAnyEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:412,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:413,1
    - Dst: brpc::RedisClusterChannel::PickAnyEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:414,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:415,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/redis_cluster.cpp:423,1
    - Dst: brpc::RedisClusterChannel::SendToEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:426,1
    - Dst: RedirectInfo::endpoint::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:433,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:435,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:441,1
    - Dst: RedirectInfo::endpoint::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:442,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/redis_cluster.cpp:443,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:456,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:461,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 52
    argCount: 4
    argNames:
    - ' args'
    - forced_endpoint
    - result
    - cntl
    argTypes:
    - std::vector<std::string>
    - std::string*
    - SingleCommandResult*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 463
      start: 390
    functionDepth: 2
    functionLinenumber: 390
    functionLinenumberEnd: 463
    functionName: brpc::RedisClusterChannel::ExecuteSingleCommand
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 6
    functionsReached:
    - brpc::RedisClusterChannel::PickAnyEndpoint
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - std::max
    - brpc::RedisClusterChannel::IsNoKeyCommand
    - Modify
    - static_cast<int>
    - brpc::RedisClusterChannel::RefreshTopology
    - brpc::RedisClusterChannel::PickEndpointForKey
    - empty
    - RedirectInfo::endpoint::empty
    - Controller*::SetFailed
    - brpc::RedisClusterChannel::SendToEndpoint
    - size
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteSingleCommand(const std::vector<std::string>&
      args,\n                                               const std::string* forced_endpoint,\n
      \                                              SingleCommandResult* result,\n
      \                                              Controller* cntl)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:468,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:469,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:475,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:475,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:476,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:478,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:479,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:481,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:484,1
    - Dst: brpc::RedisClusterChannel::AppendArrayHeader
      Src: /src/brpc/src/brpc/redis_cluster.cpp:487,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:487,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:488,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:489,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 492
      start: 465
    functionDepth: 2
    functionLinenumber: 465
    functionLinenumberEnd: 492
    functionName: brpc::RedisClusterChannel::ExecuteMGet
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - std::vector::reserve
    - args::size
    - butil::IOBuf*::append
    - std::vector::push_back
    - brpc::RedisClusterChannel::AppendArrayHeader
    - std::vector::size
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteMGet(const ParsedCommand& cmd,\n
      \                                     butil::IOBuf* encoded_reply,\n                                      Controller*
      cntl)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:497,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:497,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:498,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:503,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:505,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:506,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:507,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:510,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:514,1
    - Dst: brpc::RedisClusterChannel::AppendStatusReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:519,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 521
      start: 494
    functionDepth: 2
    functionLinenumber: 494
    functionLinenumberEnd: 521
    functionName: brpc::RedisClusterChannel::ExecuteMSet
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - args::size
    - std::vector::push_back
    - butil::IOBuf*::swap
    - brpc::RedisClusterChannel::AppendStatusReply
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteMSet(const ParsedCommand& cmd,\n
      \                                     butil::IOBuf* encoded_reply,\n                                      Controller*
      cntl)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:526,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:527,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:533,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:535,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:536,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:539,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:543,1
    - Dst: brpc::RedisClusterChannel::AppendIntegerReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:549,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 523
    functionDepth: 2
    functionLinenumber: 523
    functionLinenumberEnd: 551
    functionName: brpc::RedisClusterChannel::ExecuteIntegerAggregate
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - args::size
    - std::vector::push_back
    - butil::IOBuf*::swap
    - brpc::RedisClusterChannel::AppendIntegerReply
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteIntegerAggregate(const ParsedCommand&
      cmd,\n                                                  butil::IOBuf* encoded_reply,\n
      \                                                 Controller* cntl)"
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:556,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:557,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:563,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:564,1
    - Dst: args::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:569,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:569,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:570,1
    - Dst: brpc::RedisClusterChannel::HashSlot
      Src: /src/brpc/src/brpc/redis_cluster.cpp:578,1
    - Dst: brpc::RedisClusterChannel::HashSlot
      Src: /src/brpc/src/brpc/redis_cluster.cpp:580,1
    - Dst: brpc::RedisClusterChannel::AppendErrorReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:581,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:588,1
    - Dst: brpc::RedisClusterChannel::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:589,1
    - Dst: brpc::RedisClusterChannel::PickEndpointForKey
      Src: /src/brpc/src/brpc/redis_cluster.cpp:590,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:591,1
    - Dst: brpc::RedisClusterChannel::ExecuteSingleCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:598,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/redis_cluster.cpp:604,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 3
    argNames:
    - ' cmd'
    - encoded_reply
    - cntl
    argTypes:
    - ParsedCommand
    - butil::IOBuf*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 553
    functionDepth: 2
    functionLinenumber: 553
    functionLinenumberEnd: 606
    functionName: brpc::RedisClusterChannel::ExecuteEvalLike
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::AppendErrorReply
    - args::size
    - butil::IOBuf*::swap
    - static_cast<size_t>
    - brpc::RedisClusterChannel::RefreshTopology
    - brpc::RedisClusterChannel::PickEndpointForKey
    - Controller*::SetFailed
    - brpc::RedisClusterChannel::ExecuteSingleCommand
    - brpc::RedisClusterChannel::HashSlot
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ExecuteEvalLike(const ParsedCommand& cmd,\n
      \                                         butil::IOBuf* encoded_reply,\n                                          Controller*
      cntl)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::HashSlot
      Src: /src/brpc/src/brpc/redis_cluster.cpp:611,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:612,1
    - Dst: Read
      Src: /src/brpc/src/brpc/redis_cluster.cpp:616,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:617,1
    - Dst: butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:617,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:621,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 15
    argCount: 3
    argNames:
    - ' key'
    - endpoint
    - slot
    argTypes:
    - std::string
    - std::string*
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 608
    functionDepth: 0
    functionLinenumber: 608
    functionLinenumberEnd: 629
    functionName: brpc::RedisClusterChannel::PickEndpointForKey
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 4
    functionsReached:
    - butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
    - static_cast<int>
    - static_cast<size_t>
    - Read
    - empty
    - brpc::RedisClusterChannel::HashSlot
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::PickEndpointForKey(const std::string& key,\n
      \                                            std::string* endpoint,\n                                             int*
      slot) const"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:632,1
    - Dst: begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:634,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:634,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:638,1
    - Dst: front
      Src: /src/brpc/src/brpc/redis_cluster.cpp:639,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - endpoint
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 631
    functionDepth: 1
    functionLinenumber: 631
    functionLinenumberEnd: 643
    functionName: brpc::RedisClusterChannel::PickAnyEndpoint
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 3
    functionsReached:
    - begin
    - front
    - BAIDU_SCOPED_LOCK
    - end
    - empty
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::PickAnyEndpoint(std::string* endpoint) const
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RedirectInfo*::endpoint::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:655,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:657,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:659,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:659,1
    - Dst: RedisRequest::AddCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:665,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:666,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:670,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:670,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:671,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:672,1
    - Dst: RedisRequest::AddCommandByComponents
      Src: /src/brpc/src/brpc/redis_cluster.cpp:674,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:675,1
    - Dst: brpc::RedisClusterChannel::BuildRedisRequest
      Src: /src/brpc/src/brpc/redis_cluster.cpp:679,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:680,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:687,1
    - Dst: Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:688,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:688,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/redis_cluster.cpp:690,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:691,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:692,1
    - Dst: Controller::ErrorCode
      Src: /src/brpc/src/brpc/redis_cluster.cpp:692,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:694,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/redis_cluster.cpp:695,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:700,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:701,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:703,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:708,1
    - Dst: EncodeReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:709,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:710,1
    - Dst: is_error
      Src: /src/brpc/src/brpc/redis_cluster.cpp:715,1
    - Dst: type
      Src: /src/brpc/src/brpc/redis_cluster.cpp:716,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_cluster.cpp:717,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:718,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:718,1
    - Dst: error_message
      Src: /src/brpc/src/brpc/redis_cluster.cpp:720,1
    - Dst: SingleCommandResult*::error_text::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:722,1
    - Dst: brpc::RedisClusterChannel::ParseRedirectReply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:725,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 56
    argCount: 6
    argNames:
    - ' endpoint'
    - ' args'
    - asking
    - result
    - redirect
    - cntl
    argTypes:
    - std::string
    - std::vector<std::string>
    - bool
    - SingleCommandResult*
    - RedirectInfo*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 645
    functionDepth: 2
    functionLinenumber: 645
    functionLinenumberEnd: 727
    functionName: brpc::RedisClusterChannel::SendToEndpoint
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::ParseRedirectReply
    - std::vector::size
    - RedirectInfo*::endpoint::clear
    - std::vector::reserve
    - Controller*::timeout_ms
    - RedisRequest::AddCommand
    - Controller::Failed
    - RedisResponse::reply
    - is_integer
    - integer
    - Controller::ErrorCode
    - RedisResponse::reply_size
    - SingleCommandResult*::error_text::clear
    - is_error
    - data
    - c_str
    - Controller::set_timeout_ms
    - size
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - std::vector::push_back
    - error_message
    - brpc::RedisClusterChannel::BuildRedisRequest
    - Channel*::CallMethod
    - EncodeReply
    - RedisRequest::AddCommandByComponents
    - Controller::ErrorText
    - Controller*::SetFailed
    - type
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::SendToEndpoint(const std::string& endpoint,\n
      \                                        const std::vector<std::string>& args,\n
      \                                        bool asking,\n                                         SingleCommandResult*
      result,\n                                         RedirectInfo* redirect,\n
      \                                        Controller* cntl)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:732,1
    - Dst: begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:735,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:735,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:736,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/redis_cluster.cpp:740,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:740,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:740,1
    - Dst: std::vector::erase
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::unique
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:741,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:743,1
    - Dst: brpc::RedisClusterChannel::RefreshTopologyFromEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:744,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 749
      start: 729
    functionDepth: 2
    functionLinenumber: 729
    functionLinenumberEnd: 749
    functionName: brpc::RedisClusterChannel::RefreshTopology
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 6
    functionsReached:
    - begin
    - std::unique
    - std::vector::push_back
    - BAIDU_SCOPED_LOCK
    - end
    - std::vector::end
    - std::vector::begin
    - std::vector::erase
    - std::vector::size
    - brpc::RedisClusterChannel::RefreshTopologyFromEndpoint
    - std::sort
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::RefreshTopology()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:752,1
    - Dst: brpc::RedisClusterChannel::FetchAndParseClusterSlots
      Src: /src/brpc/src/brpc/redis_cluster.cpp:759,1
    - Dst: brpc::RedisClusterChannel::ApplyTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:761,1
    - Dst: std::vector::assign
      Src: /src/brpc/src/brpc/redis_cluster.cpp:765,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:765,1
    - Dst: std::vector::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:766,1
    - Dst: brpc::RedisClusterChannel::FetchAndParseClusterNodes
      Src: /src/brpc/src/brpc/redis_cluster.cpp:767,1
    - Dst: brpc::RedisClusterChannel::ApplyTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:768,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 751
    functionDepth: 2
    functionLinenumber: 751
    functionLinenumberEnd: 772
    functionName: brpc::RedisClusterChannel::RefreshTopologyFromEndpoint
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::FetchAndParseClusterSlots
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - std::vector::assign
    - brpc::RedisClusterChannel::ApplyTopology
    - std::vector::clear
    - std::string
    - brpc::RedisClusterChannel::FetchAndParseClusterNodes
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::RefreshTopologyFromEndpoint(const std::string&
      endpoint)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: RedisRequest::AddCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:780,1
    - Dst: Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:786,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/redis_cluster.cpp:787,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:788,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:792,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:792,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:796,1
    - Dst: EndpointHost
      Src: /src/brpc/src/brpc/redis_cluster.cpp:797,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:799,1
    - Dst: is_array
      Src: /src/brpc/src/brpc/redis_cluster.cpp:801,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:801,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:804,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:804,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:808,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:809,1
    - Dst: is_array
      Src: /src/brpc/src/brpc/redis_cluster.cpp:814,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:814,1
    - Dst: is_integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:814,1
    - Dst: is_string
      Src: /src/brpc/src/brpc/redis_cluster.cpp:818,1
    - Dst: data
      Src: /src/brpc/src/brpc/redis_cluster.cpp:819,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:821,1
    - Dst: integer
      Src: /src/brpc/src/brpc/redis_cluster.cpp:825,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:832,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:833,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:835,1
    - Dst: std::min<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:836,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:836,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 44
    argCount: 4
    argNames:
    - channel
    - ' endpoint'
    - slot_to_endpoint
    - discovered_endpoints
    argTypes:
    - Channel*
    - std::string
    - std::vector<std::string>*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 843
    functionName: brpc::RedisClusterChannel::FetchAndParseClusterSlots
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - std::vector<std::string>*::push_back
    - std::max<int64_t>
    - EndpointHost
    - std::min<int64_t>
    - Controller::Failed
    - RedisRequest::AddCommand
    - RedisResponse::reply
    - std::string::empty
    - is_integer
    - integer
    - is_string
    - RedisResponse::reply_size
    - data
    - Controller::set_timeout_ms
    - size
    - std::ostringstream::str
    - is_array
    - Channel*::CallMethod
    - static_cast<int64_t>
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::FetchAndParseClusterSlots(\n    Channel*
      channel,\n    const std::string& endpoint,\n    std::vector<std::string>* slot_to_endpoint,\n
      \   std::vector<std::string>* discovered_endpoints)"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: RedisRequest::AddCommand
      Src: /src/brpc/src/brpc/redis_cluster.cpp:850,1
    - Dst: Controller::set_timeout_ms
      Src: /src/brpc/src/brpc/redis_cluster.cpp:856,1
    - Dst: Channel*::CallMethod
      Src: /src/brpc/src/brpc/redis_cluster.cpp:857,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/redis_cluster.cpp:858,1
    - Dst: RedisResponse::reply_size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:862,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:862,1
    - Dst: RedisResponse::reply
      Src: /src/brpc/src/brpc/redis_cluster.cpp:867,1
    - Dst: SplitByChar
      Src: /src/brpc/src/brpc/redis_cluster.cpp:868,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:869,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:871,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:871,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/redis_cluster.cpp:872,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:872,1
    - Dst: SplitByWhitespace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:874,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:875,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:880,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:883,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:884,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:885,1
    - Dst: brpc::RedisClusterChannel::ParseRedisNodeAddress
      Src: /src/brpc/src/brpc/redis_cluster.cpp:890,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:893,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:895,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:897,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:899,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:900,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:904,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:908,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:913,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:913,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:914,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:914,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:922,1
    - Dst: std::min<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:923,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:923,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 55
    argCount: 3
    argNames:
    - channel
    - slot_to_endpoint
    - discovered_endpoints
    argTypes:
    - Channel*
    - std::vector<std::string>*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 931
      start: 845
    functionDepth: 2
    functionLinenumber: 845
    functionLinenumberEnd: 931
    functionName: brpc::RedisClusterChannel::FetchAndParseClusterNodes
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - SplitByChar
    - std::vector<std::string>*::push_back
    - std::max<int64_t>
    - std::vector::size
    - empty
    - brpc::RedisClusterChannel::ParseRedisNodeAddress
    - std::min<int64_t>
    - Controller::Failed
    - RedisRequest::AddCommand
    - RedisResponse::reply
    - std::string::empty
    - RedisResponse::reply_size
    - Controller::set_timeout_ms
    - substr
    - find
    - std::string::resize
    - SplitByWhitespace
    - Channel*::CallMethod
    - static_cast<int64_t>
    - std::string::size
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::FetchAndParseClusterNodes(\n    Channel*
      channel,\n    std::vector<std::string>* slot_to_endpoint,\n    std::vector<std::string>*
      discovered_endpoints)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:937,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:938,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/redis_cluster.cpp:939,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:942,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:943,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/redis_cluster.cpp:944,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:948,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:949,1
    - Dst: brpc::RedisClusterChannel::GetOrCreateChannel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:950,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/redis_cluster.cpp:953,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:961,1
    - Dst: std::set::begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:962,1
    - Dst: std::set::end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:963,1
    - Dst: std::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:964,1
    - Dst: begin
      Src: /src/brpc/src/brpc/redis_cluster.cpp:964,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:964,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:965,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:966,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 24
    argCount: 2
    argNames:
    - ' slot_to_endpoint'
    - ' discovered_endpoints'
    argTypes:
    - std::vector<std::string>
    - std::vector<std::string>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 933
    functionDepth: 2
    functionLinenumber: 933
    functionLinenumberEnd: 969
    functionName: brpc::RedisClusterChannel::ApplyTopology
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - brpc::RedisClusterChannel::GetOrCreateChannel
    - begin
    - BAIDU_SCOPED_LOCK
    - end
    - Modify
    - std::find
    - std::set::insert
    - std::set::begin
    - empty
    - push_back
    - size
    - std::set::end
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::ApplyTopology(\n    const std::vector<std::string>&
      slot_to_endpoint,\n    const std::vector<std::string>& discovered_endpoints)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:973,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:975,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:976,1
    - Dst: std::unordered_map<std::string, std::unique_ptr<Channel> >::iterator::second::get
      Src: /src/brpc/src/brpc/redis_cluster.cpp:977,1
    - Dst: Channel::Channel
      Src: /src/brpc/src/brpc/redis_cluster.cpp:981,1
    - Dst: std::unique_ptr::Init
      Src: /src/brpc/src/brpc/redis_cluster.cpp:987,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:987,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/redis_cluster.cpp:991,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:993,1
    - Dst: end
      Src: /src/brpc/src/brpc/redis_cluster.cpp:994,1
    - Dst: std::unordered_map<std::string, std::unique_ptr<Channel> >::iterator::second::get
      Src: /src/brpc/src/brpc/redis_cluster.cpp:995,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/redis_cluster.cpp:997,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/redis_cluster.cpp:998,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 1
    argNames:
    - ' endpoint'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1000
      start: 971
    functionDepth: 1
    functionLinenumber: 971
    functionLinenumberEnd: 1000
    functionName: brpc::RedisClusterChannel::GetOrCreateChannel
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 10
    functionsReached:
    - std::unique_ptr::get
    - find
    - BAIDU_SCOPED_LOCK
    - std::unordered_map<std::string, std::unique_ptr<Channel> >::iterator::second::get
    - end
    - std::unique_ptr::Init
    - std::move
    - c_str
    - Channel::Channel
    linkageType: ''
    returnType: Channel
    signature: Channel * RedisClusterChannel::GetOrCreateChannel(const std::string&
      endpoint)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::ExtractHashtag
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1003,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1005,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1006,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1007,1
    - Dst: static_cast<uint16_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1008,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1011
      start: 1002
    functionDepth: 1
    functionLinenumber: 1002
    functionLinenumberEnd: 1011
    functionName: brpc::RedisClusterChannel::HashSlot
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 4
    functionsReached:
    - static_cast<uint16_t>
    - static_cast<uint8_t>
    - brpc::RedisClusterChannel::ExtractHashtag
    - std::string::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t RedisClusterChannel::HashSlot(const std::string& key)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1014,1
    - Dst: find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1018,1
    - Dst: substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1022,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 1
    argNames:
    - ' key'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1023
      start: 1013
    functionDepth: 0
    functionLinenumber: 1013
    functionLinenumberEnd: 1023
    functionName: brpc::RedisClusterChannel::ExtractHashtag
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - substr
    - find
    linkageType: ''
    returnType: std::string
    signature: std::string RedisClusterChannel::ExtractHashtag(const std::string&
      key)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: RedirectInfo*::endpoint::clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1030,1
    - Dst: error_text::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1032,1
    - Dst: SplitByWhitespace
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1036,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1037,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1050,1
    - Dst: brpc::RedisClusterChannel::ParseRedisNodeAddress
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1054,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1059,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - ' result'
    - redirect
    argTypes:
    - SingleCommandResult
    - RedirectInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1062
      start: 1025
    functionDepth: 2
    functionLinenumber: 1025
    functionLinenumberEnd: 1062
    functionName: brpc::RedisClusterChannel::ParseRedirectReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - static_cast<int>
    - std::vector::size
    - SplitByWhitespace
    - error_text::empty
    - brpc::RedisClusterChannel::ParseRedisNodeAddress
    - RedirectInfo*::endpoint::clear
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ParseRedirectReply(const SingleCommandResult&
      result,\n                                             RedirectInfo* redirect)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: RedisRequest*::Clear
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1066,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1067,1
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1071,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1072,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1073,1
    - Dst: RedisRequest*::AddCommandByComponents
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1075,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1075,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' args'
    - request
    argTypes:
    - std::vector<std::string>
    - RedisRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1076
      start: 1064
    functionDepth: 0
    functionLinenumber: 1064
    functionLinenumberEnd: 1076
    functionName: brpc::RedisClusterChannel::BuildRedisRequest
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - RedisRequest*::AddCommandByComponents
    - empty
    - std::vector::size
    - RedisRequest*::Clear
    - size
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::BuildRedisRequest(const std::vector<std::string>&
      args,\n                                            RedisRequest* request)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1081,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1081,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - value
    argTypes:
    - butil::IOBuf*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1082
      start: 1078
    functionDepth: 1
    functionLinenumber: 1078
    functionLinenumberEnd: 1082
    functionName: brpc::RedisClusterChannel::AppendIntegerReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - std::ostringstream::str
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::AppendIntegerReply(butil::IOBuf* buf, int64_t
      value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1086,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1087,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1088,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - ' value'
    argTypes:
    - butil::IOBuf*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1089
      start: 1084
    functionDepth: 1
    functionLinenumber: 1084
    functionLinenumberEnd: 1089
    functionName: brpc::RedisClusterChannel::AppendStatusReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::push_back
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::AppendStatusReply(butil::IOBuf* buf,\n                                            const
      std::string& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::push_back
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1093,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1094,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1095,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - buf
    - ' value'
    argTypes:
    - butil::IOBuf*
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1096
      start: 1091
    functionDepth: 1
    functionLinenumber: 1091
    functionLinenumberEnd: 1096
    functionName: brpc::RedisClusterChannel::AppendErrorReply
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 10
    functionsReached:
    - butil::IOBuf*::push_back
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void RedisClusterChannel::AppendErrorReply(butil::IOBuf* buf,\n                                           const
      std::string& value)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1101,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1101,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - buf
    - size
    argTypes:
    - butil::IOBuf*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1102
      start: 1098
    functionDepth: 1
    functionLinenumber: 1098
    functionLinenumberEnd: 1102
    functionName: brpc::RedisClusterChannel::AppendArrayHeader
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached:
    - std::ostringstream::str
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: void RedisClusterChannel::AppendArrayHeader(butil::IOBuf* buf, size_t
      size)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1106,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1111,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1113,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1115,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1117,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1122,1
    - Dst: std::string::find
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1123,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1124,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1127,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1128,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1128,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1133,1
    - Dst: std::string::rfind
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1137,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1141,1
    - Dst: brpc::RedisClusterChannel::ParseInt
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1142,1
    - Dst: std::string::substr
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1142,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1145,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1151,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 35
    argCount: 2
    argNames:
    - ' token'
    - endpoint
    argTypes:
    - std::string
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1153
      start: 1104
    functionDepth: 1
    functionLinenumber: 1104
    functionLinenumberEnd: 1153
    functionName: brpc::RedisClusterChannel::ParseRedisNodeAddress
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 4
    functionsReached:
    - std::string::substr
    - std::string::find
    - std::string::empty
    - std::string::resize
    - empty
    - std::ostringstream::str
    - std::string::rfind
    - std::string::size
    - brpc::RedisClusterChannel::ParseInt
    linkageType: ''
    returnType: bool
    signature: "bool RedisClusterChannel::ParseRedisNodeAddress(const std::string&
      token,\n                                                std::string* endpoint)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1156,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1161,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1161,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1162,1
    - Dst: size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1162,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - ' s'
    - out
    argTypes:
    - std::string
    - int64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1167
      start: 1155
    functionDepth: 0
    functionLinenumber: 1155
    functionLinenumberEnd: 1167
    functionName: brpc::RedisClusterChannel::ParseInt
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 8
    functionsReached:
    - c_str
    - strtoll
    - empty
    - size
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::ParseInt(const std::string& s, int64_t* out)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 2
    argCount: 1
    argNames:
    - ' cmd'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1173
      start: 1169
    functionDepth: 0
    functionLinenumber: 1169
    functionLinenumberEnd: 1173
    functionName: brpc::RedisClusterChannel::IsNoKeyCommand
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool RedisClusterChannel::IsNoKeyCommand(const std::string& cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RedisClusterChannel*>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1176,1
    - Dst: RedisClusterChannel*::_stop_refresh::load
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1177,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1178,1
    - Dst: RedisClusterChannel*::_stop_refresh::load
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1180,1
    - Dst: std::min<int64_t>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1181,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1182,1
    - Dst: RedisClusterChannel*::_stop_refresh::load
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1185,1
    - Dst: RedisClusterChannel*::RefreshTopology
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1188,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 12
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1191
      start: 1175
    functionDepth: 2
    functionLinenumber: 1175
    functionLinenumberEnd: 1191
    functionName: brpc::RedisClusterChannel::RunPeriodicRefresh
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - RedisClusterChannel*::_stop_refresh::load
    - bthread_usleep
    - std::max
    - RedisClusterChannel*::RefreshTopology
    - static_cast<RedisClusterChannel*>
    - std::min<int64_t>
    linkageType: ''
    returnType: void
    signature: void * RedisClusterChannel::RunPeriodicRefresh(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::unique_ptr::self::CallMethodImpl
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1195,1
    - Dst: std::unique_ptr::done::Run
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1196,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1198
      start: 1193
    functionDepth: 0
    functionLinenumber: 1193
    functionLinenumberEnd: 1198
    functionName: brpc::RedisClusterChannel::RunAsyncCall
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::self::CallMethodImpl
    - std::unique_ptr::done::Run
    linkageType: ''
    returnType: void
    signature: void * RedisClusterChannel::RunAsyncCall(void* arg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::RedisClusterChannel::PickAnyEndpoint
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1202,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1203
      start: 1200
    functionDepth: 2
    functionLinenumber: 1200
    functionLinenumberEnd: 1203
    functionName: brpc::RedisClusterChannel::CheckHealth
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - brpc::RedisClusterChannel::PickAnyEndpoint
    linkageType: ''
    returnType: int
    signature: int RedisClusterChannel::CheckHealth()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1208,1
    - Dst: butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1211,1
    - Dst: empty
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1212,1
    - Dst: std::set::insert
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1213,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1216,1
    - Dst: std::set::size
      Src: /src/brpc/src/brpc/redis_cluster.cpp:1216,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1217
      start: 1205
    functionDepth: 0
    functionLinenumber: 1205
    functionLinenumberEnd: 1217
    functionName: brpc::RedisClusterChannel::Weight
    functionSourceFile: /src/brpc/src/brpc/redis_cluster.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<std::vector<std::string> >::ScopedPtr::size
    - static_cast<int>
    - std::set::insert
    - Read
    - empty
    - std::set::size
    linkageType: ''
    returnType: int
    signature: int RedisClusterChannel::Weight()
  - 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:
    - swap
    - brpc::HttpHeader::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
    - brpc::HttpHeader::Clear
    - std::make_pair
    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:
    - brpc::HttpHeader::GetHeader
    - std::string
    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:
    - seek
    - brpc::HttpHeader::IsSetCookie
    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:
    - clear
    - brpc::HttpHeader::IsContentType
    - brpc::HttpHeader::IsSetCookie
    - erase
    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:
    - GetOrAddHeader
    - reserve
    - AddHeader
    - assign
    - append
    - empty
    - data
    - brpc::HttpHeader::CanFoldedInLine
    - size
    - brpc::HttpHeader::HeaderValueDelimiter
    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:
    - IsSetCookie
    - IsContentType
    - seek
    - 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:
    - insert
    - IsSetCookie
    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:
    - swap
    - brpc::HttpHeader::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
    - brpc::HttpHeader::Clear
    - std::make_pair
    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:
    - brpc::HttpHeader::GetHeader
    - std::string
    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:
    - seek
    - brpc::HttpHeader::IsSetCookie
    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:
    - clear
    - brpc::HttpHeader::IsContentType
    - brpc::HttpHeader::IsSetCookie
    - erase
    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:
    - GetOrAddHeader
    - reserve
    - AddHeader
    - assign
    - append
    - empty
    - data
    - brpc::HttpHeader::CanFoldedInLine
    - size
    - brpc::HttpHeader::HeaderValueDelimiter
    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:
    - IsSetCookie
    - IsContentType
    - seek
    - 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:
    - insert
    - IsSetCookie
    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::FindCompressHandler
    - brpc::ParsePbFromIOBuf
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - CompressHandler*::Decompress
    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:
    - brpc::FindCompressHandler
    - CompressHandler*::Compress
    - SerializeToZeroCopyStream
    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::FindCompressHandler
    - brpc::ParsePbFromIOBuf
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - CompressHandler*::Decompress
    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:
    - brpc::FindCompressHandler
    - CompressHandler*::Compress
    - SerializeToZeroCopyStream
    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: 0
    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: 0
    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:78,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: 81
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 81
    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:85,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:96,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:100,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - brpc::policy::PackRpcHeader
    - CHECK
    - CHECK_EQ
    - 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:108,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:115,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:120,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:130,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:131,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:144,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:145,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 146
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::cutn
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - LOG
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:157,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:163,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:166,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:172,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:178,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:179,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:180,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:181,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:188,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:189,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:194,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:203,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:204,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:209,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:212,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:214,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 7
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    - checksum_attachment
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 148
    functionDepth: 3
    functionLinenumber: 148
    functionLinenumberEnd: 217
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - has_pb_single_repeated_to_array
    - SerializeToZeroCopyStream
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - serialize
    - has_pb_bytes_to_base64
    - AlwaysPrintPrimitiveFields
    - has_pb_jsonify_empty_array
    - GetDescriptor
    - ComputeDataChecksum
    - LOG
    - json2pb::ProtoMessageToJson
    - has_always_print_primitive_fields
    - SerializeTo
    - CompressHandler*::Compress
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    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,\n                         const butil::IOBuf* checksum_attachment)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:226,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:227,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:232,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:234,1
    - Dst: response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:240,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:243,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:245,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:250,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 219
    functionDepth: 4
    functionLinenumber: 219
    functionLinenumberEnd: 255
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ChecksumTypeToCStr
    - pbrpcframework::get_prototype_by_method_descriptor
    - SetFailed
    - butil::EnsureString
    - response_checksum_type
    - ContentTypeToCStr
    - serialized_data
    - response_compress_type
    - GetDescriptor
    - response_checksum_attachment
    - is_response_read_progressively
    - brpc::policy::SerializeRpcMessage
    - CompressTypeToCStr
    - InitializationErrorString
    - swap
    - response_attachment
    - IsInitialized
    - response_content_type
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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: std::shared_ptr<Span>::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:292,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:293,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:299,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:302,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:308,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:309,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    - span
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 314
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<BaiduProxyPBMessages*>
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - RpcPBMessages*::Request
    - std::shared_ptr<Span>::set_start_send_us
    - ConcurrencyRemover concurrency_remover
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - recycle_cntl
    - brpc::policy::Return
    - Controller*::CallAfterRpcResp
    - Server*::options
    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,\n                     std::shared_ptr<Span> span)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:78,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: 81
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 81
    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:85,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:96,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:100,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - brpc::policy::PackRpcHeader
    - CHECK
    - CHECK_EQ
    - 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:108,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:115,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:120,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:130,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:131,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:144,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:145,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 146
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::cutn
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - LOG
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:157,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:163,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:166,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:172,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:178,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:179,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:180,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:181,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:188,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:189,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:194,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:203,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:204,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:209,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:212,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:214,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 7
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    - checksum_attachment
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 148
    functionDepth: 3
    functionLinenumber: 148
    functionLinenumberEnd: 217
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 5
    functionsReached:
    - has_pb_single_repeated_to_array
    - SerializeToZeroCopyStream
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - serialize
    - has_pb_bytes_to_base64
    - AlwaysPrintPrimitiveFields
    - has_pb_jsonify_empty_array
    - GetDescriptor
    - ComputeDataChecksum
    - LOG
    - json2pb::ProtoMessageToJson
    - has_always_print_primitive_fields
    - SerializeTo
    - CompressHandler*::Compress
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    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,\n                         const butil::IOBuf* checksum_attachment)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:226,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:227,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:232,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:234,1
    - Dst: response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:240,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:243,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:245,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:250,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 219
    functionDepth: 4
    functionLinenumber: 219
    functionLinenumberEnd: 255
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ChecksumTypeToCStr
    - pbrpcframework::get_prototype_by_method_descriptor
    - SetFailed
    - butil::EnsureString
    - response_checksum_type
    - ContentTypeToCStr
    - serialized_data
    - response_compress_type
    - GetDescriptor
    - response_checksum_attachment
    - is_response_read_progressively
    - brpc::policy::SerializeRpcMessage
    - CompressTypeToCStr
    - InitializationErrorString
    - swap
    - response_attachment
    - IsInitialized
    - response_content_type
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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: std::shared_ptr<Span>::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:292,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:293,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:299,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:302,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:308,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:309,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    - span
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 314
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<BaiduProxyPBMessages*>
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - RpcPBMessages*::Request
    - std::shared_ptr<Span>::set_start_send_us
    - ConcurrencyRemover concurrency_remover
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - recycle_cntl
    - brpc::policy::Return
    - Controller*::CallAfterRpcResp
    - Server*::options
    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,\n                     std::shared_ptr<Span> span)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:487,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 490
    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:500,1
    - Dst: brpc::EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:507,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: 508
      start: 493
    functionDepth: 1
    functionLinenumber: 493
    functionLinenumberEnd: 508
    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:517,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:523,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:525,1
    - Dst: CompressHandler*::Decompress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:529,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:537,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:539,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:544,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:545,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:549,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:550,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:555,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:564,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:565,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:570,1
    - Dst: brpc::NonreflectableMessage::_InternalParse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:574,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:576,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 44
    argCount: 7
    argNames:
    - ' data'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - message
    - checksum_attachment
    argTypes:
    - butil::IOBuf
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - google::protobuf::Message*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 510
    functionDepth: 10
    functionLinenumber: 510
    functionLinenumberEnd: 579
    functionName: brpc::DeserializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::NonreflectableMessage::_InternalParse
    - deserialize
    - has_pb_single_repeated_to_array
    - CompressHandler*::Decompress
    - has_pb_bytes_to_base64
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoJsonToProtoMessage
    - brpc::FindCompressHandler
    - brpc::VerifyDataChecksum
    - DeserializeFrom
    - google::protobuf::Message*::GetDescriptor
    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,\n                           const butil::IOBuf* checksum_attachment)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:582,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:584,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:585,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:590,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:591,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:592,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:593,1
    - Dst: RpcMeta::request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:596,1
    - Dst: brpc::AskToBeSampled
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:598,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:600,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:600,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:601,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:601,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:602,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:602,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:603,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:604,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:604,1
    - Dst: SampledRequest*::meta::set_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:607,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:610,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:611,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:612,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:619,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:620,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:621,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:621,1
    - Dst: RpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:622,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:623,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:623,1
    - Dst: RpcRequestMeta::has_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:625,1
    - Dst: std::unique_ptr::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:626,1
    - Dst: RpcRequestMeta::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:626,1
    - Dst: RpcRequestMeta::has_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:628,1
    - Dst: std::unique_ptr::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:629,1
    - Dst: RpcRequestMeta::timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:629,1
    - Dst: std::unique_ptr::set_request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:631,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:631,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:632,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:632,1
    - Dst: std::unique_ptr::set_request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:633,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:633,1
    - Dst: std::unique_ptr::set_request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:634,1
    - Dst: RpcMeta::checksum_with_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:634,1
    - Dst: std::unique_ptr::set_rpc_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:635,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:635,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:636,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:636,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:637,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:639,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:640,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:641,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:642,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:644,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:647,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: RpcMeta::release_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:651,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:652,1
    - Dst: std::unique_ptr::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:653,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:658,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:659,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:659,1
    - Dst: brpc::IsTraceable
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:663,1
    - Dst: RpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:663,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:664,1
    - Dst: RpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: RpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: RpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:666,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:666,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:667,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:668,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:668,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:669,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:669,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:670,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:671,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:671,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:672,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:678,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:679,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:683,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:683,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:684,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:686,1
    - Dst: brpc::TooManyUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:690,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:691,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:696,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:696,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:697,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:698,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:699,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:701,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:708,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:709,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:710,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:711,1
    - Dst: ignore_eovercrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:711,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:712,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:713,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:713,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:716,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:717,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:719,1
    - Dst: auto::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:722,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:722,1
    - Dst: auto::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:723,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:723,1
    - Dst: std::unique_ptr::reset_sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:724,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:726,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:727,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:730,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:730,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:731,1
    - Dst: butil::class_name<BaiduMasterService>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:734,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:739,1
    - Dst: auto::meta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:739,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:742,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:743,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:744,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:744,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:745,1
    - Dst: DestroyingPtr::payload::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:746,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:747,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:752,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:753,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:755,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:757,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:758,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:761,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:764,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:765,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:767,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:768,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:769,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:771,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:771,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:774,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:774,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:775,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:775,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:778,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:779,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:781,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:783,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:783,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:787,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:791,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:791,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:792,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:795,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:795,1
    - Dst: const_cast<google::protobuf::MethodDescriptor*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:800,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:801,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:807,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:807,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:811,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:812,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:813,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:814,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:815,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:818,1
    - Dst: static_cast<CompressType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:820,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:820,1
    - Dst: static_cast<ChecksumType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:822,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:822,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:824,1
    - Dst: Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:824,1
    - Dst: std::unique_ptr::request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:829,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:830,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:831,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:833,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:835,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:839,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:839,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:840,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:841,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:842,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:845,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n
        \           const Server*, MethodStatus*, int64_t, std::shared_ptr<Span>>"
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:849,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:852,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:852,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:853,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:856,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:859,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:859,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:860,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:863,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:863,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:864,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:865,1
    - Dst: brpc::BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:867,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:868,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:868,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:869,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:870,1
    - Dst: brpc::EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:871,1
    - Dst: brpc::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:873,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:874,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:875,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:876,1
    - Dst: SendRpcResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:883,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:883,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:884,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:886,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 169
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 887
      start: 581
    functionDepth: 11
    functionLinenumber: 581
    functionLinenumberEnd: 887
    functionName: brpc::ProcessRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::request_attachment
    - SampledRequest*::meta::set_protocol_type
    - std::unique_ptr::set_request_id
    - std::shared_ptr::set_protocol
    - DestroyingPtr::meta::size
    - RpcMeta::has_attachment_size
    - butil::EnsureString
    - std::unique_ptr::reset_sampled_request
    - Server::ServiceProperty*::service::GetDescriptor
    - butil::class_name<BaiduMasterService>
    - SampledRequest*::meta::set_method_name
    - ControllerPrivateAccessor::set_method
    - RpcRequestMeta::timeout_ms
    - RpcMeta::authentication_data
    - Socket*::id
    - bthread_assign_data
    - brpc::AskToBeSampled
    - RpcMeta::correlation_id
    - butil::cpuwide_time_us
    - std::unique_ptr::set_rpc_received_us
    - DestroyingPtr::payload::empty
    - RpcMeta::release_stream_settings
    - SampledRequest*::meta::set_attachment_size
    - static_cast<CompressType>
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - DestroyingPtr::ReleaseSocket
    - ignore_eovercrowded
    - RpcRequestMeta::span_id
    - "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n            const
      Server*, MethodStatus*, int64_t, std::shared_ptr<Span>>"
    - std::unique_ptr::set_request_content_type
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - Get
    - RpcRequestMeta::method_name
    - static_cast<ChecksumType>
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - RpcMeta::user_fields
    - RpcPBMessages*::Request
    - serialized_data
    - brpc::DeserializeRpcMessage
    - SampledRequest::SampledRequest
    - brpc::ParsePbFromIOBuf
    - std::shared_ptr::set_start_callback_us
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - ControllerPrivateAccessor::set_remote_stream_settings
    - std::shared_ptr::set_log_id
    - RpcMeta::attachment_size
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - Socket*::description
    - std::unique_ptr::request_checksum_attachment
    - DestroyingPtr::payload::cutn
    - BadMethodRequest::set_service_name
    - brpc::ContentTypeToCStr
    - Server*::AcceptRequest
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - RpcRequestMeta::service_name
    - brpc::TooManyUserCode
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - DestroyingPtr::payload::size
    - auto::meta::method_name
    - DestroyingPtr::received_us
    - brpc::IsTraceable
    - static_cast<int>
    - std::unique_ptr::set_log_id
    - const_cast<google::protobuf::MethodDescriptor*>
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - RpcRequestMeta::trace_id
    - brpc::BeginRunningUserCode
    - SampledRequest*::meta::set_authentication_data
    - auto::meta::set_method_name
    - SocketUniquePtr::get
    - SendRpcResponse
    - RpcMeta::has_stream_settings
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - brpc::EndRunningCallMethodInPool
    - RpcMeta::compress_type
    - pbrpcframework::get_prototype_by_method_descriptor
    - std::unique_ptr::set_request_checksum_type
    - RpcMeta::checksum_type
    - std::shared_ptr::set_start_parse_us
    - butil::IOBuf::IOBuf
    - std::unique_ptr::set_timeout_ms
    - brpc::EndRunningUserCodeInPlace
    - RpcRequestMeta::request_id
    - RpcRequestMeta::log_id
    - SampledRequest*::submit
    - Server::MethodProperty*::service::GetDescriptor
    - auto::meta::set_service_name
    - RpcRequestMeta::parent_span_id
    - brpc::Span::CreateServerSpan
    - std::unique_ptr::release
    - LOG
    - RpcRequestMeta::has_trace_id
    - RpcMeta::request
    - RpcRequestMeta::has_request_id
    - std::unique_ptr::SetFailed
    - std::shared_ptr::set_request_size
    - RpcPBMessages*::Response
    - RpcRequestMeta::has_log_id
    - Server::MethodProperty*::service::CallMethod
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Controller::Controller
    - std::unique_ptr::request_user_fields
    - Socket*::SetFailed
    - Server::MethodProperty*::method::full_name
    - ControllerPrivateAccessor::set_checksum_value
    - DestroyingPtr::base_real_us
    - brpc::CompressTypeToCStr
    - butil::IOBuf::clear
    - std::unique_ptr::set_request_checksum_attachment
    - ServerPrivateAccessor::acceptor
    - RpcMeta::checksum_value
    - TestRpcPBMessageFactory::Get
    - ServerPrivateAccessor::FindServicePropertyByName
    - Socket*::auth_context
    - RpcMeta::content_type
    - RpcRequestMeta::has_timeout_ms
    - brpc::ChecksumTypeToCStr
    - SampledRequest*::meta::set_service_name
    - RpcMeta::checksum_with_attachment
    - google::protobuf::MethodDescriptor*::full_name
    - Socket*::user
    - butil::StringPiece::find
    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:891,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:892,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:892,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:893,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:896,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:897,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:900,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:905,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:905,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:906,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:907,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:913,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:913,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:914,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:915,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:916,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:917,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:918,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:919,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:921,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:922,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:925,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:926,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 930
      start: 889
    functionDepth: 2
    functionLinenumber: 889
    functionLinenumberEnd: 930
    functionName: brpc::VerifyRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::mutable_auth_context
    - LOG
    - MostCommonMessage*::socket
    - Server*::options
    - Authenticator*::VerifyCredential
    - std::string::empty
    - MostCommonMessage*::arg
    - Authenticator*::GetUnauthorizedErrorText
    - brpc::ParsePbFromIOBuf
    - RpcMeta::authentication_data
    - static_cast<const Server*>
    - RpcMeta::correlation_id
    - PLOG_IF
    - static_cast<const MostCommonMessage*>
    - SerializeRpcHeaderAndMeta
    - RpcMeta::set_correlation_id
    - RpcMeta::mutable_response
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    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:933,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:936,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:937,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:941,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:941,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:944,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:944,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:946,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:948,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:949,1
    - Dst: SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:951,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:951,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:952,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:953,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:954,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:954,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:962,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:963,1
    - Dst: StreamSettings::StreamSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:963,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:966,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:968,1
    - Dst: Controller*::set_rpc_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:972,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:972,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:973,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:974,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:974,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:975,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:975,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:977,1
    - Dst: RpcMeta::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:979,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:980,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:982,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:984,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:984,1
    - Dst: RpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:985,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:989,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:990,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:992,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:993,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:994,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:996,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:999,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1000,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1002,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1005,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1006,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1007,1
    - Dst: Controller*::set_response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1008,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1009,1
    - Dst: Controller*::set_response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1010,1
    - Dst: Controller*::set_response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1011,1
    - Dst: RpcMeta::checksum_with_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1011,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1012,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1012,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1013,1
    - Dst: Controller*::response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1018,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1019,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1020,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1020,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1021,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1021,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1023,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1025,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1027,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1031,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1031,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1032,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1033,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1034,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1040,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1041,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 59
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 932
    functionDepth: 11
    functionLinenumber: 932
    functionLinenumberEnd: 1042
    functionName: brpc::ProcessRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Controller*::response_user_fields
    - RpcMeta::has_attachment_size
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - RpcResponseMeta::error_text
    - Controller*::response_checksum_attachment
    - DestroyingPtr::payload::length
    - Controller*::response_attachment
    - RpcMeta::stream_settings
    - StreamSettings::StreamSettings
    - LOG_IF
    - DestroyingPtr::payload::size
    - RpcMeta::user_fields
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - SendStreamRst
    - serialized_data
    - auto::set_response_size
    - auto::set_start_parse_us
    - brpc::DeserializeRpcMessage
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - brpc::ParsePbFromIOBuf
    - Controller*::ErrorCode
    - Controller*::set_response_checksum_type
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::set_checksum_value
    - RpcMeta::correlation_id
    - brpc::policy::SendStreamRst
    - ControllerPrivateAccessor::set_remote_stream_settings
    - butil::cpuwide_time_us
    - brpc::CompressTypeToCStr
    - RpcMeta::has_stream_settings
    - RpcMeta::attachment_size
    - RpcMeta::compress_type
    - auto::set_received_us
    - RpcMeta::checksum_value
    - RpcResponseMeta::error_code
    - DestroyingPtr::payload::cutn
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - RpcMeta::content_type
    - Controller*::set_rpc_received_us
    - RpcMeta::checksum_type
    - brpc::ChecksumTypeToCStr
    - Controller*::set_response_content_type
    - brpc::size
    - brpc::ContentTypeToCStr
    - RpcMeta::checksum_with_attachment
    - bthread_id_lock
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - RpcMeta::response
    - Controller*::set_response_checksum_attachment
    linkageType: ''
    returnType: void
    signature: void ProcessRpcResponse(InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1048,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1050,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1050,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1051,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1051,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1054,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1055,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1056,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1059,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1060,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1061,1
    - Dst: Controller*::request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1063,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1069,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1070,1
    - Dst: SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1073,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1075,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1079,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1079,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1080,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1080,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1081,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1083
      start: 1044
    functionDepth: 3
    functionLinenumber: 1044
    functionLinenumberEnd: 1083
    functionName: brpc::SerializeRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - Controller*::request_checksum_attachment
    - Controller*::request_checksum_type
    - Controller*::is_response_read_progressively
    - Controller*::request_attachment
    - serialized_data
    - butil::EnsureString
    - SerializeRpcMessage
    - brpc::ChecksumTypeToCStr
    - Controller*::request_compress_type
    - brpc::CompressTypeToCStr
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    - Controller*::request_content_type
    - brpc::ContentTypeToCStr
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcRequest(butil::IOBuf* request_buf, Controller* cntl,\n
      \                        const google::protobuf::Message* request)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1093,1
    - Dst: RpcMeta::mutable_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1094,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1095,1
    - Dst: RpcMeta::mutable_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1099,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1101,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1102,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1103,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1104,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1104,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1105,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1105,1
    - Dst: RpcMeta::set_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1106,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1106,1
    - Dst: RpcMeta::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1107,1
    - Dst: ControllerPrivateAccessor::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1107,1
    - Dst: Controller*::request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1108,1
    - Dst: RpcMeta::set_checksum_with_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1109,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1111,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1113,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1113,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1113,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1114,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1114,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1114,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: has_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1116,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1116,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1117,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1119,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1121,1
    - Dst: RpcRequestMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1122,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1122,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1124,1
    - Dst: RpcRequestMeta*::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1125,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1125,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1127,1
    - Dst: ControllerPrivateAccessor::request_streams
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1128,1
    - Dst: StreamIds::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1129,1
    - Dst: RpcMeta::mutable_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1130,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1133,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1134,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1137,1
    - Dst: Stream*::FillSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1138,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1139,1
    - Dst: StreamSettings*::mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1140,1
    - Dst: Controller*::has_request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1144,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1144,1
    - Dst: RpcMeta::mutable_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1146,1
    - Dst: insert
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1147,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1147,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1148,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1152,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1153,1
    - Dst: RpcMeta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1155,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1159,1
    - Dst: RpcRequestMeta*::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1160,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1160,1
    - Dst: RpcMeta::set_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1163,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1163,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1165,1
    - Dst: RpcRequestMeta*::set_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1166,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1166,1
    - Dst: RpcRequestMeta*::set_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1167,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1167,1
    - Dst: RpcRequestMeta*::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1168,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1168,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1171,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1172,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1174,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1174,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 59
    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: 1176
      start: 1085
    functionDepth: 3
    functionLinenumber: 1085
    functionLinenumberEnd: 1176
    functionName: brpc::PackRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - insert
    - Controller*::request_checksum_attachment
    - RpcRequestMeta*::set_request_id
    - ControllerPrivateAccessor::span
    - RpcMeta::mutable_stream_settings
    - RpcRequestMeta*::set_timeout_ms
    - auto::parent_span_id
    - Controller*::has_request_user_fields
    - ControllerPrivateAccessor::checksum_value
    - service_name
    - ControllerPrivateAccessor::request_streams
    - StreamIds::empty
    - method_name
    - Controller*::request_compress_type
    - length
    - StreamSettings*::mutable_extra_stream_ids
    - Controller*::request_content_type
    - RpcRequestMeta*::set_method_name
    - Controller*::request_checksum_type
    - Authenticator*::GenerateCredential
    - google::protobuf::MethodDescriptor*::service
    - RpcMeta::set_content_type
    - RpcRequestMeta*::set_parent_span_id
    - RpcMeta::mutable_authentication_data
    - StreamIds::size
    - RpcMeta::set_compress_type
    - Controller*::request_attachment
    - brpc::SetTrackMeAddress
    - auto::span_id
    - RpcMeta::set_attachment_size
    - RpcRequestMeta*::set_service_name
    - Controller*::log_id
    - Controller*::SetFailed
    - RpcMeta::set_checksum_type
    - RpcMeta::set_checksum_value
    - compress_type
    - ControllerPrivateAccessor::real_timeout_ms
    - SerializeRpcHeaderAndMeta
    - google::protobuf::MethodDescriptor*::name
    - Controller*::request_user_fields
    - RpcMeta::set_checksum_with_attachment
    - RpcMeta::mutable_request
    - RpcRequestMeta*::set_log_id
    - RpcMeta::set_correlation_id
    - SocketUniquePtr::conn
    - RpcMeta::mutable_user_fields
    - auto::trace_id
    - RpcRequestMeta*::set_span_id
    - butil::IOBuf*::append
    - Stream*::FillSettings
    - has_compress_type
    - Controller*::has_log_id
    - RpcRequestMeta*::set_trace_id
    - Controller*::request_id
    - Controller*::sampled_request
    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: 1191
      start: 1178
    functionDepth: 0
    functionLinenumber: 1178
    functionLinenumberEnd: 1191
    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:78,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: 81
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 81
    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:85,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:96,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:100,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - brpc::policy::PackRpcHeader
    - CHECK
    - CHECK_EQ
    - 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:108,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:115,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:120,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:130,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:131,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:144,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:145,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 146
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::cutn
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - LOG
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:157,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:163,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:166,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:172,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:178,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:179,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:180,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:181,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:188,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:189,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:194,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:203,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:204,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:209,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:212,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:214,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 7
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    - checksum_attachment
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 148
    functionDepth: 3
    functionLinenumber: 148
    functionLinenumberEnd: 217
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - has_pb_single_repeated_to_array
    - SerializeToZeroCopyStream
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - serialize
    - has_pb_bytes_to_base64
    - AlwaysPrintPrimitiveFields
    - has_pb_jsonify_empty_array
    - GetDescriptor
    - ComputeDataChecksum
    - LOG
    - json2pb::ProtoMessageToJson
    - has_always_print_primitive_fields
    - SerializeTo
    - CompressHandler*::Compress
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    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,\n                         const butil::IOBuf* checksum_attachment)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:226,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:227,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:232,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:234,1
    - Dst: response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:240,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:243,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:245,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:250,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 219
    functionDepth: 4
    functionLinenumber: 219
    functionLinenumberEnd: 255
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ChecksumTypeToCStr
    - pbrpcframework::get_prototype_by_method_descriptor
    - SetFailed
    - butil::EnsureString
    - response_checksum_type
    - ContentTypeToCStr
    - serialized_data
    - response_compress_type
    - GetDescriptor
    - response_checksum_attachment
    - is_response_read_progressively
    - brpc::policy::SerializeRpcMessage
    - CompressTypeToCStr
    - InitializationErrorString
    - swap
    - response_attachment
    - IsInitialized
    - response_content_type
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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: std::shared_ptr<Span>::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:292,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:293,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:299,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:302,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:308,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:309,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    - span
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 314
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<BaiduProxyPBMessages*>
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - RpcPBMessages*::Request
    - std::shared_ptr<Span>::set_start_send_us
    - ConcurrencyRemover concurrency_remover
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - recycle_cntl
    - brpc::policy::Return
    - Controller*::CallAfterRpcResp
    - Server*::options
    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,\n                     std::shared_ptr<Span> span)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:78,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: 81
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 81
    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:85,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:88,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:91,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:92,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:93,1
    - Dst: brpc::policy::PackRpcHeader
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:96,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:97,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:100,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:101,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - RpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 103
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 103
    functionName: brpc::policy::SerializeRpcHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - brpc::policy::PackRpcHeader
    - CHECK
    - CHECK_EQ
    - 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:108,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:112,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:115,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:120,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:128,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:129,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:130,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:131,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:132,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:135,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:139,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:141,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:142,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:144,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:145,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 146
    functionName: brpc::policy::ParseRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::cutn
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - LOG
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:157,1
    - Dst: FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:159,1
    - Dst: CompressHandler*::Compress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:163,1
    - Dst: ComputeDataChecksum
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:166,1
    - Dst: SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:172,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:174,1
    - Dst: json2pb::Pb2JsonOptions::Pb2JsonOptions
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:177,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:178,1
    - Dst: has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:179,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:180,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:181,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:188,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:189,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:194,1
    - Dst: AlwaysPrintPrimitiveFields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:199,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:203,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:204,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:209,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:212,1
    - Dst: serialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:214,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 46
    argCount: 7
    argNames:
    - ' message'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - buf
    - checksum_attachment
    argTypes:
    - google::protobuf::Message
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - butil::IOBuf*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 217
      start: 148
    functionDepth: 3
    functionLinenumber: 148
    functionLinenumberEnd: 217
    functionName: brpc::policy::SerializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - has_pb_single_repeated_to_array
    - SerializeToZeroCopyStream
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - FindCompressHandler
    - serialize
    - has_pb_bytes_to_base64
    - AlwaysPrintPrimitiveFields
    - has_pb_jsonify_empty_array
    - GetDescriptor
    - ComputeDataChecksum
    - LOG
    - json2pb::ProtoMessageToJson
    - has_always_print_primitive_fields
    - SerializeTo
    - CompressHandler*::Compress
    - json2pb::ProtoMessageToProtoJson
    - brpc::URI::Print
    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,\n                         const butil::IOBuf* checksum_attachment)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:221,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:222,1
    - Dst: IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:226,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:227,1
    - Dst: InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:228,1
    - Dst: response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:232,1
    - Dst: response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:233,1
    - Dst: response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:234,1
    - Dst: response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:236,1
    - Dst: is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:239,1
    - Dst: response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:240,1
    - Dst: brpc::policy::SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:243,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:245,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:248,1
    - Dst: ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:250,1
    - Dst: ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 3
    argNames:
    - ' res'
    - ' cntl'
    - ' buf'
    argTypes:
    - google::protobuf::Message
    - Controller
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 219
    functionDepth: 4
    functionLinenumber: 219
    functionLinenumberEnd: 255
    functionName: brpc::policy::SerializeResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ChecksumTypeToCStr
    - pbrpcframework::get_prototype_by_method_descriptor
    - SetFailed
    - butil::EnsureString
    - response_checksum_type
    - ContentTypeToCStr
    - serialized_data
    - response_compress_type
    - GetDescriptor
    - response_checksum_attachment
    - is_response_read_progressively
    - brpc::policy::SerializeRpcMessage
    - CompressTypeToCStr
    - InitializationErrorString
    - swap
    - response_attachment
    - IsInitialized
    - response_content_type
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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:260,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 261
      start: 259
    functionDepth: 0
    functionLinenumber: 259
    functionLinenumberEnd: 261
    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:264,1
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:265,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - messages
    argTypes:
    - BaiduProxyPBMessages*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 266
      start: 263
    functionDepth: 0
    functionLinenumber: 263
    functionLinenumberEnd: 266
    functionName: brpc::policy::Return
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::return_object
    - BaiduProxyPBMessages*::Clear
    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:269,1
    - Dst: brpc::policy::Clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:270,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 271
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 271
    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: 273
      start: 273
    functionDepth: 0
    functionLinenumber: 273
    functionLinenumberEnd: 273
    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: 274
      start: 274
    functionDepth: 0
    functionLinenumber: 274
    functionLinenumberEnd: 274
    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: std::shared_ptr<Span>::set_start_send_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:288,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:290,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:292,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:293,1
    - Dst: ConcurrencyRemover concurrency_remover
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:299,1
    - Dst: recycle_cntl
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:302,1
    - Dst: Controller*::CallAfterRpcResp
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:308,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:309,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: brpc::policy::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:310,1
    - Dst: TestRpcPBMessageFactory::Return
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    - Dst: static_cast<BaiduProxyPBMessages*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:312,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 7
    argNames:
    - correlation_id
    - cntl
    - messages
    - server
    - method_status
    - received_us
    - span
    argTypes:
    - int64_t
    - Controller*
    - RpcPBMessages*
    - Server*
    - MethodStatus*
    - int64_t
    - std::shared_ptr<Span>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 314
      start: 282
    functionDepth: 1
    functionLinenumber: 282
    functionLinenumberEnd: 314
    functionName: brpc::policy::SendRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<BaiduProxyPBMessages*>
    - ControllerPrivateAccessor::get_sending_socket
    - RpcPBMessages*::Response
    - RpcPBMessages*::Request
    - std::shared_ptr<Span>::set_start_send_us
    - ConcurrencyRemover concurrency_remover
    - butil::cpuwide_time_us
    - TestRpcPBMessageFactory::Return
    - recycle_cntl
    - brpc::policy::Return
    - Controller*::CallAfterRpcResp
    - Server*::options
    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,\n                     std::shared_ptr<Span> span)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CallMethodInBackupThreadArgs*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:487,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 485
    functionDepth: 0
    functionLinenumber: 485
    functionLinenumberEnd: 490
    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:500,1
    - Dst: brpc::EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:507,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: 508
      start: 493
    functionDepth: 1
    functionLinenumber: 493
    functionLinenumberEnd: 508
    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:517,1
    - Dst: DeserializeFrom
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:523,1
    - Dst: brpc::FindCompressHandler
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:525,1
    - Dst: CompressHandler*::Decompress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:529,1
    - Dst: google::protobuf::Message*::ParseFromZeroCopyStream
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:537,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:539,1
    - Dst: has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:544,1
    - Dst: has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:545,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:547,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:549,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:550,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:555,1
    - Dst: json2pb::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:562,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:564,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:565,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:570,1
    - Dst: brpc::NonreflectableMessage::_InternalParse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:574,1
    - Dst: deserialize
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:576,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 44
    argCount: 7
    argNames:
    - ' data'
    - ' cntl'
    - content_type
    - compress_type
    - checksum_type
    - message
    - checksum_attachment
    argTypes:
    - butil::IOBuf
    - Controller
    - ContentType
    - CompressType
    - ChecksumType
    - google::protobuf::Message*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 510
    functionDepth: 10
    functionLinenumber: 510
    functionLinenumberEnd: 579
    functionName: brpc::DeserializeRpcMessage
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::NonreflectableMessage::_InternalParse
    - deserialize
    - has_pb_single_repeated_to_array
    - CompressHandler*::Decompress
    - has_pb_bytes_to_base64
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - json2pb::JsonToProtoMessage
    - json2pb::ProtoJsonToProtoMessage
    - brpc::FindCompressHandler
    - brpc::VerifyDataChecksum
    - DeserializeFrom
    - google::protobuf::Message*::GetDescriptor
    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,\n                           const butil::IOBuf* checksum_attachment)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:582,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:584,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:585,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:586,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:590,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:591,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:592,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:593,1
    - Dst: RpcMeta::request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:596,1
    - Dst: brpc::AskToBeSampled
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:598,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:600,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:600,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:601,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:601,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:602,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:602,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:603,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:604,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:604,1
    - Dst: SampledRequest*::meta::set_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:605,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:607,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:610,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:611,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:612,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:619,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:620,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:621,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:621,1
    - Dst: RpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:622,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:623,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:623,1
    - Dst: RpcRequestMeta::has_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:625,1
    - Dst: std::unique_ptr::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:626,1
    - Dst: RpcRequestMeta::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:626,1
    - Dst: RpcRequestMeta::has_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:628,1
    - Dst: std::unique_ptr::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:629,1
    - Dst: RpcRequestMeta::timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:629,1
    - Dst: std::unique_ptr::set_request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:631,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:631,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:632,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:632,1
    - Dst: std::unique_ptr::set_request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:633,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:633,1
    - Dst: std::unique_ptr::set_request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:634,1
    - Dst: RpcMeta::checksum_with_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:634,1
    - Dst: std::unique_ptr::set_rpc_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:635,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:635,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:636,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:636,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:637,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:639,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:640,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:641,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:642,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:644,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:647,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: RpcMeta::release_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:648,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:651,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:652,1
    - Dst: std::unique_ptr::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:653,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:658,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:659,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:659,1
    - Dst: brpc::IsTraceable
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:663,1
    - Dst: RpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:663,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:664,1
    - Dst: RpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: RpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:665,1
    - Dst: RpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:666,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:666,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:667,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:668,1
    - Dst: RpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:668,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:669,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:669,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:670,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:671,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:671,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:672,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:673,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:678,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:679,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:683,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:683,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:684,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:686,1
    - Dst: brpc::TooManyUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:690,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:691,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:696,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:696,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:697,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:698,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:699,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:701,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:708,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:709,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:710,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:711,1
    - Dst: ignore_eovercrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:711,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:712,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:713,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:713,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:716,1
    - Dst: SampledRequest::SampledRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:717,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:719,1
    - Dst: auto::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:722,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:722,1
    - Dst: auto::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:723,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:723,1
    - Dst: std::unique_ptr::reset_sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:724,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:726,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:727,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:730,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:730,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:731,1
    - Dst: butil::class_name<BaiduMasterService>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:734,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:739,1
    - Dst: auto::meta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:739,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:742,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:743,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:744,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:744,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:745,1
    - Dst: DestroyingPtr::payload::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:746,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:747,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:752,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:753,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:755,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:757,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:758,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:761,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:764,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:765,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:767,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:768,1
    - Dst: RpcRequestMeta::method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:769,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:771,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:771,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:774,1
    - Dst: RpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:774,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:775,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:775,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:778,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:779,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:781,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:783,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:783,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:787,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:791,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:791,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:792,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:795,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:795,1
    - Dst: const_cast<google::protobuf::MethodDescriptor*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:800,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:801,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:804,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:807,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:807,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:811,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:812,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:813,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:814,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:815,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:818,1
    - Dst: static_cast<CompressType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:820,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:820,1
    - Dst: static_cast<ChecksumType>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:822,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:822,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:824,1
    - Dst: Get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:824,1
    - Dst: std::unique_ptr::request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:829,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:830,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:831,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:833,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:835,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:839,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:839,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:840,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:841,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:842,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:845,1
    - Dst: "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n
        \           const Server*, MethodStatus*, int64_t, std::shared_ptr<Span>>"
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:849,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:852,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:852,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:853,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:856,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:859,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:859,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:860,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:863,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:863,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:864,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:865,1
    - Dst: brpc::BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:867,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:868,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:868,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:869,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:870,1
    - Dst: brpc::EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:871,1
    - Dst: brpc::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:873,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:874,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:875,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:876,1
    - Dst: SendRpcResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:883,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:883,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:884,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:886,1
    CyclomaticComplexity: 58
    EdgeCount: 58
    ICount: 169
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 887
      start: 581
    functionDepth: 11
    functionLinenumber: 581
    functionLinenumberEnd: 887
    functionName: brpc::ProcessRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::request_attachment
    - SampledRequest*::meta::set_protocol_type
    - std::unique_ptr::set_request_id
    - std::shared_ptr::set_protocol
    - DestroyingPtr::meta::size
    - RpcMeta::has_attachment_size
    - butil::EnsureString
    - std::unique_ptr::reset_sampled_request
    - Server::ServiceProperty*::service::GetDescriptor
    - butil::class_name<BaiduMasterService>
    - SampledRequest*::meta::set_method_name
    - ControllerPrivateAccessor::set_method
    - RpcRequestMeta::timeout_ms
    - RpcMeta::authentication_data
    - Socket*::id
    - bthread_assign_data
    - brpc::AskToBeSampled
    - RpcMeta::correlation_id
    - butil::cpuwide_time_us
    - std::unique_ptr::set_rpc_received_us
    - DestroyingPtr::payload::empty
    - RpcMeta::release_stream_settings
    - SampledRequest*::meta::set_attachment_size
    - static_cast<CompressType>
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - DestroyingPtr::ReleaseSocket
    - ignore_eovercrowded
    - RpcRequestMeta::span_id
    - "::brpc::NewCallback<\n            int64_t, Controller*, RpcPBMessages*,\n            const
      Server*, MethodStatus*, int64_t, std::shared_ptr<Span>>"
    - std::unique_ptr::set_request_content_type
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - Get
    - RpcRequestMeta::method_name
    - static_cast<ChecksumType>
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - RpcMeta::user_fields
    - RpcPBMessages*::Request
    - serialized_data
    - brpc::DeserializeRpcMessage
    - SampledRequest::SampledRequest
    - brpc::ParsePbFromIOBuf
    - std::shared_ptr::set_start_callback_us
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - ControllerPrivateAccessor::set_remote_stream_settings
    - std::shared_ptr::set_log_id
    - RpcMeta::attachment_size
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - Socket*::description
    - std::unique_ptr::request_checksum_attachment
    - DestroyingPtr::payload::cutn
    - BadMethodRequest::set_service_name
    - brpc::ContentTypeToCStr
    - Server*::AcceptRequest
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - RpcRequestMeta::service_name
    - brpc::TooManyUserCode
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - DestroyingPtr::payload::size
    - auto::meta::method_name
    - DestroyingPtr::received_us
    - brpc::IsTraceable
    - static_cast<int>
    - std::unique_ptr::set_log_id
    - const_cast<google::protobuf::MethodDescriptor*>
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - RpcRequestMeta::trace_id
    - brpc::BeginRunningUserCode
    - SampledRequest*::meta::set_authentication_data
    - auto::meta::set_method_name
    - SocketUniquePtr::get
    - SendRpcResponse
    - RpcMeta::has_stream_settings
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - brpc::EndRunningCallMethodInPool
    - RpcMeta::compress_type
    - pbrpcframework::get_prototype_by_method_descriptor
    - std::unique_ptr::set_request_checksum_type
    - RpcMeta::checksum_type
    - std::shared_ptr::set_start_parse_us
    - butil::IOBuf::IOBuf
    - std::unique_ptr::set_timeout_ms
    - brpc::EndRunningUserCodeInPlace
    - RpcRequestMeta::request_id
    - RpcRequestMeta::log_id
    - SampledRequest*::submit
    - Server::MethodProperty*::service::GetDescriptor
    - auto::meta::set_service_name
    - RpcRequestMeta::parent_span_id
    - brpc::Span::CreateServerSpan
    - std::unique_ptr::release
    - LOG
    - RpcRequestMeta::has_trace_id
    - RpcMeta::request
    - RpcRequestMeta::has_request_id
    - std::unique_ptr::SetFailed
    - std::shared_ptr::set_request_size
    - RpcPBMessages*::Response
    - RpcRequestMeta::has_log_id
    - Server::MethodProperty*::service::CallMethod
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Controller::Controller
    - std::unique_ptr::request_user_fields
    - Socket*::SetFailed
    - Server::MethodProperty*::method::full_name
    - ControllerPrivateAccessor::set_checksum_value
    - DestroyingPtr::base_real_us
    - brpc::CompressTypeToCStr
    - butil::IOBuf::clear
    - std::unique_ptr::set_request_checksum_attachment
    - ServerPrivateAccessor::acceptor
    - RpcMeta::checksum_value
    - TestRpcPBMessageFactory::Get
    - ServerPrivateAccessor::FindServicePropertyByName
    - Socket*::auth_context
    - RpcMeta::content_type
    - RpcRequestMeta::has_timeout_ms
    - brpc::ChecksumTypeToCStr
    - SampledRequest*::meta::set_service_name
    - RpcMeta::checksum_with_attachment
    - google::protobuf::MethodDescriptor*::full_name
    - Socket*::user
    - butil::StringPiece::find
    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:891,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:892,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:892,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:893,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:896,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:897,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:900,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:905,1
    - Dst: RpcMeta::authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:905,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:906,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:907,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:913,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:913,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:914,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:915,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:916,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:917,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:918,1
    - Dst: RpcMeta::mutable_response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:919,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:921,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:922,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:925,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:926,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 930
      start: 889
    functionDepth: 2
    functionLinenumber: 889
    functionLinenumberEnd: 930
    functionName: brpc::VerifyRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Socket*::mutable_auth_context
    - LOG
    - MostCommonMessage*::socket
    - Server*::options
    - Authenticator*::VerifyCredential
    - std::string::empty
    - MostCommonMessage*::arg
    - Authenticator*::GetUnauthorizedErrorText
    - brpc::ParsePbFromIOBuf
    - RpcMeta::authentication_data
    - static_cast<const Server*>
    - RpcMeta::correlation_id
    - PLOG_IF
    - static_cast<const MostCommonMessage*>
    - SerializeRpcHeaderAndMeta
    - RpcMeta::set_correlation_id
    - RpcMeta::mutable_response
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    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:933,1
    - Dst: brpc::ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:936,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:937,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:941,1
    - Dst: RpcMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:941,1
    - Dst: RpcMeta::has_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:944,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:944,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:946,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:948,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:949,1
    - Dst: SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:951,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:951,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:952,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:953,1
    - Dst: brpc::policy::SendStreamRst
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:954,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:954,1
    - Dst: ControllerPrivateAccessor::set_remote_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:962,1
    - Dst: RpcMeta::stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:963,1
    - Dst: StreamSettings::StreamSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:963,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:966,1
    - Dst: RpcMeta::user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:968,1
    - Dst: Controller*::set_rpc_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:972,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:972,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:973,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:974,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:974,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:975,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:975,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:976,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:977,1
    - Dst: RpcMeta::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:979,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:980,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:982,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:984,1
    - Dst: RpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:984,1
    - Dst: RpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:985,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:989,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:990,1
    - Dst: RpcMeta::has_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:992,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:993,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:994,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:996,1
    - Dst: RpcMeta::attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:999,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1000,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1002,1
    - Dst: RpcMeta::content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1005,1
    - Dst: RpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1006,1
    - Dst: RpcMeta::checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1007,1
    - Dst: Controller*::set_response_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1008,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1009,1
    - Dst: Controller*::set_response_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1010,1
    - Dst: Controller*::set_response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1011,1
    - Dst: RpcMeta::checksum_with_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1011,1
    - Dst: ControllerPrivateAccessor::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1012,1
    - Dst: RpcMeta::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1012,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1013,1
    - Dst: Controller*::response_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1018,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1019,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1020,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1020,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1021,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1021,1
    - Dst: brpc::DeserializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1023,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1025,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1027,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1031,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1031,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1032,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1033,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1034,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1040,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1041,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 59
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1042
      start: 932
    functionDepth: 11
    functionLinenumber: 932
    functionLinenumberEnd: 1042
    functionName: brpc::ProcessRpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Controller*::response_user_fields
    - RpcMeta::has_attachment_size
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - RpcResponseMeta::error_text
    - Controller*::response_checksum_attachment
    - DestroyingPtr::payload::length
    - Controller*::response_attachment
    - RpcMeta::stream_settings
    - StreamSettings::StreamSettings
    - LOG_IF
    - DestroyingPtr::payload::size
    - RpcMeta::user_fields
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - SendStreamRst
    - serialized_data
    - auto::set_response_size
    - auto::set_start_parse_us
    - brpc::DeserializeRpcMessage
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - brpc::ParsePbFromIOBuf
    - Controller*::ErrorCode
    - Controller*::set_response_checksum_type
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - ControllerPrivateAccessor::set_checksum_value
    - RpcMeta::correlation_id
    - brpc::policy::SendStreamRst
    - ControllerPrivateAccessor::set_remote_stream_settings
    - butil::cpuwide_time_us
    - brpc::CompressTypeToCStr
    - RpcMeta::has_stream_settings
    - RpcMeta::attachment_size
    - RpcMeta::compress_type
    - auto::set_received_us
    - RpcMeta::checksum_value
    - RpcResponseMeta::error_code
    - DestroyingPtr::payload::cutn
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - RpcMeta::content_type
    - Controller*::set_rpc_received_us
    - RpcMeta::checksum_type
    - brpc::ChecksumTypeToCStr
    - Controller*::set_response_content_type
    - brpc::size
    - brpc::ContentTypeToCStr
    - RpcMeta::checksum_with_attachment
    - bthread_id_lock
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - RpcMeta::response
    - Controller*::set_response_checksum_attachment
    linkageType: ''
    returnType: void
    signature: void ProcessRpcResponse(InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1048,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1050,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1050,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1051,1
    - Dst: serialized_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1051,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1054,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1055,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1056,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1059,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1060,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1061,1
    - Dst: Controller*::request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1063,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1069,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1070,1
    - Dst: SerializeRpcMessage
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1073,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1075,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1079,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1079,1
    - Dst: brpc::ContentTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1080,1
    - Dst: brpc::CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1080,1
    - Dst: brpc::ChecksumTypeToCStr
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1081,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 3
    argNames:
    - request_buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1083
      start: 1044
    functionDepth: 3
    functionLinenumber: 1044
    functionLinenumberEnd: 1083
    functionName: brpc::SerializeRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::Message*::IsInitialized
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - Controller*::request_checksum_attachment
    - Controller*::request_checksum_type
    - Controller*::is_response_read_progressively
    - Controller*::request_attachment
    - serialized_data
    - butil::EnsureString
    - SerializeRpcMessage
    - brpc::ChecksumTypeToCStr
    - Controller*::request_compress_type
    - brpc::CompressTypeToCStr
    - google::protobuf::Message*::InitializationErrorString
    - Controller*::SetFailed
    - Controller*::request_content_type
    - brpc::ContentTypeToCStr
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void SerializeRpcRequest(butil::IOBuf* request_buf, Controller* cntl,\n
      \                        const google::protobuf::Message* request)"
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1093,1
    - Dst: RpcMeta::mutable_authentication_data
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1094,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1095,1
    - Dst: RpcMeta::mutable_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1099,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1101,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1102,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1103,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1104,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1104,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1105,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1105,1
    - Dst: RpcMeta::set_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1106,1
    - Dst: Controller*::request_checksum_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1106,1
    - Dst: RpcMeta::set_checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1107,1
    - Dst: ControllerPrivateAccessor::checksum_value
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1107,1
    - Dst: Controller*::request_checksum_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1108,1
    - Dst: RpcMeta::set_checksum_with_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1109,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1111,1
    - Dst: RpcRequestMeta*::set_service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1113,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1113,1
    - Dst: service_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1113,1
    - Dst: RpcRequestMeta*::set_method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1114,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1114,1
    - Dst: method_name
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1114,1
    - Dst: RpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: has_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1115,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1116,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1116,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1117,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1119,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1121,1
    - Dst: RpcRequestMeta*::set_log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1122,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1122,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1124,1
    - Dst: RpcRequestMeta*::set_request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1125,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1125,1
    - Dst: RpcMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1127,1
    - Dst: ControllerPrivateAccessor::request_streams
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1128,1
    - Dst: StreamIds::empty
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1129,1
    - Dst: RpcMeta::mutable_stream_settings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1130,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1133,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1134,1
    - Dst: SocketUniquePtr::conn
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1137,1
    - Dst: Stream*::FillSettings
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1138,1
    - Dst: StreamIds::size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1139,1
    - Dst: StreamSettings*::mutable_extra_stream_ids
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1140,1
    - Dst: Controller*::has_request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1144,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1144,1
    - Dst: RpcMeta::mutable_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1146,1
    - Dst: insert
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1147,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1147,1
    - Dst: Controller*::request_user_fields
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1148,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1152,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1153,1
    - Dst: RpcMeta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1155,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1159,1
    - Dst: RpcRequestMeta*::set_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1160,1
    - Dst: ControllerPrivateAccessor::real_timeout_ms
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1160,1
    - Dst: RpcMeta::set_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1163,1
    - Dst: Controller*::request_content_type
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1163,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1165,1
    - Dst: RpcRequestMeta*::set_trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1166,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1166,1
    - Dst: RpcRequestMeta*::set_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1167,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1167,1
    - Dst: RpcRequestMeta*::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1168,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1168,1
    - Dst: SerializeRpcHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1171,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1172,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1174,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp:1174,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 59
    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: 1176
      start: 1085
    functionDepth: 3
    functionLinenumber: 1085
    functionLinenumberEnd: 1176
    functionName: brpc::PackRpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/baidu_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - insert
    - Controller*::request_checksum_attachment
    - RpcRequestMeta*::set_request_id
    - ControllerPrivateAccessor::span
    - RpcMeta::mutable_stream_settings
    - RpcRequestMeta*::set_timeout_ms
    - auto::parent_span_id
    - Controller*::has_request_user_fields
    - ControllerPrivateAccessor::checksum_value
    - service_name
    - ControllerPrivateAccessor::request_streams
    - StreamIds::empty
    - method_name
    - Controller*::request_compress_type
    - length
    - StreamSettings*::mutable_extra_stream_ids
    - Controller*::request_content_type
    - RpcRequestMeta*::set_method_name
    - Controller*::request_checksum_type
    - Authenticator*::GenerateCredential
    - google::protobuf::MethodDescriptor*::service
    - RpcMeta::set_content_type
    - RpcRequestMeta*::set_parent_span_id
    - RpcMeta::mutable_authentication_data
    - StreamIds::size
    - RpcMeta::set_compress_type
    - Controller*::request_attachment
    - brpc::SetTrackMeAddress
    - auto::span_id
    - RpcMeta::set_attachment_size
    - RpcRequestMeta*::set_service_name
    - Controller*::log_id
    - Controller*::SetFailed
    - RpcMeta::set_checksum_type
    - RpcMeta::set_checksum_value
    - compress_type
    - ControllerPrivateAccessor::real_timeout_ms
    - SerializeRpcHeaderAndMeta
    - google::protobuf::MethodDescriptor*::name
    - Controller*::request_user_fields
    - RpcMeta::set_checksum_with_attachment
    - RpcMeta::mutable_request
    - RpcRequestMeta*::set_log_id
    - RpcMeta::set_correlation_id
    - SocketUniquePtr::conn
    - RpcMeta::mutable_user_fields
    - auto::trace_id
    - RpcRequestMeta*::set_span_id
    - butil::IOBuf*::append
    - Stream*::FillSettings
    - has_compress_type
    - Controller*::has_log_id
    - RpcRequestMeta*::set_trace_id
    - Controller*::request_id
    - Controller*::sampled_request
    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: 1191
      start: 1178
    functionDepth: 0
    functionLinenumber: 1178
    functionLinenumberEnd: 1191
    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
    - DH_get0_key
    - brpc::policy::DHWrapper::do_initialize
    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:
    - CHECK_LE
    - CHECK_GT
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    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:
    - DH_compute_key
    - BN_free
    - LOG
    - BN_bin2bn
    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:
    - DH_new
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - DH_generate_key
    - LOG
    - BN_dec2bn
    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
    - DH_get0_key
    - brpc::policy::DHWrapper::do_initialize
    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:
    - CHECK_LE
    - CHECK_GT
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    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:
    - DH_compute_key
    - BN_free
    - LOG
    - BN_bin2bn
    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:
    - DH_new
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - DH_generate_key
    - LOG
    - BN_dec2bn
    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
    - DH_get0_key
    - brpc::policy::DHWrapper::do_initialize
    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:
    - CHECK_LE
    - CHECK_GT
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    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:
    - DH_compute_key
    - BN_free
    - LOG
    - BN_bin2bn
    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:
    - DH_new
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - DH_generate_key
    - LOG
    - BN_dec2bn
    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
    - DH_get0_key
    - brpc::policy::DHWrapper::do_initialize
    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:
    - CHECK_LE
    - CHECK_GT
    - BN_num_bytes
    - BN_bn2bin
    - DH_get0_key
    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:
    - DH_compute_key
    - BN_free
    - LOG
    - BN_bin2bn
    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:
    - DH_new
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - DH_generate_key
    - LOG
    - BN_dec2bn
    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::cpuwide_time_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:
    - load
    - compare_exchange_strong
    - VLOG
    - butil::cpuwide_time_us
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    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::cpuwide_time_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:
    - load
    - compare_exchange_strong
    - VLOG
    - butil::cpuwide_time_us
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    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::cpuwide_time_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:
    - load
    - compare_exchange_strong
    - VLOG
    - butil::cpuwide_time_us
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    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::cpuwide_time_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:
    - load
    - compare_exchange_strong
    - VLOG
    - butil::cpuwide_time_us
    - brpc::policy::TimeoutConcurrencyLimiter::AddSample
    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*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - butil::IOBuf*::length
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 12
    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:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:125,1
    - Dst: Stream*::OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:128,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:132,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 133
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - RPC_VLOG_IF
    - LOG
    - ParsePbFromIOBuf
    - StreamFrameMeta::source_stream_id
    - StreamFrameMeta::frame_type
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf::clear
    - MakeMessage
    - BAIDU_UNLIKELY
    - memcmp
    - Stream*::OnReceived
    - StreamFrameMeta::has_source_stream_id
    - SocketUniquePtr::conn
    - StreamFrameMeta::stream_id
    - butil::IOBuf::IOBuf
    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:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 137
    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:140,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:142,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:145,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 149
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - butil::IOBuf::IOBuf
    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:153,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:155,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:156,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:157,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:158,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,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: 163
      start: 151
    functionDepth: 2
    functionLinenumber: 151
    functionLinenumberEnd: 163
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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:168,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:170,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:171,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:172,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:174,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:175,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:182,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: 183
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 183
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_has_continuation
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - butil::IOBuf*::length
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 12
    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:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:125,1
    - Dst: Stream*::OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:128,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:132,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 133
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - RPC_VLOG_IF
    - LOG
    - ParsePbFromIOBuf
    - StreamFrameMeta::source_stream_id
    - StreamFrameMeta::frame_type
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf::clear
    - MakeMessage
    - BAIDU_UNLIKELY
    - memcmp
    - Stream*::OnReceived
    - StreamFrameMeta::has_source_stream_id
    - SocketUniquePtr::conn
    - StreamFrameMeta::stream_id
    - butil::IOBuf::IOBuf
    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:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 137
    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:140,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:142,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:145,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 149
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - butil::IOBuf::IOBuf
    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:153,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:155,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:156,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:157,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:158,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,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: 163
      start: 151
    functionDepth: 2
    functionLinenumber: 151
    functionLinenumberEnd: 163
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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:168,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:170,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:171,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:172,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:174,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:175,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:182,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: 183
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 183
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_has_continuation
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - butil::IOBuf*::length
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 12
    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:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:125,1
    - Dst: Stream*::OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:128,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:132,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 133
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - RPC_VLOG_IF
    - LOG
    - ParsePbFromIOBuf
    - StreamFrameMeta::source_stream_id
    - StreamFrameMeta::frame_type
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf::clear
    - MakeMessage
    - BAIDU_UNLIKELY
    - memcmp
    - Stream*::OnReceived
    - StreamFrameMeta::has_source_stream_id
    - SocketUniquePtr::conn
    - StreamFrameMeta::stream_id
    - butil::IOBuf::IOBuf
    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:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 137
    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:140,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:142,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:145,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 149
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - butil::IOBuf::IOBuf
    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:153,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:155,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:156,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:157,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:158,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,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: 163
      start: 151
    functionDepth: 2
    functionLinenumber: 151
    functionLinenumberEnd: 163
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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:168,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:170,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:171,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:172,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:174,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:175,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:182,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: 183
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 183
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_has_continuation
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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*::append
    - StreamFrameMeta::SerializeToZeroCopyStream
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - CHECK
    - butil::IOBuf*::length
    - GetProtobufByteSize
    linkageType: ''
    returnType: void
    signature: "void PackStreamMessage(butil::IOBuf* out,\n                       const
      StreamFrameMeta &fm,\n                       const butil::IOBuf *data)"
  - BBCount: 12
    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:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:125,1
    - Dst: Stream*::OnReceived
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:128,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:132,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 48
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 61
    functionDepth: 3
    functionLinenumber: 61
    functionLinenumberEnd: 133
    functionName: brpc::policy::ParseStreamingMessage
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - RPC_VLOG_IF
    - LOG
    - ParsePbFromIOBuf
    - StreamFrameMeta::source_stream_id
    - StreamFrameMeta::frame_type
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - brpc::policy::SendStreamRst
    - brpc::SetTrackMeAddress
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf::clear
    - MakeMessage
    - BAIDU_UNLIKELY
    - memcmp
    - Stream*::OnReceived
    - StreamFrameMeta::has_source_stream_id
    - SocketUniquePtr::conn
    - StreamFrameMeta::stream_id
    - butil::IOBuf::IOBuf
    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:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 137
    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:140,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:142,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:143,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:144,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:145,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 2
    argNames:
    - sock
    - remote_stream_id
    argTypes:
    - Socket*
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 139
    functionDepth: 2
    functionLinenumber: 139
    functionLinenumberEnd: 149
    functionName: brpc::policy::SendStreamRst
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - butil::IOBuf::IOBuf
    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:153,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:155,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:156,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:157,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:158,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:159,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:162,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: 163
      start: 151
    functionDepth: 2
    functionLinenumber: 151
    functionLinenumberEnd: 163
    functionName: brpc::policy::SendStreamClose
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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:168,1
    - Dst: StreamFrameMeta::set_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:170,1
    - Dst: StreamFrameMeta::set_source_stream_id
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:171,1
    - Dst: StreamFrameMeta::set_frame_type
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:172,1
    - Dst: StreamFrameMeta::set_has_continuation
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:173,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:174,1
    - Dst: brpc::policy::PackStreamMessage
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:175,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp:182,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: 183
      start: 165
    functionDepth: 2
    functionLinenumber: 165
    functionLinenumberEnd: 183
    functionName: brpc::policy::SendStreamData
    functionSourceFile: /src/brpc/src/brpc/policy/streaming_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::PackStreamMessage
    - Socket*::Write
    - StreamFrameMeta::set_stream_id
    - CHECK
    - StreamFrameMeta::set_frame_type
    - StreamFrameMeta::set_has_continuation
    - StreamFrameMeta::set_source_stream_id
    - butil::IOBuf::IOBuf
    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:
    - std::atomic_thread_fence
    - fetch_sub
    - brpc::policy::H2UnsentRequest::Destroy
    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:
    - std::atomic_thread_fence
    - fetch_sub
    - brpc::policy::H2UnsentRequest::Destroy
    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:
    - std::atomic_thread_fence
    - fetch_sub
    - brpc::policy::H2UnsentRequest::Destroy
    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:
    - std::atomic_thread_fence
    - fetch_sub
    - brpc::policy::H2UnsentRequest::Destroy
    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:
    - std::string::c_str
    - FileNamingService::GetServers
    - LOG
    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:
    - Controller::http_request
    - butil::string_appendf
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - empty
    - auto::value::Size
    - Controller::Failed
    - RapidjsonValueToString
    - append
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - MemberEnd
    - GetString
    - IsString
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - LOG_EVERY_N
    - FindMember
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - GetUint
    - auto::value::IsString
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - std::vector<ServerNode>*::push_back
    - Init
    - auto::value::IsUint
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::value::IsArray
    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:
    - bthread_usleep
    - bthread_stopped
    - PLOG
    - std::vector::clear
    - std::max
    - NamingServiceActions*::ResetServers
    - CHECK
    - brpc::policy::ConsulNamingService::GetServers
    - bthread_self
    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:
    - std::string::c_str
    - FileNamingService::GetServers
    - LOG
    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:
    - Controller::http_request
    - butil::string_appendf
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - empty
    - auto::value::Size
    - Controller::Failed
    - RapidjsonValueToString
    - append
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - MemberEnd
    - GetString
    - IsString
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - LOG_EVERY_N
    - FindMember
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - GetUint
    - auto::value::IsString
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - std::vector<ServerNode>*::push_back
    - Init
    - auto::value::IsUint
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::value::IsArray
    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:
    - bthread_usleep
    - bthread_stopped
    - PLOG
    - std::vector::clear
    - std::max
    - NamingServiceActions*::ResetServers
    - CHECK
    - brpc::policy::ConsulNamingService::GetServers
    - bthread_self
    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:
    - std::string::c_str
    - FileNamingService::GetServers
    - LOG
    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:
    - Controller::http_request
    - butil::string_appendf
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - empty
    - auto::value::Size
    - Controller::Failed
    - RapidjsonValueToString
    - append
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - MemberEnd
    - GetString
    - IsString
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - LOG_EVERY_N
    - FindMember
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - GetUint
    - auto::value::IsString
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - std::vector<ServerNode>*::push_back
    - Init
    - auto::value::IsUint
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::value::IsArray
    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:
    - bthread_usleep
    - bthread_stopped
    - PLOG
    - std::vector::clear
    - std::max
    - NamingServiceActions*::ResetServers
    - CHECK
    - brpc::policy::ConsulNamingService::GetServers
    - bthread_self
    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:
    - std::string::c_str
    - FileNamingService::GetServers
    - LOG
    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:
    - Controller::http_request
    - butil::string_appendf
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - empty
    - auto::value::Size
    - Controller::Failed
    - RapidjsonValueToString
    - append
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Empty
    - MemberEnd
    - GetString
    - IsString
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - LOG_EVERY_N
    - FindMember
    - brpc::policy::ConsulNamingService::DegradeToOtherServiceIfNeeded
    - Controller::response_attachment
    - GetUint
    - auto::value::IsString
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsArray
    - std::vector<ServerNode>*::push_back
    - Init
    - auto::value::IsUint
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::value::IsArray
    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:
    - bthread_usleep
    - bthread_stopped
    - PLOG
    - std::vector::clear
    - std::max
    - NamingServiceActions*::ResetServers
    - CHECK
    - brpc::policy::ConsulNamingService::GetServers
    - bthread_self
    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:
    - butil::IOBuf*::cutn
    - ntohl
    - butil::Status::OK
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - 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:
    - memcpy
    - htonl
    - size
    - data
    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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - malloc
    - what
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftMessageBase*::Read
    - LOG
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    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:
    - malloc
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    - copy_to
    - size
    - ::apache::thrift::TApplicationException*::read
    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: auto::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: auto::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: auto::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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - ControllerPrivateAccessor::span
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - WriteThriftMessageBegin
    - empty
    - Server*::options
    - ErrorCode
    - auto::getBuffer
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - SetFailed
    - raw_instance
    - body::size
    - auto::set_response_size
    - has_log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - IsCloseConnection
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - Socket*::SetFailed
    - log_id
    - Failed
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Socket*::description
    - ::apache::thrift::TApplicationException::write
    - ThriftMessageBeginSize
    - auto::set_sent_us
    - body::movable
    - ServerPrivateAccessor
    - Socket*::Write
    - thrift_method_name
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - auto::set_start_send_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ErrorText
    - htonl
    - butil::IOBuf::IOBuf
    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: 1
    functionsReached:
    - butil::IOBuf*::cutn
    - ntohl
    - MakeParseError
    - butil::IOBuf*::copy_to
    - 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:
    - what
    - ThriftClosure*::ResumeRunning
    - ThriftService*::ProcessThriftFramedRequest
    - Controller*::SetFailed
    - c_str
    - ThriftClosure*::SuspendRunning
    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: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - ClosureGuard::release
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - MethodStatus*::MaxConcurrency
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - butil::Status::ok
    - Server*::thread_local_options
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - Socket*::id
    - ThriftClosure::ThriftClosure
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - std::shared_ptr::set_remote_side
    - InputMessageBase*::received_us
    - MethodStatus*::OnRequested
    - ThriftFramedMessage*::body::size
    - ServerPrivateAccessor::acceptor
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - butil::Status::error_cstr
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:594,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:601,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:608,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:614,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:627,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:629,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:632,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:636,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:644,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 646
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - ::apache::thrift::TApplicationException::what
    - butil::Status::ok
    - brpc::policy::ReadThriftException
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - std::string::c_str
    - DestroyingPtr::base_real_us
    - brpc::policy::ReadThriftStruct
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - auto::set_received_us
    - berror
    - butil::Status::error_cstr
    - ThriftFramedMessage*::raw_instance
    - bthread_id_lock
    - Controller*::SetFailed
    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:649,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 655
    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:660,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:665,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:670,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:676,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:683,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:685,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:688,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:692,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:694,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:701,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:706,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:708,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:713,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      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: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:719,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      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: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:725,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:732,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,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: 735
      start: 657
    functionDepth: 2
    functionLinenumber: 657
    functionLinenumberEnd: 735
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::response
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - empty
    - google::protobuf::Message*::GetDescriptor
    - auto::getBuffer
    - memcpy
    - data
    - brpc::policy::ThriftMessageBeginSize
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Controller*::thrift_method_name
    - brpc::policy::WriteThriftMessageBegin
    - ThriftFramedMessage*::body::size
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - Controller*::SetFailed
    - htonl
    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:746,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:752,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:754,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:761,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: 762
      start: 737
    functionDepth: 1
    functionLinenumber: 737
    functionLinenumberEnd: 762
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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:
    - butil::IOBuf*::cutn
    - ntohl
    - butil::Status::OK
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - 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:
    - memcpy
    - htonl
    - size
    - data
    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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - malloc
    - what
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftMessageBase*::Read
    - LOG
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    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:
    - malloc
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    - copy_to
    - size
    - ::apache::thrift::TApplicationException*::read
    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: auto::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: auto::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: auto::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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - ControllerPrivateAccessor::span
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - WriteThriftMessageBegin
    - empty
    - Server*::options
    - ErrorCode
    - auto::getBuffer
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - SetFailed
    - raw_instance
    - body::size
    - auto::set_response_size
    - has_log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - IsCloseConnection
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - Socket*::SetFailed
    - log_id
    - Failed
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Socket*::description
    - ::apache::thrift::TApplicationException::write
    - ThriftMessageBeginSize
    - auto::set_sent_us
    - body::movable
    - ServerPrivateAccessor
    - Socket*::Write
    - thrift_method_name
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - auto::set_start_send_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ErrorText
    - htonl
    - butil::IOBuf::IOBuf
    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: 1
    functionsReached:
    - butil::IOBuf*::cutn
    - ntohl
    - MakeParseError
    - butil::IOBuf*::copy_to
    - 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:
    - what
    - ThriftClosure*::ResumeRunning
    - ThriftService*::ProcessThriftFramedRequest
    - Controller*::SetFailed
    - c_str
    - ThriftClosure*::SuspendRunning
    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: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - ClosureGuard::release
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - MethodStatus*::MaxConcurrency
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - butil::Status::ok
    - Server*::thread_local_options
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - Socket*::id
    - ThriftClosure::ThriftClosure
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - std::shared_ptr::set_remote_side
    - InputMessageBase*::received_us
    - MethodStatus*::OnRequested
    - ThriftFramedMessage*::body::size
    - ServerPrivateAccessor::acceptor
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - butil::Status::error_cstr
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:594,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:601,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:608,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:614,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:627,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:629,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:632,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:636,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:644,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 646
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - ::apache::thrift::TApplicationException::what
    - butil::Status::ok
    - brpc::policy::ReadThriftException
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - std::string::c_str
    - DestroyingPtr::base_real_us
    - brpc::policy::ReadThriftStruct
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - auto::set_received_us
    - berror
    - butil::Status::error_cstr
    - ThriftFramedMessage*::raw_instance
    - bthread_id_lock
    - Controller*::SetFailed
    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:649,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 655
    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:660,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:665,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:670,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:676,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:683,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:685,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:688,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:692,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:694,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:701,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:706,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:708,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:713,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      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: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:719,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      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: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:725,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:732,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,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: 735
      start: 657
    functionDepth: 2
    functionLinenumber: 657
    functionLinenumberEnd: 735
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::response
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - empty
    - google::protobuf::Message*::GetDescriptor
    - auto::getBuffer
    - memcpy
    - data
    - brpc::policy::ThriftMessageBeginSize
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Controller*::thrift_method_name
    - brpc::policy::WriteThriftMessageBegin
    - ThriftFramedMessage*::body::size
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - Controller*::SetFailed
    - htonl
    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:746,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:752,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:754,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:761,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: 762
      start: 737
    functionDepth: 1
    functionLinenumber: 737
    functionLinenumberEnd: 762
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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:
    - butil::IOBuf*::cutn
    - ntohl
    - butil::Status::OK
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - 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:
    - memcpy
    - htonl
    - size
    - data
    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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - malloc
    - what
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftMessageBase*::Read
    - LOG
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    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:
    - malloc
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    - copy_to
    - size
    - ::apache::thrift::TApplicationException*::read
    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: auto::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: auto::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: auto::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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - ControllerPrivateAccessor::span
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - WriteThriftMessageBegin
    - empty
    - Server*::options
    - ErrorCode
    - auto::getBuffer
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - SetFailed
    - raw_instance
    - body::size
    - auto::set_response_size
    - has_log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - IsCloseConnection
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - Socket*::SetFailed
    - log_id
    - Failed
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Socket*::description
    - ::apache::thrift::TApplicationException::write
    - ThriftMessageBeginSize
    - auto::set_sent_us
    - body::movable
    - ServerPrivateAccessor
    - Socket*::Write
    - thrift_method_name
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - auto::set_start_send_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ErrorText
    - htonl
    - butil::IOBuf::IOBuf
    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: 1
    functionsReached:
    - butil::IOBuf*::cutn
    - ntohl
    - MakeParseError
    - butil::IOBuf*::copy_to
    - 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:
    - what
    - ThriftClosure*::ResumeRunning
    - ThriftService*::ProcessThriftFramedRequest
    - Controller*::SetFailed
    - c_str
    - ThriftClosure*::SuspendRunning
    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: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - ClosureGuard::release
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - MethodStatus*::MaxConcurrency
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - butil::Status::ok
    - Server*::thread_local_options
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - Socket*::id
    - ThriftClosure::ThriftClosure
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - std::shared_ptr::set_remote_side
    - InputMessageBase*::received_us
    - MethodStatus*::OnRequested
    - ThriftFramedMessage*::body::size
    - ServerPrivateAccessor::acceptor
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - butil::Status::error_cstr
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:594,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:601,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:608,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:614,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:627,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:629,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:632,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:636,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:644,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 646
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - ::apache::thrift::TApplicationException::what
    - butil::Status::ok
    - brpc::policy::ReadThriftException
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - std::string::c_str
    - DestroyingPtr::base_real_us
    - brpc::policy::ReadThriftStruct
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - auto::set_received_us
    - berror
    - butil::Status::error_cstr
    - ThriftFramedMessage*::raw_instance
    - bthread_id_lock
    - Controller*::SetFailed
    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:649,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 655
    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:660,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:665,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:670,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:676,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:683,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:685,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:688,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:692,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:694,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:701,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:706,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:708,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:713,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      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: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:719,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      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: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:725,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:732,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,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: 735
      start: 657
    functionDepth: 2
    functionLinenumber: 657
    functionLinenumberEnd: 735
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::response
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - empty
    - google::protobuf::Message*::GetDescriptor
    - auto::getBuffer
    - memcpy
    - data
    - brpc::policy::ThriftMessageBeginSize
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Controller*::thrift_method_name
    - brpc::policy::WriteThriftMessageBegin
    - ThriftFramedMessage*::body::size
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - Controller*::SetFailed
    - htonl
    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:746,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:752,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:754,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:761,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: 762
      start: 737
    functionDepth: 1
    functionLinenumber: 737
    functionLinenumberEnd: 762
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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:
    - butil::IOBuf*::cutn
    - ntohl
    - butil::Status::OK
    - butil::IOBuf*::copy_to
    - std::string*::assign
    - 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:
    - memcpy
    - htonl
    - size
    - data
    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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldEnd
    - malloc
    - what
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::skip
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftMessageBase*::Read
    - LOG
    - copy_to
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readFieldBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readStructBegin
    - size
    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:
    - malloc
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::readMessageEnd
    - copy_to
    - size
    - ::apache::thrift::TApplicationException*::read
    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: auto::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: auto::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: auto::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:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - ControllerPrivateAccessor::span
    - server
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - WriteThriftMessageBegin
    - empty
    - Server*::options
    - ErrorCode
    - auto::getBuffer
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - SetFailed
    - raw_instance
    - body::size
    - auto::set_response_size
    - has_log_id
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - IsCloseConnection
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - Socket*::SetFailed
    - log_id
    - Failed
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Socket*::description
    - ::apache::thrift::TApplicationException::write
    - ThriftMessageBeginSize
    - auto::set_sent_us
    - body::movable
    - ServerPrivateAccessor
    - Socket*::Write
    - thrift_method_name
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - auto::set_start_send_us
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - ErrorText
    - htonl
    - butil::IOBuf::IOBuf
    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: 1
    functionsReached:
    - butil::IOBuf*::cutn
    - ntohl
    - MakeParseError
    - butil::IOBuf*::copy_to
    - 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:
    - what
    - ThriftClosure*::ResumeRunning
    - ThriftService*::ProcessThriftFramedRequest
    - Controller*::SetFailed
    - c_str
    - ThriftClosure*::SuspendRunning
    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: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:522,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:524,1
    - Dst: std::shared_ptr::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: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:526,1
    - Dst: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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: std::shared_ptr::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:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - ClosureGuard::release
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - MethodStatus*::MaxConcurrency
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - butil::Status::ok
    - Server*::thread_local_options
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - Socket*::id
    - ThriftClosure::ThriftClosure
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - std::shared_ptr::set_remote_side
    - InputMessageBase*::received_us
    - MethodStatus*::OnRequested
    - ThriftFramedMessage*::body::size
    - ServerPrivateAccessor::acceptor
    - brpc::policy::ProcessThriftFramedRequestNoExcept
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - butil::Status::error_cstr
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:588,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:589,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:590,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:591,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:594,1
    - Dst: brpc::policy::ReadThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:601,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:602,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: butil::Status::error_cstr
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:603,1
    - Dst: brpc::policy::ReadThriftException
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:608,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: ::apache::thrift::TApplicationException::what
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:610,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:614,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:618,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:620,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:627,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:629,1
    - Dst: brpc::policy::ReadThriftStruct
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:630,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:632,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:636,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:644,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:645,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 43
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 572
    functionDepth: 3
    functionLinenumber: 572
    functionLinenumberEnd: 646
    functionName: brpc::policy::ProcessThriftResponse
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - ::apache::thrift::TApplicationException::what
    - butil::Status::ok
    - brpc::policy::ReadThriftException
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - brpc::policy::ReadThriftMessageBegin
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - std::string::c_str
    - DestroyingPtr::base_real_us
    - brpc::policy::ReadThriftStruct
    - butil::cpuwide_time_us
    - Controller*::thrift_method_name
    - auto::set_received_us
    - berror
    - butil::Status::error_cstr
    - ThriftFramedMessage*::raw_instance
    - bthread_id_lock
    - Controller*::SetFailed
    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:649,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:650,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:651,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 655
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 655
    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:660,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:662,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:663,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:665,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:667,1
    - Dst: Controller*::thrift_method_name
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:670,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:674,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:676,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:677,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:683,1
    - Dst: THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:685,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:688,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:692,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:694,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:697,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:698,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:701,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:702,1
    - Dst: ThriftFramedMessage*::raw_instance
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:706,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:708,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:709,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:710,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:713,1
    - Dst: apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
      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: auto::getBuffer
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:719,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:721,1
    - Dst: butil::IOBuf*::append
      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: brpc::policy::ThriftMessageBeginSize
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:725,1
    - Dst: htonl
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: ThriftFramedMessage*::body::size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:729,1
    - Dst: brpc::policy::WriteThriftMessageBegin
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:730,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:732,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:733,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: 735
      start: 657
    functionDepth: 2
    functionLinenumber: 657
    functionLinenumberEnd: 735
    functionName: brpc::policy::SerializeThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructEnd
    - Controller*::response
    - THRIFT_STDCXX::make_shared<apache::thrift::transport::TMemoryBuffer>
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeMessageEnd
    - empty
    - google::protobuf::Message*::GetDescriptor
    - auto::getBuffer
    - memcpy
    - data
    - brpc::policy::ThriftMessageBeginSize
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldBegin
    - size
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeStructBegin
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldEnd
    - Controller*::thrift_method_name
    - brpc::policy::WriteThriftMessageBegin
    - ThriftFramedMessage*::body::size
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::getTransport
    - ThriftFramedMessage*::raw_instance
    - apache::thrift::protocol::TBinaryProtocolT<apache::thrift::transport::TMemoryBuffer>::writeFieldStop
    - Controller*::SetFailed
    - htonl
    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:746,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:747,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:752,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:754,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:755,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/thrift_protocol.cpp:761,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: 762
      start: 737
    functionDepth: 1
    functionLinenumber: 737
    functionLinenumberEnd: 762
    functionName: brpc::policy::PackThriftRequest
    functionSourceFile: /src/brpc/src/brpc/policy/thrift_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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:
    - begin
    - end
    - CHECK
    - IsCoprime
    - std::lower_bound
    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:
    - begin
    - end
    - CHECK
    - IsCoprime
    - std::lower_bound
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    - size
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    - size
    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
    - std::unordered_set::emplace
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - 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:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    - size
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    - size
    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
    - std::unordered_set::emplace
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - 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:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    - size
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    - size
    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
    - std::unordered_set::emplace
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - 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:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Add
    - size
    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:
    - brpc::policy::WeightedRoundRobinLoadBalancer::Remove
    - size
    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
    - std::unordered_set::emplace
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - brpc::policy::WeightedRoundRobinLoadBalancer::GetServerInNextStride
    - brpc::SetTrackMeAddress
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_map::at
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::empty
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - GetStride
    - 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:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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:91,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:96,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:98,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 109
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - LOG
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    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:113,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 2
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::GetUserAddressFromHeaderImpl
    - empty
    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: 162
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 162
    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: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::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:171,1
    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: 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: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    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:183,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:188,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:189,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:196,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:206,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:209,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:212,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:215,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:217,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:218,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 225
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::starts_with
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - butil::StringPiece::front
    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:231,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:242,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:243,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,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: 252
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 252
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - butil::IOBuf::pop_back
    - LOG
    - butil::IOBuf::IOBuf
    - butil::IOBuf::size
    - snprintf
    - butil::ToPrintableString
    - butil::my_ip_cstr
    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:257,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:259,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 262
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - butil::IOBuf*::swap
    - butil::IOBuf::append
    - butil::IOBuf::Movable
    - butil::IOBuf*::size
    - 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:265,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:274,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:276,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::size
    - butil::NetToHost32
    - butil::IOBuf*::empty
    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:285,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:290,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:292,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: 295
      start: 280
    functionDepth: 10
    functionLinenumber: 280
    functionLinenumberEnd: 295
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - std::string::c_str
    - butil::EnsureString
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    - google::protobuf::Message*::GetDescriptor
    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:300,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:301,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:302,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:303,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:304,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:311,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:313,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: 316
      start: 297
    functionDepth: 3
    functionLinenumber: 297
    functionLinenumberEnd: 316
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - GetDescriptor
    - Controller*::has_pb_jsonify_empty_array
    - json2pb::ProtoMessageToJson
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    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:325,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:327,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:329,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: 332
      start: 318
    functionDepth: 2
    functionLinenumber: 318
    functionLinenumberEnd: 332
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:338,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:338,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:343,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,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: 347
      start: 334
    functionDepth: 3
    functionLinenumber: 334
    functionLinenumberEnd: 347
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - AlwaysPrintPrimitiveFields
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToProtoJson
    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:350,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:354,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:356,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:357,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:369,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:370,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:376,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:386,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:388,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:402,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:404,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:406,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:410,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:423,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: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:438,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:454,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:455,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:456,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:464,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:471,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:475,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:476,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:490,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:491,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:496,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:501,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:503,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:512,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:523,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:524,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:532,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:538,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:553,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:555,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:562,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:563,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 349
    functionDepth: 11
    functionLinenumber: 349
    functionLinenumberEnd: 564
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PercentDecode
    - Socket*::read_will_be_progressive
    - butil::EnsureString
    - DestroyingPtr::get
    - Controller*::response
    - ControllerPrivateAccessor::span
    - std::min
    - LOG
    - std::string::append
    - brpc::policy::GzipDecompress
    - ParsePbFromIOBuf
    - empty
    - swap
    - Controller*::response_attachment
    - std::string::size
    - LOG_IF
    - brpc::policy::RemoveGrpcPrefix
    - ParsePbTextFromIOBuf
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::header
    - std::string*::data
    - std::string*::c_str
    - auto::set_response_size
    - auto::set_start_parse_us
    - CHECK
    - static_cast<int>
    - HttpHeader*::reason_phrase
    - DestroyingPtr::parsed_length
    - strcasecmp
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - strtol
    - TRACEPRINTF
    - DestroyingPtr::reset
    - auto::set_base_real_us
    - InputMessageBase*::base_real_us
    - Controller*::http_response
    - size
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::minor_version
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::Swap
    - butil::cpuwide_time_us
    - DestroyingPtr::read_body_progressively
    - append_to
    - Controller*::SetFailed
    - copy_to
    - InputMessageBase*::received_us
    - HttpHeader*::major_version
    - GrpcStatusToErrorCode
    - Socket*::correlation_id
    - auto::set_received_us
    - HttpHeader*::status_code
    - berror
    - static_cast<H2StreamContext*>
    - DestroyingPtr::body
    - GrpcStatusToString
    - bthread_id_lock
    - brpc::policy::ProtoJsonToProtoMessage
    - HttpHeader*::GetHeader
    - butil::string_printf
    - H2StreamContext*::correlation_id
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    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:569,1
    - Dst: Controller*::request_protocol
      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:573,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:579,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:581,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:587,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:592,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:596,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:604,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:616,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:617,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:623,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:627,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:628,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:632,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:633,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:637,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:639,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:646,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:647,1
    - Dst: uri
      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:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:652,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:659,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:664,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:669,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:675,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::log_id
      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:679,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:686,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:687,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: SetHeader
      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:699,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:700,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:710,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::reserve
      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: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:718,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: ControllerPrivateAccessor::span
      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: auto::trace_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: auto::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 566
    functionDepth: 4
    functionLinenumber: 566
    functionLinenumberEnd: 731
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - Controller*::request_protocol
    - butil::EnsureString
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - std::string::append
    - brpc::policy::ProtoMessageToProtoJson
    - CompressTypeToCStr
    - auto::parent_span_id
    - brpc::policy::GzipCompress
    - Controller*::timeout_ms
    - Controller*::method
    - set_method
    - Controller*::request_compress_type
    - TRACEPRINTF
    - Controller*::connection_type
    - std::string::push_back
    - append
    - Controller*::http_request
    - google::protobuf::MethodDescriptor*::service
    - size
    - content_type
    - mutable_content_type
    - set_content_type
    - ControllerPrivateAccessor::protocol_param
    - find
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_attachment
    - brpc::policy::get_h2_global_stream_creator
    - google::protobuf::Message*::GetTypeName
    - auto::span_id
    - Controller*::log_id
    - google::protobuf::Message*::InitializationErrorString
    - before_http_1_1
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - GetHeader
    - auto::trace_id
    - reserve
    - SetHeader
    - uri
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::request_id
    - std::string::reserve
    - butil::string_printf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    - brpc::policy::AddGrpcPrefix
    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:740,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:741,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:744,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:750,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:755,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:764,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: 766
      start: 733
    functionDepth: 2
    functionLinenumber: 733
    functionLinenumberEnd: 766
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::SetHeader
    - HttpHeader*::method
    - Controller*::request_attachment
    - MakeRawHttpRequest
    - Controller*::remote_side
    - Controller*::connection_type
    - HttpHeader*::GetHeader
    - brpc::policy::PrintMessage
    - Controller*::SetFailed
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    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:770,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:771,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 772
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - std::string*::find
    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: 778
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 778
    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: 784
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 784
    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:787,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 786
    functionDepth: 1
    functionLinenumber: 786
    functionLinenumberEnd: 796
    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: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    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: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    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: 801
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 801
    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: 802
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 802
    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:814,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 814
    functionDepth: 1
    functionLinenumber: 814
    functionLinenumberEnd: 814
    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:817,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:817,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 821
    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:830,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:834,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:844,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:847,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:848,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:857,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:860,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:861,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:867,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:868,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:879,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:884,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:885,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:889,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:894,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:896,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:918,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:926,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:937,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:938,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:939,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: ErrorCodeToStatusCode
      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: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:948,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:955,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:960,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:965,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:966,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:975,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:976,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:978,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:981,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:983,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:986,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1016,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1021,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1034,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1035,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1037,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1042,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1048,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1054,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1057,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1059
      start: 827
    functionDepth: 5
    functionLinenumber: 827
    functionLinenumberEnd: 1059
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::does_manage_http_body_on_error
    - butil::EnsureString
    - Controller*::has_progressive_writer
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - Response
    - LOG
    - server
    - MakeRawHttpResponse
    - CHECK_EQ
    - Controller*::response_attachment
    - std::string*::empty
    - butil::IOBuf::size
    - google::protobuf::Message*::GetDescriptor
    - HttpHeader*::before_http_1_1
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - ProtoMessageToProtoJson
    - HttpHeader*::SetHeader
    - std::string*::c_str
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - Return
    - TRACEPRINTF
    - strcasecmp
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - Controller*::http_request
    - Controller*::http_response
    - get
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - ProtoMessageToJson
    - HttpHeader*::is_http2
    - SocketMessagePtr::EstimatedByteSize
    - PrintMessage
    - HttpHeader*::set_version
    - google::protobuf::Message*::GetTypeName
    - HttpHeader*::set_status_code
    - butil::cpuwide_time_us
    - GzipCompress
    - HttpHeader*::set_content_type
    - PLOG_IF
    - bthread_id_join
    - HttpHeader*::major_version
    - HttpHeader*::set_method
    - Socket*::description
    - HttpHeader*::status_code
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - AddGrpcPrefix
    - auto::set_sent_us
    - ErrorCodeToStatusCode
    - if
    - HttpHeader*::method
    - ParseContentType
    - Socket*::Write
    - auto::set_start_send_us
    - HttpHeader*::GetHeader
    - butil::string_printf
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    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:1070,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: size
      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*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1076,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1081,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1082,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,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: 1086
      start: 1063
    functionDepth: 1
    functionLinenumber: 1063
    functionLinenumberEnd: 1086
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::clear
    - std::string*::push_back
    - field
    - std::string*::empty
    - c_str
    - size
    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:1092,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1095,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1103,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1104,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1122,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1132,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1135,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1141,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1143,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1148,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1149,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1150,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: 1155
      start: 1088
    functionDepth: 2
    functionLinenumber: 1088
    functionLinenumberEnd: 1155
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - brpc::policy::FillUnresolvedPath
    - butil::StringPiece::empty
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - c_str
    - butil::StringPiece::set
    - size
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - 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:1162,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1175,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1176,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: 1180
      start: 1158
    functionDepth: 3
    functionLinenumber: 1158
    functionLinenumberEnd: 1180
    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: 24
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1187,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1199,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1202,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1209,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1218,1
    - Dst: HttpContext*::body_too_large
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1222,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1224,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: HttpHeader::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1229,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1239,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1249,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1251,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1253,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1258,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1265,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1268,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1269,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1273,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1282,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1284,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1287,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1289,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1290,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1293,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1297,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1298,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1301,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1302,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1306,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: is_failed_after_queries
      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: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1333,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1337,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1344,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 100
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1355
      start: 1182
    functionDepth: 1
    functionLinenumber: 1182
    functionLinenumberEnd: 1355
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - Socket*::is_read_progressive
    - HttpContext*::body_too_large
    - static_cast<HttpContext*>
    - MakeRawHttpResponse
    - Socket*::http_request_method
    - LOG
    - HttpContext*::RemoveOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::Completed
    - CHECK_EQ
    - Socket*::ReleaseAdditionalReference
    - is_failed_after_http_version
    - Socket*::release_parsing_context
    - HttpContext*::header
    - HttpContext*::AddOneRefForStage2
    - HttpContext*::is_stage2
    - HttpHeader::set_status_code
    - HttpContext*::parser
    - Socket*::reset_parsing_context
    - HttpContext*::CheckProgressiveRead
    - butil::IOBuf*::pop_front
    - http_errno_description
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - Socket*::CreatedByConnect
    - HttpContext*::ParseFromIOBuf
    - HttpHeader::SetHeader
    - HttpContext*::stage
    - MakeMessage
    - HttpContext::HttpContext
    - is_failed_after_queries
    - HTTP_PARSER_ERRNO
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - HttpContext*::ParseFromArray
    - butil::IOBuf*::empty
    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:1359,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1365,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1372,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1381,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1386,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1387,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1390,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1391,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: 1393
      start: 1357
    functionDepth: 4
    functionLinenumber: 1357
    functionLinenumberEnd: 1393
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - static_cast<const H2StreamContext*>
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - HttpContext*::header
    - H2StreamContext*::stream_id
    - Socket*::Write
    - PLOG_IF
    - HttpHeader::set_status_code
    - MakeRawHttpResponse
    - butil::IOBuf::append
    - brpc::Controller::http_response
    - empty
    - butil::string_printf
    - brpc::policy::H2UnsentResponse::New
    - c_str
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1396,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1397,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1405,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1406,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1411,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1418,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1423,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1427,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1428,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1434
      start: 1395
    functionDepth: 5
    functionLinenumber: 1395
    functionLinenumberEnd: 1434
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - Socket*::local_side
    - brpc::policy::FindMethodPropertyByURI
    - Server::MethodProperty*::service::GetDescriptor
    - HttpContext*::header
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SendUnauthorizedResponse
    - Socket*::mutable_auth_context
    - InputMessageBase*::socket
    - Server*::options
    - Authenticator*::GetUnauthorizedErrorText
    - Socket*::remote_side
    - butil::EndPoint::EndPoint
    - brpc::policy::GetUserAddressFromHeader
    - InputMessageBase*::arg
    - Authenticator*::VerifyCredential
    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:1447,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1450,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1462,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1464,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1469,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1471,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1473,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1474,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1477,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1483,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1484,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1497,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1500,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1504,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1506,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1518,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1524,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1530,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1541,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1545,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1546,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1550,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1556,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1559,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1565,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1576,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1594,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1598,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1599,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1610,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1618,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1623,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1627,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1631,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1639,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1642,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1643,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1647,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1648,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1649,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1653,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1658,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1660,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1663,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1674,1
    - Dst: GetHeader
      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:1680,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1689,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1693,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1697,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1698,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1699,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1700,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1703,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1707,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1712,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1713,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1724,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1737,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1738,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1742,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1746,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1750,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1751,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1755,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1758,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1764,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1446
    functionDepth: 11
    functionLinenumber: 1446
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - brpc::policy::Get
    - brpc::policy::GzipDecompress
    - empty
    - DestroyingPtr::header
    - std::string*::c_str
    - std::string
    - TRACEPRINTF
    - ControllerPrivateAccessor::set_method
    - Controller*::http_request
    - Socket*::id
    - size
    - google::protobuf::Message*::IsInitialized
    - bthread_assign_data
    - Controller*::request_attachment
    - butil::cpuwide_time_us
    - Controller*::set_pb_single_repeated_to_array
    - SampledRequest*::meta::set_attachment_size
    - Socket*::remote_side
    - static_cast<H2StreamContext*>
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - AskToBeSampled
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - swap
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - google::protobuf::Message*::GetDescriptor
    - ParsePbTextFromIOBuf
    - RpcPBMessages*::Request
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - InputMessageBase*::base_real_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::input_type
    - content_type
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - HttpResponseSender::set_received_us
    - std::shared_ptr::set_log_id
    - strtoull
    - butil::EndPoint::EndPoint
    - GetHeader
    - butil::StringSplitter::length
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - BadMethodRequest::set_service_name
    - HttpResponseSender::set_method_status
    - brpc::policy::ParseContentType
    - Server*::AcceptRequest
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - butil::StringSplitter::field
    - butil::gettimeofday_us
    - DestroyingPtr::get
    - MakeRawHttpRequest
    - HttpResponseSender::set_messages
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - HttpResponseSender::set_h2_stream_id
    - brpc::policy::FindMethodPropertyByURI
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - H2StreamContext*::stream_id
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - pbrpcframework::get_prototype_by_method_descriptor
    - __builtin_expect
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - Server::MethodProperty*::service::GetDescriptor
    - SampledRequest*::submit
    - brpc::Span::CreateServerSpan
    - LOG
    - std::shared_ptr::set_request_size
    - brpc::policy::RemoveGrpcPrefix
    - EndRunningUserCodeInPlace
    - RpcPBMessages*::Response
    - Controller*::set_log_id
    - PLOG
    - Server::MethodProperty*::service::CallMethod
    - DestroyingPtr::parsed_length
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Controller::Controller
    - ControllerPrivateAccessor::set_deadline_us
    - c_str
    - google::protobuf::Service*::GetDescriptor
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::read_body_progressively
    - Controller*::log_id
    - InputMessageBase*::received_us
    - brpc::policy::GetUserAddressFromHeader
    - Controller*::set_pb_bytes_to_base64
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - WebEscape
    - uri
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - brpc::policy::ProtoJsonToProtoMessage
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::set_request_id
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1773,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1794
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ParseURL
    - std::string::c_str
    - std::string::empty
    - hostname2endpoint
    - LOG
    - str2endpoint
    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:1799,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1800,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1801
      start: 1796
    functionDepth: 0
    functionLinenumber: 1796
    functionLinenumberEnd: 1801
    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:1804,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1808,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1809,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1812,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1813,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1815
      start: 1803
    functionDepth: 0
    functionLinenumber: 1803
    functionLinenumberEnd: 1815
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - has_progressive_read_method
    - FindMethodPropertyByURI
    - const_cast<std::string *>
    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:91,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:96,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:98,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 109
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - LOG
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    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:113,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 2
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::GetUserAddressFromHeaderImpl
    - empty
    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: 162
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 162
    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: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::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:171,1
    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: 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: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    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:183,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:188,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:189,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:196,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:206,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:209,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:212,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:215,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:217,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:218,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 225
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::starts_with
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - butil::StringPiece::front
    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:231,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:242,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:243,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,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: 252
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 252
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - butil::IOBuf::pop_back
    - LOG
    - butil::IOBuf::IOBuf
    - butil::IOBuf::size
    - snprintf
    - butil::ToPrintableString
    - butil::my_ip_cstr
    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:257,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:259,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 262
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::HostToNet32
    - butil::IOBuf*::swap
    - butil::IOBuf::append
    - butil::IOBuf::Movable
    - butil::IOBuf*::size
    - 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:265,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:274,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:276,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::size
    - butil::NetToHost32
    - butil::IOBuf*::empty
    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:285,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:290,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:292,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: 295
      start: 280
    functionDepth: 10
    functionLinenumber: 280
    functionLinenumberEnd: 295
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - std::string::c_str
    - butil::EnsureString
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    - google::protobuf::Message*::GetDescriptor
    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:300,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:301,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:302,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:303,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:304,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:311,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:313,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: 316
      start: 297
    functionDepth: 3
    functionLinenumber: 297
    functionLinenumberEnd: 316
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - GetDescriptor
    - Controller*::has_pb_jsonify_empty_array
    - json2pb::ProtoMessageToJson
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    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:325,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:327,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:329,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: 332
      start: 318
    functionDepth: 2
    functionLinenumber: 318
    functionLinenumberEnd: 332
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:338,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:338,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:343,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,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: 347
      start: 334
    functionDepth: 3
    functionLinenumber: 334
    functionLinenumberEnd: 347
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - AlwaysPrintPrimitiveFields
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToProtoJson
    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:350,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:354,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:356,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:357,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:369,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:370,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:376,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:386,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:388,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:402,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:404,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:406,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:410,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:423,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: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:438,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:454,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:455,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:456,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:464,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:471,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:475,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:476,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:490,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:491,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:496,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:501,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:503,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:512,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:523,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:524,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:532,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:538,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:553,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:555,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:562,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:563,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 349
    functionDepth: 11
    functionLinenumber: 349
    functionLinenumberEnd: 564
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PercentDecode
    - Socket*::read_will_be_progressive
    - butil::EnsureString
    - DestroyingPtr::get
    - Controller*::response
    - ControllerPrivateAccessor::span
    - std::min
    - LOG
    - std::string::append
    - brpc::policy::GzipDecompress
    - ParsePbFromIOBuf
    - empty
    - swap
    - Controller*::response_attachment
    - std::string::size
    - LOG_IF
    - brpc::policy::RemoveGrpcPrefix
    - ParsePbTextFromIOBuf
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::header
    - std::string*::data
    - std::string*::c_str
    - auto::set_response_size
    - auto::set_start_parse_us
    - CHECK
    - static_cast<int>
    - HttpHeader*::reason_phrase
    - DestroyingPtr::parsed_length
    - strcasecmp
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - strtol
    - TRACEPRINTF
    - DestroyingPtr::reset
    - auto::set_base_real_us
    - InputMessageBase*::base_real_us
    - Controller*::http_response
    - size
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::minor_version
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::Swap
    - butil::cpuwide_time_us
    - DestroyingPtr::read_body_progressively
    - append_to
    - Controller*::SetFailed
    - copy_to
    - InputMessageBase*::received_us
    - HttpHeader*::major_version
    - GrpcStatusToErrorCode
    - Socket*::correlation_id
    - auto::set_received_us
    - HttpHeader*::status_code
    - berror
    - static_cast<H2StreamContext*>
    - DestroyingPtr::body
    - GrpcStatusToString
    - bthread_id_lock
    - brpc::policy::ProtoJsonToProtoMessage
    - HttpHeader*::GetHeader
    - butil::string_printf
    - H2StreamContext*::correlation_id
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    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:569,1
    - Dst: Controller*::request_protocol
      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:573,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:579,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:581,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:587,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:592,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:596,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:604,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:616,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:617,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:623,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:627,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:628,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:632,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:633,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:637,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:639,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:646,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:647,1
    - Dst: uri
      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:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:652,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:659,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:664,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:669,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:675,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::log_id
      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:679,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:686,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:687,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: SetHeader
      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:699,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:700,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:710,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::reserve
      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: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:718,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: ControllerPrivateAccessor::span
      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: auto::trace_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: auto::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 566
    functionDepth: 4
    functionLinenumber: 566
    functionLinenumberEnd: 731
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - Controller*::request_protocol
    - butil::EnsureString
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - std::string::append
    - brpc::policy::ProtoMessageToProtoJson
    - CompressTypeToCStr
    - auto::parent_span_id
    - brpc::policy::GzipCompress
    - Controller*::timeout_ms
    - Controller*::method
    - set_method
    - Controller*::request_compress_type
    - TRACEPRINTF
    - Controller*::connection_type
    - std::string::push_back
    - append
    - Controller*::http_request
    - google::protobuf::MethodDescriptor*::service
    - size
    - content_type
    - mutable_content_type
    - set_content_type
    - ControllerPrivateAccessor::protocol_param
    - find
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_attachment
    - brpc::policy::get_h2_global_stream_creator
    - google::protobuf::Message*::GetTypeName
    - auto::span_id
    - Controller*::log_id
    - google::protobuf::Message*::InitializationErrorString
    - before_http_1_1
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - GetHeader
    - auto::trace_id
    - reserve
    - SetHeader
    - uri
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::request_id
    - std::string::reserve
    - butil::string_printf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    - brpc::policy::AddGrpcPrefix
    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:740,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:741,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:744,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:750,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:755,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:764,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: 766
      start: 733
    functionDepth: 2
    functionLinenumber: 733
    functionLinenumberEnd: 766
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::SetHeader
    - HttpHeader*::method
    - Controller*::request_attachment
    - MakeRawHttpRequest
    - Controller*::remote_side
    - Controller*::connection_type
    - HttpHeader*::GetHeader
    - brpc::policy::PrintMessage
    - Controller*::SetFailed
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    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:770,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:771,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 772
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - std::string*::find
    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: 778
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 778
    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: 784
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 784
    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:787,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 786
    functionDepth: 1
    functionLinenumber: 786
    functionLinenumberEnd: 796
    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: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    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: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    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: 801
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 801
    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: 802
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 802
    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:814,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 814
    functionDepth: 1
    functionLinenumber: 814
    functionLinenumberEnd: 814
    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:817,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:817,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 821
    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:830,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:834,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:844,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:847,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:848,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:857,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:860,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:861,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:867,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:868,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:879,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:884,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:885,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:889,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:894,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:896,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:918,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:926,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:937,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:938,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:939,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: ErrorCodeToStatusCode
      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: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:948,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:955,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:960,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:965,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:966,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:975,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:976,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:978,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:981,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:983,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:986,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1016,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1021,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1034,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1035,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1037,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1042,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1048,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1054,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1057,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1059
      start: 827
    functionDepth: 5
    functionLinenumber: 827
    functionLinenumberEnd: 1059
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::does_manage_http_body_on_error
    - butil::EnsureString
    - Controller*::has_progressive_writer
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - Response
    - LOG
    - server
    - MakeRawHttpResponse
    - CHECK_EQ
    - Controller*::response_attachment
    - std::string*::empty
    - butil::IOBuf::size
    - google::protobuf::Message*::GetDescriptor
    - HttpHeader*::before_http_1_1
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - ProtoMessageToProtoJson
    - HttpHeader*::SetHeader
    - std::string*::c_str
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - Return
    - TRACEPRINTF
    - strcasecmp
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - Controller*::http_request
    - Controller*::http_response
    - get
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - ProtoMessageToJson
    - HttpHeader*::is_http2
    - SocketMessagePtr::EstimatedByteSize
    - PrintMessage
    - HttpHeader*::set_version
    - google::protobuf::Message*::GetTypeName
    - HttpHeader*::set_status_code
    - butil::cpuwide_time_us
    - GzipCompress
    - HttpHeader*::set_content_type
    - PLOG_IF
    - bthread_id_join
    - HttpHeader*::major_version
    - HttpHeader*::set_method
    - Socket*::description
    - HttpHeader*::status_code
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - AddGrpcPrefix
    - auto::set_sent_us
    - ErrorCodeToStatusCode
    - if
    - HttpHeader*::method
    - ParseContentType
    - Socket*::Write
    - auto::set_start_send_us
    - HttpHeader*::GetHeader
    - butil::string_printf
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    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:1070,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: size
      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*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1076,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1081,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1082,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,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: 1086
      start: 1063
    functionDepth: 1
    functionLinenumber: 1063
    functionLinenumberEnd: 1086
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::clear
    - std::string*::push_back
    - field
    - std::string*::empty
    - c_str
    - size
    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:1092,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1095,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1103,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1104,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1122,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1132,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1135,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1141,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1143,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1148,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1149,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1150,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: 1155
      start: 1088
    functionDepth: 2
    functionLinenumber: 1088
    functionLinenumberEnd: 1155
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - brpc::policy::FillUnresolvedPath
    - butil::StringPiece::empty
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - c_str
    - butil::StringPiece::set
    - size
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - 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:1162,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1175,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1176,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: 1180
      start: 1158
    functionDepth: 3
    functionLinenumber: 1158
    functionLinenumberEnd: 1180
    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: 24
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1187,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1199,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1202,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1209,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1218,1
    - Dst: HttpContext*::body_too_large
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1222,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1224,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: HttpHeader::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1229,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1239,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1249,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1251,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1253,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1258,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1265,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1268,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1269,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1273,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1282,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1284,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1287,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1289,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1290,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1293,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1297,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1298,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1301,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1302,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1306,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: is_failed_after_queries
      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: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1333,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1337,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1344,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 100
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1355
      start: 1182
    functionDepth: 1
    functionLinenumber: 1182
    functionLinenumberEnd: 1355
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - Socket*::is_read_progressive
    - HttpContext*::body_too_large
    - static_cast<HttpContext*>
    - MakeRawHttpResponse
    - Socket*::http_request_method
    - LOG
    - HttpContext*::RemoveOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::Completed
    - CHECK_EQ
    - Socket*::ReleaseAdditionalReference
    - is_failed_after_http_version
    - Socket*::release_parsing_context
    - HttpContext*::header
    - HttpContext*::AddOneRefForStage2
    - HttpContext*::is_stage2
    - HttpHeader::set_status_code
    - HttpContext*::parser
    - Socket*::reset_parsing_context
    - HttpContext*::CheckProgressiveRead
    - butil::IOBuf*::pop_front
    - http_errno_description
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - Socket*::CreatedByConnect
    - HttpContext*::ParseFromIOBuf
    - HttpHeader::SetHeader
    - HttpContext*::stage
    - MakeMessage
    - HttpContext::HttpContext
    - is_failed_after_queries
    - HTTP_PARSER_ERRNO
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - HttpContext*::ParseFromArray
    - butil::IOBuf*::empty
    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:1359,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1365,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1372,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1381,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1386,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1387,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1390,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1391,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: 1393
      start: 1357
    functionDepth: 4
    functionLinenumber: 1357
    functionLinenumberEnd: 1393
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - static_cast<const H2StreamContext*>
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - HttpContext*::header
    - H2StreamContext*::stream_id
    - Socket*::Write
    - PLOG_IF
    - HttpHeader::set_status_code
    - MakeRawHttpResponse
    - butil::IOBuf::append
    - brpc::Controller::http_response
    - empty
    - butil::string_printf
    - brpc::policy::H2UnsentResponse::New
    - c_str
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1396,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1397,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1405,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1406,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1411,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1418,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1423,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1427,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1428,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1434
      start: 1395
    functionDepth: 5
    functionLinenumber: 1395
    functionLinenumberEnd: 1434
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - Socket*::local_side
    - brpc::policy::FindMethodPropertyByURI
    - Server::MethodProperty*::service::GetDescriptor
    - HttpContext*::header
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SendUnauthorizedResponse
    - Socket*::mutable_auth_context
    - InputMessageBase*::socket
    - Server*::options
    - Authenticator*::GetUnauthorizedErrorText
    - Socket*::remote_side
    - butil::EndPoint::EndPoint
    - brpc::policy::GetUserAddressFromHeader
    - InputMessageBase*::arg
    - Authenticator*::VerifyCredential
    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:1447,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1450,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1462,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1464,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1469,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1471,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1473,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1474,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1477,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1483,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1484,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1497,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1500,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1504,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1506,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1518,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1524,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1530,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1541,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1545,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1546,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1550,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1556,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1559,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1565,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1576,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1594,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1598,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1599,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1610,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1618,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1623,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1627,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1631,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1639,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1642,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1643,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1647,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1648,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1649,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1653,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1658,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1660,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1663,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1674,1
    - Dst: GetHeader
      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:1680,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1689,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1693,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1697,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1698,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1699,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1700,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1703,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1707,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1712,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1713,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1724,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1737,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1738,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1742,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1746,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1750,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1751,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1755,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1758,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1764,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1446
    functionDepth: 11
    functionLinenumber: 1446
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - brpc::policy::Get
    - brpc::policy::GzipDecompress
    - empty
    - DestroyingPtr::header
    - std::string*::c_str
    - std::string
    - TRACEPRINTF
    - ControllerPrivateAccessor::set_method
    - Controller*::http_request
    - Socket*::id
    - size
    - google::protobuf::Message*::IsInitialized
    - bthread_assign_data
    - Controller*::request_attachment
    - butil::cpuwide_time_us
    - Controller*::set_pb_single_repeated_to_array
    - SampledRequest*::meta::set_attachment_size
    - Socket*::remote_side
    - static_cast<H2StreamContext*>
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - AskToBeSampled
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - swap
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - google::protobuf::Message*::GetDescriptor
    - ParsePbTextFromIOBuf
    - RpcPBMessages*::Request
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - InputMessageBase*::base_real_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::input_type
    - content_type
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - HttpResponseSender::set_received_us
    - std::shared_ptr::set_log_id
    - strtoull
    - butil::EndPoint::EndPoint
    - GetHeader
    - butil::StringSplitter::length
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - BadMethodRequest::set_service_name
    - HttpResponseSender::set_method_status
    - brpc::policy::ParseContentType
    - Server*::AcceptRequest
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - butil::StringSplitter::field
    - butil::gettimeofday_us
    - DestroyingPtr::get
    - MakeRawHttpRequest
    - HttpResponseSender::set_messages
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - HttpResponseSender::set_h2_stream_id
    - brpc::policy::FindMethodPropertyByURI
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - H2StreamContext*::stream_id
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - pbrpcframework::get_prototype_by_method_descriptor
    - __builtin_expect
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - Server::MethodProperty*::service::GetDescriptor
    - SampledRequest*::submit
    - brpc::Span::CreateServerSpan
    - LOG
    - std::shared_ptr::set_request_size
    - brpc::policy::RemoveGrpcPrefix
    - EndRunningUserCodeInPlace
    - RpcPBMessages*::Response
    - Controller*::set_log_id
    - PLOG
    - Server::MethodProperty*::service::CallMethod
    - DestroyingPtr::parsed_length
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Controller::Controller
    - ControllerPrivateAccessor::set_deadline_us
    - c_str
    - google::protobuf::Service*::GetDescriptor
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::read_body_progressively
    - Controller*::log_id
    - InputMessageBase*::received_us
    - brpc::policy::GetUserAddressFromHeader
    - Controller*::set_pb_bytes_to_base64
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - WebEscape
    - uri
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - brpc::policy::ProtoJsonToProtoMessage
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::set_request_id
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1773,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1794
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ParseURL
    - std::string::c_str
    - std::string::empty
    - hostname2endpoint
    - LOG
    - str2endpoint
    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:1799,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1800,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1801
      start: 1796
    functionDepth: 0
    functionLinenumber: 1796
    functionLinenumberEnd: 1801
    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:1804,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1808,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1809,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1812,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1813,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1815
      start: 1803
    functionDepth: 0
    functionLinenumber: 1803
    functionLinenumberEnd: 1815
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - has_progressive_read_method
    - FindMethodPropertyByURI
    - const_cast<std::string *>
    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:91,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:96,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:98,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 109
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - LOG
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    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:113,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 2
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::GetUserAddressFromHeaderImpl
    - empty
    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: 162
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 162
    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: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::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:171,1
    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: 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: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    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:183,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:188,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:189,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:196,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:206,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:209,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:212,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:215,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:217,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:218,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 225
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::starts_with
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - butil::StringPiece::front
    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:231,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:242,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:243,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,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: 252
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 252
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - butil::IOBuf::pop_back
    - LOG
    - butil::IOBuf::IOBuf
    - butil::IOBuf::size
    - snprintf
    - butil::ToPrintableString
    - butil::my_ip_cstr
    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:257,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:259,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 262
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::HostToNet32
    - butil::IOBuf*::swap
    - butil::IOBuf::append
    - butil::IOBuf::Movable
    - butil::IOBuf*::size
    - 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:265,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:274,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:276,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::size
    - butil::NetToHost32
    - butil::IOBuf*::empty
    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:285,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:290,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:292,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: 295
      start: 280
    functionDepth: 10
    functionLinenumber: 280
    functionLinenumberEnd: 295
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - std::string::c_str
    - butil::EnsureString
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    - google::protobuf::Message*::GetDescriptor
    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:300,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:301,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:302,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:303,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:304,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:311,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:313,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: 316
      start: 297
    functionDepth: 3
    functionLinenumber: 297
    functionLinenumberEnd: 316
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - GetDescriptor
    - Controller*::has_pb_jsonify_empty_array
    - json2pb::ProtoMessageToJson
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    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:325,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:327,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:329,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: 332
      start: 318
    functionDepth: 2
    functionLinenumber: 318
    functionLinenumberEnd: 332
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:338,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:338,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:343,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,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: 347
      start: 334
    functionDepth: 3
    functionLinenumber: 334
    functionLinenumberEnd: 347
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - AlwaysPrintPrimitiveFields
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToProtoJson
    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:350,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:354,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:356,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:357,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:369,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:370,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:376,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:386,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:388,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:402,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:404,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:406,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:410,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:423,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: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:438,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:454,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:455,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:456,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:464,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:471,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:475,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:476,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:490,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:491,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:496,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:501,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:503,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:512,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:523,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:524,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:532,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:538,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:553,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:555,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:562,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:563,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 349
    functionDepth: 11
    functionLinenumber: 349
    functionLinenumberEnd: 564
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PercentDecode
    - Socket*::read_will_be_progressive
    - butil::EnsureString
    - DestroyingPtr::get
    - Controller*::response
    - ControllerPrivateAccessor::span
    - std::min
    - LOG
    - std::string::append
    - brpc::policy::GzipDecompress
    - ParsePbFromIOBuf
    - empty
    - swap
    - Controller*::response_attachment
    - std::string::size
    - LOG_IF
    - brpc::policy::RemoveGrpcPrefix
    - ParsePbTextFromIOBuf
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::header
    - std::string*::data
    - std::string*::c_str
    - auto::set_response_size
    - auto::set_start_parse_us
    - CHECK
    - static_cast<int>
    - HttpHeader*::reason_phrase
    - DestroyingPtr::parsed_length
    - strcasecmp
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - strtol
    - TRACEPRINTF
    - DestroyingPtr::reset
    - auto::set_base_real_us
    - InputMessageBase*::base_real_us
    - Controller*::http_response
    - size
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::minor_version
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::Swap
    - butil::cpuwide_time_us
    - DestroyingPtr::read_body_progressively
    - append_to
    - Controller*::SetFailed
    - copy_to
    - InputMessageBase*::received_us
    - HttpHeader*::major_version
    - GrpcStatusToErrorCode
    - Socket*::correlation_id
    - auto::set_received_us
    - HttpHeader*::status_code
    - berror
    - static_cast<H2StreamContext*>
    - DestroyingPtr::body
    - GrpcStatusToString
    - bthread_id_lock
    - brpc::policy::ProtoJsonToProtoMessage
    - HttpHeader*::GetHeader
    - butil::string_printf
    - H2StreamContext*::correlation_id
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    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:569,1
    - Dst: Controller*::request_protocol
      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:573,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:579,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:581,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:587,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:592,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:596,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:604,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:616,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:617,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:623,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:627,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:628,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:632,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:633,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:637,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:639,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:646,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:647,1
    - Dst: uri
      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:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:652,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:659,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:664,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:669,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:675,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::log_id
      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:679,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:686,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:687,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: SetHeader
      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:699,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:700,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:710,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::reserve
      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: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:718,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: ControllerPrivateAccessor::span
      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: auto::trace_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: auto::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 566
    functionDepth: 4
    functionLinenumber: 566
    functionLinenumberEnd: 731
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - Controller*::request_protocol
    - butil::EnsureString
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - std::string::append
    - brpc::policy::ProtoMessageToProtoJson
    - CompressTypeToCStr
    - auto::parent_span_id
    - brpc::policy::GzipCompress
    - Controller*::timeout_ms
    - Controller*::method
    - set_method
    - Controller*::request_compress_type
    - TRACEPRINTF
    - Controller*::connection_type
    - std::string::push_back
    - append
    - Controller*::http_request
    - google::protobuf::MethodDescriptor*::service
    - size
    - content_type
    - mutable_content_type
    - set_content_type
    - ControllerPrivateAccessor::protocol_param
    - find
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_attachment
    - brpc::policy::get_h2_global_stream_creator
    - google::protobuf::Message*::GetTypeName
    - auto::span_id
    - Controller*::log_id
    - google::protobuf::Message*::InitializationErrorString
    - before_http_1_1
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - GetHeader
    - auto::trace_id
    - reserve
    - SetHeader
    - uri
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::request_id
    - std::string::reserve
    - butil::string_printf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    - brpc::policy::AddGrpcPrefix
    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:740,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:741,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:744,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:750,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:755,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:764,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: 766
      start: 733
    functionDepth: 2
    functionLinenumber: 733
    functionLinenumberEnd: 766
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::SetHeader
    - HttpHeader*::method
    - Controller*::request_attachment
    - MakeRawHttpRequest
    - Controller*::remote_side
    - Controller*::connection_type
    - HttpHeader*::GetHeader
    - brpc::policy::PrintMessage
    - Controller*::SetFailed
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    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:770,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:771,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 772
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - std::string*::find
    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: 778
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 778
    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: 784
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 784
    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:787,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 786
    functionDepth: 1
    functionLinenumber: 786
    functionLinenumberEnd: 796
    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: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    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: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    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: 801
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 801
    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: 802
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 802
    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:814,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 814
    functionDepth: 1
    functionLinenumber: 814
    functionLinenumberEnd: 814
    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:817,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:817,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 821
    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:830,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:834,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:844,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:847,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:848,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:857,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:860,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:861,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:867,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:868,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:879,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:884,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:885,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:889,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:894,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:896,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:918,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:926,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:937,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:938,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:939,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: ErrorCodeToStatusCode
      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: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:948,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:955,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:960,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:965,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:966,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:975,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:976,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:978,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:981,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:983,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:986,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1016,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1021,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1034,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1035,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1037,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1042,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1048,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1054,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1057,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1059
      start: 827
    functionDepth: 5
    functionLinenumber: 827
    functionLinenumberEnd: 1059
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::does_manage_http_body_on_error
    - butil::EnsureString
    - Controller*::has_progressive_writer
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - Response
    - LOG
    - server
    - MakeRawHttpResponse
    - CHECK_EQ
    - Controller*::response_attachment
    - std::string*::empty
    - butil::IOBuf::size
    - google::protobuf::Message*::GetDescriptor
    - HttpHeader*::before_http_1_1
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - ProtoMessageToProtoJson
    - HttpHeader*::SetHeader
    - std::string*::c_str
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - Return
    - TRACEPRINTF
    - strcasecmp
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - Controller*::http_request
    - Controller*::http_response
    - get
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - ProtoMessageToJson
    - HttpHeader*::is_http2
    - SocketMessagePtr::EstimatedByteSize
    - PrintMessage
    - HttpHeader*::set_version
    - google::protobuf::Message*::GetTypeName
    - HttpHeader*::set_status_code
    - butil::cpuwide_time_us
    - GzipCompress
    - HttpHeader*::set_content_type
    - PLOG_IF
    - bthread_id_join
    - HttpHeader*::major_version
    - HttpHeader*::set_method
    - Socket*::description
    - HttpHeader*::status_code
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - AddGrpcPrefix
    - auto::set_sent_us
    - ErrorCodeToStatusCode
    - if
    - HttpHeader*::method
    - ParseContentType
    - Socket*::Write
    - auto::set_start_send_us
    - HttpHeader*::GetHeader
    - butil::string_printf
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    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:1070,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: size
      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*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1076,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1081,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1082,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,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: 1086
      start: 1063
    functionDepth: 1
    functionLinenumber: 1063
    functionLinenumberEnd: 1086
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::clear
    - std::string*::push_back
    - field
    - std::string*::empty
    - c_str
    - size
    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:1092,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1095,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1103,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1104,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1122,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1132,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1135,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1141,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1143,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1148,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1149,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1150,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: 1155
      start: 1088
    functionDepth: 2
    functionLinenumber: 1088
    functionLinenumberEnd: 1155
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - brpc::policy::FillUnresolvedPath
    - butil::StringPiece::empty
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - c_str
    - butil::StringPiece::set
    - size
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - 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:1162,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1175,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1176,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: 1180
      start: 1158
    functionDepth: 3
    functionLinenumber: 1158
    functionLinenumberEnd: 1180
    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: 24
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1187,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1199,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1202,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1209,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1218,1
    - Dst: HttpContext*::body_too_large
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1222,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1224,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: HttpHeader::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1229,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1239,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1249,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1251,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1253,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1258,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1265,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1268,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1269,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1273,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1282,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1284,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1287,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1289,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1290,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1293,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1297,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1298,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1301,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1302,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1306,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: is_failed_after_queries
      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: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1333,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1337,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1344,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 100
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1355
      start: 1182
    functionDepth: 1
    functionLinenumber: 1182
    functionLinenumberEnd: 1355
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - Socket*::is_read_progressive
    - HttpContext*::body_too_large
    - static_cast<HttpContext*>
    - MakeRawHttpResponse
    - Socket*::http_request_method
    - LOG
    - HttpContext*::RemoveOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::Completed
    - CHECK_EQ
    - Socket*::ReleaseAdditionalReference
    - is_failed_after_http_version
    - Socket*::release_parsing_context
    - HttpContext*::header
    - HttpContext*::AddOneRefForStage2
    - HttpContext*::is_stage2
    - HttpHeader::set_status_code
    - HttpContext*::parser
    - Socket*::reset_parsing_context
    - HttpContext*::CheckProgressiveRead
    - butil::IOBuf*::pop_front
    - http_errno_description
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - Socket*::CreatedByConnect
    - HttpContext*::ParseFromIOBuf
    - HttpHeader::SetHeader
    - HttpContext*::stage
    - MakeMessage
    - HttpContext::HttpContext
    - is_failed_after_queries
    - HTTP_PARSER_ERRNO
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - HttpContext*::ParseFromArray
    - butil::IOBuf*::empty
    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:1359,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1365,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1372,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1381,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1386,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1387,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1390,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1391,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: 1393
      start: 1357
    functionDepth: 4
    functionLinenumber: 1357
    functionLinenumberEnd: 1393
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - static_cast<const H2StreamContext*>
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - HttpContext*::header
    - H2StreamContext*::stream_id
    - Socket*::Write
    - PLOG_IF
    - HttpHeader::set_status_code
    - MakeRawHttpResponse
    - butil::IOBuf::append
    - brpc::Controller::http_response
    - empty
    - butil::string_printf
    - brpc::policy::H2UnsentResponse::New
    - c_str
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1396,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1397,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1405,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1406,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1411,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1418,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1423,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1427,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1428,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1434
      start: 1395
    functionDepth: 5
    functionLinenumber: 1395
    functionLinenumberEnd: 1434
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - Socket*::local_side
    - brpc::policy::FindMethodPropertyByURI
    - Server::MethodProperty*::service::GetDescriptor
    - HttpContext*::header
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SendUnauthorizedResponse
    - Socket*::mutable_auth_context
    - InputMessageBase*::socket
    - Server*::options
    - Authenticator*::GetUnauthorizedErrorText
    - Socket*::remote_side
    - butil::EndPoint::EndPoint
    - brpc::policy::GetUserAddressFromHeader
    - InputMessageBase*::arg
    - Authenticator*::VerifyCredential
    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:1447,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1450,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1462,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1464,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1469,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1471,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1473,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1474,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1477,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1483,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1484,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1497,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1500,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1504,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1506,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1518,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1524,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1530,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1541,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1545,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1546,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1550,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1556,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1559,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1565,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1576,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1594,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1598,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1599,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1610,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1618,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1623,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1627,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1631,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1639,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1642,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1643,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1647,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1648,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1649,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1653,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1658,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1660,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1663,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1674,1
    - Dst: GetHeader
      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:1680,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1689,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1693,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1697,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1698,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1699,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1700,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1703,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1707,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1712,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1713,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1724,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1737,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1738,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1742,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1746,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1750,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1751,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1755,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1758,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1764,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1446
    functionDepth: 11
    functionLinenumber: 1446
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - brpc::policy::Get
    - brpc::policy::GzipDecompress
    - empty
    - DestroyingPtr::header
    - std::string*::c_str
    - std::string
    - TRACEPRINTF
    - ControllerPrivateAccessor::set_method
    - Controller*::http_request
    - Socket*::id
    - size
    - google::protobuf::Message*::IsInitialized
    - bthread_assign_data
    - Controller*::request_attachment
    - butil::cpuwide_time_us
    - Controller*::set_pb_single_repeated_to_array
    - SampledRequest*::meta::set_attachment_size
    - Socket*::remote_side
    - static_cast<H2StreamContext*>
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - AskToBeSampled
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - swap
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - google::protobuf::Message*::GetDescriptor
    - ParsePbTextFromIOBuf
    - RpcPBMessages*::Request
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - InputMessageBase*::base_real_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::input_type
    - content_type
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - HttpResponseSender::set_received_us
    - std::shared_ptr::set_log_id
    - strtoull
    - butil::EndPoint::EndPoint
    - GetHeader
    - butil::StringSplitter::length
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - BadMethodRequest::set_service_name
    - HttpResponseSender::set_method_status
    - brpc::policy::ParseContentType
    - Server*::AcceptRequest
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - butil::StringSplitter::field
    - butil::gettimeofday_us
    - DestroyingPtr::get
    - MakeRawHttpRequest
    - HttpResponseSender::set_messages
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - HttpResponseSender::set_h2_stream_id
    - brpc::policy::FindMethodPropertyByURI
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - H2StreamContext*::stream_id
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - pbrpcframework::get_prototype_by_method_descriptor
    - __builtin_expect
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - Server::MethodProperty*::service::GetDescriptor
    - SampledRequest*::submit
    - brpc::Span::CreateServerSpan
    - LOG
    - std::shared_ptr::set_request_size
    - brpc::policy::RemoveGrpcPrefix
    - EndRunningUserCodeInPlace
    - RpcPBMessages*::Response
    - Controller*::set_log_id
    - PLOG
    - Server::MethodProperty*::service::CallMethod
    - DestroyingPtr::parsed_length
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Controller::Controller
    - ControllerPrivateAccessor::set_deadline_us
    - c_str
    - google::protobuf::Service*::GetDescriptor
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::read_body_progressively
    - Controller*::log_id
    - InputMessageBase*::received_us
    - brpc::policy::GetUserAddressFromHeader
    - Controller*::set_pb_bytes_to_base64
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - WebEscape
    - uri
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - brpc::policy::ProtoJsonToProtoMessage
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::set_request_id
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1773,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1794
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ParseURL
    - std::string::c_str
    - std::string::empty
    - hostname2endpoint
    - LOG
    - str2endpoint
    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:1799,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1800,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1801
      start: 1796
    functionDepth: 0
    functionLinenumber: 1796
    functionLinenumberEnd: 1801
    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:1804,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1808,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1809,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1812,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1813,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1815
      start: 1803
    functionDepth: 0
    functionLinenumber: 1803
    functionLinenumberEnd: 1815
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - has_progressive_read_method
    - FindMethodPropertyByURI
    - const_cast<std::string *>
    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:91,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:96,1
    - Dst: butil::str2ip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:97,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:98,1
    - Dst: butil::str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:104,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 109
    functionName: brpc::policy::GetUserAddressFromHeaderImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - std::string*::find
    - std::string*::c_str
    - LOG
    - butil::str2endpoint
    - butil::str2ip
    - GetHeader
    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:113,1
    - Dst: brpc::policy::GetUserAddressFromHeaderImpl
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - ' headers'
    - user_addr
    argTypes:
    - HttpHeader
    - butil::EndPoint*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 111
    functionDepth: 2
    functionLinenumber: 111
    functionLinenumberEnd: 117
    functionName: brpc::policy::GetUserAddressFromHeader
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::GetUserAddressFromHeaderImpl
    - empty
    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: 162
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 162
    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: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::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:171,1
    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: 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: 174
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 174
    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:183,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:186,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:188,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:189,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:196,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:206,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:208,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:209,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:211,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:212,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:214,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:215,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:217,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:218,1
    - Dst: butil::StringPiece::remove_prefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:220,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    - Dst: butil::StringPiece::front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:224,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 42
    argCount: 2
    argNames:
    - ct
    - is_grpc_ct
    argTypes:
    - butil::StringPiece
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 176
    functionDepth: 0
    functionLinenumber: 176
    functionLinenumberEnd: 225
    functionName: brpc::policy::ParseContentType
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::StringPiece::remove_prefix
    - butil::StringPiece::starts_with
    - butil::StringPiece::empty
    - butil::StringPiece::size
    - butil::StringPiece::front
    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:231,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:234,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::my_ip_cstr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:236,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:238,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:241,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:242,1
    - Dst: butil::IOBuf::cut_until
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:243,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::pop_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:250,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: 252
      start: 227
    functionDepth: 1
    functionLinenumber: 227
    functionLinenumberEnd: 252
    functionName: brpc::policy::PrintMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf::cut_until
    - butil::IOBuf::append
    - butil::IOBuf::pop_back
    - LOG
    - butil::IOBuf::IOBuf
    - butil::IOBuf::size
    - snprintf
    - butil::ToPrintableString
    - butil::my_ip_cstr
    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:257,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:257,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:258,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:259,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:260,1
    - Dst: butil::IOBuf*::swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:261,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 254
    functionDepth: 1
    functionLinenumber: 254
    functionLinenumberEnd: 262
    functionName: brpc::policy::AddGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::HostToNet32
    - butil::IOBuf*::swap
    - butil::IOBuf::append
    - butil::IOBuf::Movable
    - butil::IOBuf*::size
    - 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:265,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:269,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:274,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:276,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - body
    - compressed
    argTypes:
    - butil::IOBuf*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 278
    functionName: brpc::policy::RemoveGrpcPrefix
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::size
    - butil::NetToHost32
    - butil::IOBuf*::empty
    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:285,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:286,1
    - Dst: json2pb::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:288,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:290,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:291,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:292,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: 295
      start: 280
    functionDepth: 10
    functionLinenumber: 280
    functionLinenumberEnd: 295
    functionName: brpc::policy::JsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - std::string::c_str
    - butil::EnsureString
    - json2pb::JsonToProtoMessage
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    - google::protobuf::Message*::GetDescriptor
    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:300,1
    - Dst: Controller*::has_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:301,1
    - Dst: Controller*::has_pb_jsonify_empty_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:302,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:303,1
    - Dst: Controller*::has_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:304,1
    - Dst: json2pb::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:309,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:311,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:312,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:313,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: 316
      start: 297
    functionDepth: 3
    functionLinenumber: 297
    functionLinenumberEnd: 316
    functionName: brpc::policy::ProtoMessageToJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - Controller*::has_pb_single_repeated_to_array
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - json2pb::Pb2JsonOptions::Pb2JsonOptions
    - GetDescriptor
    - Controller*::has_pb_jsonify_empty_array
    - json2pb::ProtoMessageToJson
    - Controller*::SetFailed
    - Controller*::has_pb_bytes_to_base64
    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:325,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:327,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:328,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:329,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: 332
      start: 318
    functionDepth: 2
    functionLinenumber: 318
    functionLinenumberEnd: 332
    functionName: brpc::policy::ProtoJsonToProtoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - json2pb::ProtoJsonToProtoMessage
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:338,1
    - Dst: Controller*::has_always_print_primitive_fields
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:338,1
    - Dst: json2pb::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:341,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:343,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:344,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: 347
      start: 334
    functionDepth: 3
    functionLinenumber: 334
    functionLinenumberEnd: 347
    functionName: brpc::policy::ProtoMessageToProtoJson
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - Controller*::has_always_print_primitive_fields
    - std::string::c_str
    - butil::EnsureString
    - AlwaysPrintPrimitiveFields
    - GetDescriptor
    - Controller*::SetFailed
    - json2pb::ProtoMessageToProtoJson
    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:350,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:352,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:354,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:356,1
    - Dst: H2StreamContext*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:357,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:359,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:362,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:369,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:370,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:376,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:377,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:378,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:380,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:381,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:384,1
    - Dst: HttpHeader*::Swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:386,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:387,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:388,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:392,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:399,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:400,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:402,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:404,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:406,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:410,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:411,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:414,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:417,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:420,1
    - Dst: PercentDecode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:423,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: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:425,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:427,1
    - Dst: GrpcStatusToString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:435,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:437,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:438,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:445,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:446,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:448,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:449,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:450,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:451,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:452,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:453,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:454,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:455,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:456,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:464,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:466,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:468,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:469,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:470,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:471,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:472,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:475,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:476,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:477,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:483,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:484,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:486,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:488,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:490,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:491,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:496,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:500,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:501,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:503,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:510,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:512,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:518,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:521,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:522,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:523,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:524,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:525,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:528,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:531,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:532,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:533,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:537,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:538,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:539,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:544,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:549,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:553,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:555,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:562,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:563,1
    CyclomaticComplexity: 56
    EdgeCount: 56
    ICount: 126
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 349
    functionDepth: 11
    functionLinenumber: 349
    functionLinenumberEnd: 564
    functionName: brpc::policy::ProcessHttpResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PercentDecode
    - Socket*::read_will_be_progressive
    - butil::EnsureString
    - DestroyingPtr::get
    - Controller*::response
    - ControllerPrivateAccessor::span
    - std::min
    - LOG
    - std::string::append
    - brpc::policy::GzipDecompress
    - ParsePbFromIOBuf
    - empty
    - swap
    - Controller*::response_attachment
    - std::string::size
    - LOG_IF
    - brpc::policy::RemoveGrpcPrefix
    - ParsePbTextFromIOBuf
    - ControllerPrivateAccessor::OnResponse
    - DestroyingPtr::header
    - std::string*::data
    - std::string*::c_str
    - auto::set_response_size
    - auto::set_start_parse_us
    - CHECK
    - static_cast<int>
    - HttpHeader*::reason_phrase
    - DestroyingPtr::parsed_length
    - strcasecmp
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - strtol
    - TRACEPRINTF
    - DestroyingPtr::reset
    - auto::set_base_real_us
    - InputMessageBase*::base_real_us
    - Controller*::http_response
    - size
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::minor_version
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - HttpHeader*::Swap
    - butil::cpuwide_time_us
    - DestroyingPtr::read_body_progressively
    - append_to
    - Controller*::SetFailed
    - copy_to
    - InputMessageBase*::received_us
    - HttpHeader*::major_version
    - GrpcStatusToErrorCode
    - Socket*::correlation_id
    - auto::set_received_us
    - HttpHeader*::status_code
    - berror
    - static_cast<H2StreamContext*>
    - DestroyingPtr::body
    - GrpcStatusToString
    - bthread_id_lock
    - brpc::policy::ProtoJsonToProtoMessage
    - HttpHeader*::GetHeader
    - butil::string_printf
    - H2StreamContext*::correlation_id
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    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:569,1
    - Dst: Controller*::request_protocol
      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:573,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:573,1
    - Dst: ControllerPrivateAccessor::protocol_param
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:574,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:575,1
    - Dst: mutable_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:576,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:577,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:578,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:579,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:581,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:586,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:587,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:589,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:591,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:592,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:596,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:601,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:604,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:608,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:612,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:615,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:616,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:617,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:618,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:621,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:623,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:624,1
    - Dst: brpc::policy::ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:627,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:628,1
    - Dst: brpc::policy::ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:632,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:633,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:637,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:639,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:646,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:647,1
    - Dst: uri
      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:651,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:652,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:653,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:654,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:656,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:658,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:659,1
    - Dst: brpc::policy::GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:660,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:661,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:664,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:666,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:669,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:675,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:676,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:677,1
    - Dst: Controller*::log_id
      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:679,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: Controller*::request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:680,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:685,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:686,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:687,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:688,1
    - Dst: Controller*::set_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: brpc::policy::get_h2_global_stream_creator
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:691,1
    - Dst: SetHeader
      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:699,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:700,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: Controller*::timeout_ms
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:701,1
    - Dst: brpc::policy::AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:704,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:710,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:712,1
    - Dst: std::string::reserve
      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: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:715,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:716,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:717,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:718,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: google::protobuf::MethodDescriptor*::name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:719,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:720,1
    - Dst: ControllerPrivateAccessor::span
      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: auto::trace_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: auto::span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:727,1
    - Dst: SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:728,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 33
    EdgeCount: 33
    ICount: 113
    argCount: 2
    argNames:
    - cntl
    - pbreq
    argTypes:
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 566
    functionDepth: 4
    functionLinenumber: 566
    functionLinenumberEnd: 731
    functionName: brpc::policy::SerializeHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - Controller*::request_protocol
    - butil::EnsureString
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - std::string::append
    - brpc::policy::ProtoMessageToProtoJson
    - CompressTypeToCStr
    - auto::parent_span_id
    - brpc::policy::GzipCompress
    - Controller*::timeout_ms
    - Controller*::method
    - set_method
    - Controller*::request_compress_type
    - TRACEPRINTF
    - Controller*::connection_type
    - std::string::push_back
    - append
    - Controller*::http_request
    - google::protobuf::MethodDescriptor*::service
    - size
    - content_type
    - mutable_content_type
    - set_content_type
    - ControllerPrivateAccessor::protocol_param
    - find
    - google::protobuf::Message*::IsInitialized
    - Controller*::request_attachment
    - brpc::policy::get_h2_global_stream_creator
    - google::protobuf::Message*::GetTypeName
    - auto::span_id
    - Controller*::log_id
    - google::protobuf::Message*::InitializationErrorString
    - before_http_1_1
    - Controller*::set_stream_creator
    - google::protobuf::MethodDescriptor*::name
    - GetHeader
    - auto::trace_id
    - reserve
    - SetHeader
    - uri
    - Controller*::has_log_id
    - brpc::policy::ProtoMessageToJson
    - Controller*::request_id
    - std::string::reserve
    - butil::string_printf
    - Controller*::SetFailed
    - brpc::policy::ParseContentType
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    - brpc::policy::AddGrpcPrefix
    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:740,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:741,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:744,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:745,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:747,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:748,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:750,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:755,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:759,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:761,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:762,1
    - Dst: brpc::policy::PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:764,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: 766
      start: 733
    functionDepth: 2
    functionLinenumber: 733
    functionLinenumberEnd: 766
    functionName: brpc::policy::PackHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - HttpHeader*::SetHeader
    - HttpHeader*::method
    - Controller*::request_attachment
    - MakeRawHttpRequest
    - Controller*::remote_side
    - Controller*::connection_type
    - HttpHeader*::GetHeader
    - brpc::policy::PrintMessage
    - Controller*::SetFailed
    - Controller*::http_request
    - Authenticator*::GenerateCredential
    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:770,1
    - Dst: std::string*::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:771,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 768
    functionDepth: 0
    functionLinenumber: 768
    functionLinenumberEnd: 772
    functionName: brpc::policy::SupportGzip
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::http_request
    - std::string*::find
    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: 778
      start: 777
    functionDepth: 0
    functionLinenumber: 777
    functionLinenumberEnd: 778
    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: 784
      start: 779
    functionDepth: 0
    functionLinenumber: 779
    functionLinenumberEnd: 784
    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:787,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - HttpResponseSender
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 786
    functionDepth: 1
    functionLinenumber: 786
    functionLinenumberEnd: 796
    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: 799
      start: 799
    functionDepth: 0
    functionLinenumber: 799
    functionLinenumberEnd: 799
    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: 800
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 800
    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: 801
      start: 801
    functionDepth: 0
    functionLinenumber: 801
    functionLinenumberEnd: 801
    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: 802
      start: 802
    functionDepth: 0
    functionLinenumber: 802
    functionLinenumberEnd: 802
    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:814,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - s
    argTypes:
    - HttpResponseSender*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 814
    functionDepth: 1
    functionLinenumber: 814
    functionLinenumberEnd: 814
    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:817,1
    - Dst: _messages::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:817,1
    - Dst: _messages::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 821
    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:830,1
    - Dst: server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: Return
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:831,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:834,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:839,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:841,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:844,1
    - Dst: Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:845,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:847,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:848,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:852,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:853,1
    - Dst: HttpHeader*::set_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:854,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:855,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:857,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:858,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:860,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:861,1
    - Dst: ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:867,1
    - Dst: HttpHeader*::is_http2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:868,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:875,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:877,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:879,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:882,1
    - Dst: google::protobuf::Message*::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:884,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:885,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:886,1
    - Dst: brpc::URI::Print
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:889,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:890,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: google::protobuf::Message*::GetTypeName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:891,1
    - Dst: ProtoMessageToProtoJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:894,1
    - Dst: ProtoMessageToJson
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:896,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:914,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:915,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:917,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:918,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:920,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:921,1
    - Dst: strcasecmp
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:925,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:926,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:933,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:937,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:938,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:939,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:944,1
    - Dst: HttpHeader*::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:945,1
    - Dst: ErrorCodeToStatusCode
      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: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:948,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:949,1
    - Dst: Controller*::does_manage_http_body_on_error
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:951,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:955,1
    - Dst: HttpHeader*::set_content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:956,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:957,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:960,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::before_http_1_1
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:962,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:963,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:965,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:966,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:967,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:971,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:972,1
    - Dst: SupportGzip
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:974,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:975,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:976,1
    - Dst: GzipCompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:977,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:978,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:981,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:983,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:986,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:991,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1004,1
    - Dst: AddGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1011,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1016,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1021,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: SocketMessagePtr::EstimatedByteSize
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1024,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1026,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::has_progressive_writer
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1030,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1031,1
    - Dst: HttpHeader*::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1033,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1034,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1035,1
    - Dst: PrintMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1037,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1040,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1042,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1048,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1049,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1054,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1057,1
    CyclomaticComplexity: 50
    EdgeCount: 50
    ICount: 138
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1059
      start: 827
    functionDepth: 5
    functionLinenumber: 827
    functionLinenumberEnd: 1059
    functionName: HttpResponseSender::~HttpResponseSender()
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::does_manage_http_body_on_error
    - butil::EnsureString
    - Controller*::has_progressive_writer
    - SupportGzip
    - google::protobuf::Message*::SerializeToZeroCopyStream
    - ControllerPrivateAccessor::span
    - Response
    - LOG
    - server
    - MakeRawHttpResponse
    - CHECK_EQ
    - Controller*::response_attachment
    - std::string*::empty
    - butil::IOBuf::size
    - google::protobuf::Message*::GetDescriptor
    - HttpHeader*::before_http_1_1
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - ProtoMessageToProtoJson
    - HttpHeader*::SetHeader
    - std::string*::c_str
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - Return
    - TRACEPRINTF
    - strcasecmp
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - Controller*::http_request
    - Controller*::http_response
    - get
    - HttpHeader*::content_type
    - Socket*::SetFailed
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - ProtoMessageToJson
    - HttpHeader*::is_http2
    - SocketMessagePtr::EstimatedByteSize
    - PrintMessage
    - HttpHeader*::set_version
    - google::protobuf::Message*::GetTypeName
    - HttpHeader*::set_status_code
    - butil::cpuwide_time_us
    - GzipCompress
    - HttpHeader*::set_content_type
    - PLOG_IF
    - bthread_id_join
    - HttpHeader*::major_version
    - HttpHeader*::set_method
    - Socket*::description
    - HttpHeader*::status_code
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - AddGrpcPrefix
    - auto::set_sent_us
    - ErrorCodeToStatusCode
    - if
    - HttpHeader*::method
    - ParseContentType
    - Socket*::Write
    - auto::set_start_send_us
    - HttpHeader*::GetHeader
    - butil::string_printf
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - brpc::URI::Print
    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:1070,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1075,1
    - Dst: size
      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*::reserve
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1076,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1077,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1079,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1081,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1082,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1084,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: 1086
      start: 1063
    functionDepth: 1
    functionLinenumber: 1063
    functionLinenumberEnd: 1086
    functionName: brpc::policy::FillUnresolvedPath
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - std::string*::append
    - std::string*::reserve
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - std::string*::clear
    - std::string*::push_back
    - field
    - std::string*::empty
    - c_str
    - size
    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:1092,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1095,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1096,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1098,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1100,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1103,1
    - Dst: ServerPrivateAccessor::FindServicePropertyByName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1104,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1116,1
    - Dst: Server::ServiceProperty*::restful_map::FindMethodProperty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1118,1
    - Dst: Server::ServiceProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1122,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1129,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1132,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1135,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1141,1
    - Dst: brpc::policy::FillUnresolvedPath
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1143,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1148,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1149,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1150,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: 1155
      start: 1088
    functionDepth: 2
    functionLinenumber: 1088
    functionLinenumberEnd: 1155
    functionName: brpc::policy::FindMethodPropertyByURIImpl
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::StringSplitter::length
    - ServerPrivateAccessor::FindServicePropertyByName
    - butil::StringSplitter::field
    - Server::ServiceProperty*::service::GetDescriptor
    - brpc::policy::FillUnresolvedPath
    - butil::StringPiece::empty
    - Server::ServiceProperty*::restful_map::FindMethodProperty
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - c_str
    - butil::StringPiece::set
    - size
    - ServerPrivateAccessor::FindServicePropertyByFullName
    - 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:1162,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1175,1
    - Dst: ServerPrivateAccessor::global_restful_map
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1176,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: 1180
      start: 1158
    functionDepth: 3
    functionLinenumber: 1158
    functionLinenumberEnd: 1180
    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: 24
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<HttpContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1185,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1187,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1195,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1198,1
    - Dst: Socket*::http_request_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1199,1
    - Dst: HttpContext::HttpContext
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1201,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1202,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1209,1
    - Dst: HttpContext*::ParseFromArray
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1214,1
    - Dst: HttpContext*::ParseFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1218,1
    - Dst: HttpContext*::body_too_large
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1220,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1221,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1222,1
    - Dst: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1224,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1226,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1228,1
    - Dst: HttpHeader::SetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1229,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1230,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1235,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1237,1
    - Dst: HttpContext*::is_stage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1239,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1243,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1244,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1246,1
    - Dst: HttpContext*::RemoveOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1249,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1250,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1251,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1253,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1258,1
    - Dst: HTTP_PARSER_ERRNO
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1259,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1260,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1264,1
    - Dst: HttpContext*::Completed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1265,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1266,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1267,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1268,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1269,1
    - Dst: Socket*::OnProgressiveReadCompleted
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1270,1
    - Dst: HttpContext*::stage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1273,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1282,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1283,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1284,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1287,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1289,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1290,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1293,1
    - Dst: HttpContext*::CheckProgressiveRead
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1297,1
    - Dst: Socket*::is_read_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1298,1
    - Dst: HttpContext*::AddOneRefForStage2
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1301,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1302,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1304,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1306,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1308,1
    - Dst: is_failed_after_queries
      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: Socket*::ReleaseAdditionalReference
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1327,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1333,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1337,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1339,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1340,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1343,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1344,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1346,1
    - Dst: is_failed_after_http_version
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: HttpContext*::parser
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1349,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1350,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 100
    argCount: 4
    argNames:
    - source
    - socket
    - read_eof
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - bool
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1355
      start: 1182
    functionDepth: 1
    functionLinenumber: 1182
    functionLinenumberEnd: 1355
    functionName: brpc::policy::ParseHttpMessage
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - Socket*::is_read_progressive
    - HttpContext*::body_too_large
    - static_cast<HttpContext*>
    - MakeRawHttpResponse
    - Socket*::http_request_method
    - LOG
    - HttpContext*::RemoveOneRefForStage2
    - Socket*::parsing_context
    - HttpContext*::Completed
    - CHECK_EQ
    - Socket*::ReleaseAdditionalReference
    - is_failed_after_http_version
    - Socket*::release_parsing_context
    - HttpContext*::header
    - HttpContext*::AddOneRefForStage2
    - HttpContext*::is_stage2
    - HttpHeader::set_status_code
    - HttpContext*::parser
    - Socket*::reset_parsing_context
    - HttpContext*::CheckProgressiveRead
    - butil::IOBuf*::pop_front
    - http_errno_description
    - MakeParseError
    - Socket*::OnProgressiveReadCompleted
    - Socket*::CreatedByConnect
    - HttpContext*::ParseFromIOBuf
    - HttpHeader::SetHeader
    - HttpContext*::stage
    - MakeMessage
    - HttpContext::HttpContext
    - is_failed_after_queries
    - HTTP_PARSER_ERRNO
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - HttpContext*::ParseFromArray
    - butil::IOBuf*::empty
    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:1359,1
    - Dst: static_cast<const H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1362,1
    - Dst: brpc::Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1363,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1364,1
    - Dst: brpc::Controller::http_response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1365,1
    - Dst: brpc::Controller::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1366,1
    - Dst: brpc::policy::H2UnsentResponse::New
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1369,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1372,1
    - Dst: HttpHeader::set_status_code
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1381,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1382,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1383,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1384,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1386,1
    - Dst: MakeRawHttpResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1387,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1390,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1391,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: 1393
      start: 1357
    functionDepth: 4
    functionLinenumber: 1357
    functionLinenumberEnd: 1393
    functionName: brpc::policy::SendUnauthorizedResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - static_cast<const H2StreamContext*>
    - brpc::Controller::SetFailed
    - brpc::Controller::Controller
    - HttpContext*::header
    - H2StreamContext*::stream_id
    - Socket*::Write
    - PLOG_IF
    - HttpHeader::set_status_code
    - MakeRawHttpResponse
    - butil::IOBuf::append
    - brpc::Controller::http_response
    - empty
    - butil::string_printf
    - brpc::policy::H2UnsentResponse::New
    - c_str
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendUnauthorizedResponse(const std::string& user_error_text, Socket*
      socket, const InputMessageBase* msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1396,1
    - Dst: InputMessageBase*::socket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1397,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1400,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1405,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1406,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1408,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1411,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1412,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1418,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1420,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1423,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: HttpContext*::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1424,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1425,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1427,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1428,1
    - Dst: brpc::policy::SendUnauthorizedResponse
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1429,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 21
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1434
      start: 1395
    functionDepth: 5
    functionLinenumber: 1395
    functionLinenumberEnd: 1434
    functionName: brpc::policy::VerifyHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - Socket*::local_side
    - brpc::policy::FindMethodPropertyByURI
    - Server::MethodProperty*::service::GetDescriptor
    - HttpContext*::header
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SendUnauthorizedResponse
    - Socket*::mutable_auth_context
    - InputMessageBase*::socket
    - Server*::options
    - Authenticator*::GetUnauthorizedErrorText
    - Socket*::remote_side
    - butil::EndPoint::EndPoint
    - brpc::policy::GetUserAddressFromHeader
    - InputMessageBase*::arg
    - Authenticator*::VerifyCredential
    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:1447,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1449,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1450,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1451,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1454,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1456,1
    - Dst: HttpResponseSender::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1460,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1462,1
    - Dst: static_cast<H2StreamContext*>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1464,1
    - Dst: HttpResponseSender::set_h2_stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: H2StreamContext*::stream_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1465,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1469,1
    - Dst: DestroyingPtr::header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1470,1
    - Dst: DestroyingPtr::body
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1471,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1472,1
    - Dst: brpc::policy::GetUserAddressFromHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1473,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1474,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1477,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1478,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1479,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1481,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1483,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1484,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1486,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1491,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1497,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1500,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1504,1
    - Dst: Controller*::set_request_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1506,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1511,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1512,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1516,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1517,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1518,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1521,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1524,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1526,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1530,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1532,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1534,1
    - Dst: InputMessageBase*::base_real_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1535,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1536,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1537,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1538,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: InputMessageBase*::received_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1539,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1540,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1541,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: DestroyingPtr::parsed_length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1542,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1545,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1546,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1550,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1552,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1554,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1556,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1559,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1560,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1561,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1563,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1564,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1565,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1568,1
    - Dst: brpc::policy::FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1572,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1576,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1577,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1579,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1582,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1585,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1586,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1587,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1591,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1593,1
    - Dst: HttpResponseSender::set_method_status
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1594,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1597,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1598,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1599,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1605,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1610,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1611,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1613,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1614,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1617,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1618,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1619,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1623,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1627,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1631,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1633,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1639,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: brpc::policy::Get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1640,1
    - Dst: HttpResponseSender::set_messages
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1641,1
    - Dst: RpcPBMessages*::Request
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1642,1
    - Dst: RpcPBMessages*::Response
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1643,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1645,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1647,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1648,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1649,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1653,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1658,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1660,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1661,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1663,1
    - Dst: brpc::policy::ParseContentType
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1669,1
    - Dst: brpc::policy::RemoveGrpcPrefix
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1673,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1674,1
    - Dst: GetHeader
      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:1680,1
    - Dst: ConvertGrpcTimeoutToUS
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1687,1
    - Dst: ControllerPrivateAccessor::set_deadline_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1689,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1690,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1693,1
    - Dst: TRACEPRINTF
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1696,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1697,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1698,1
    - Dst: brpc::policy::GzipDecompress
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1699,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1700,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1703,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1706,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1707,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1708,1
    - Dst: ParsePbTextFromIOBuf
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1712,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1713,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1714,1
    - Dst: brpc::policy::ProtoJsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1718,1
    - Dst: Controller*::set_pb_bytes_to_base64
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1722,1
    - Dst: Controller*::set_pb_single_repeated_to_array
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1723,1
    - Dst: brpc::policy::JsonToProtoMessage
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1724,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1730,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1732,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1733,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1734,1
    - Dst: butil::EndPoint::EndPoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1736,1
    - Dst: MakeRawHttpRequest
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1737,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1738,1
    - Dst: DestroyingPtr::read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1742,1
    - Dst: ControllerPrivateAccessor::set_readable_progressive_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: DestroyingPtr::get
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1743,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1746,1
    - Dst: HttpResponseSenderAsDone::HttpResponseSenderAsDone
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1750,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1751,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1754,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1755,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1758,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1760,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1761,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1762,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1764,1
    CyclomaticComplexity: 61
    EdgeCount: 61
    ICount: 206
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1766
      start: 1446
    functionDepth: 11
    functionLinenumber: 1446
    functionLinenumberEnd: 1766
    functionName: brpc::policy::ProcessHttpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - brpc::policy::Get
    - brpc::policy::GzipDecompress
    - empty
    - DestroyingPtr::header
    - std::string*::c_str
    - std::string
    - TRACEPRINTF
    - ControllerPrivateAccessor::set_method
    - Controller*::http_request
    - Socket*::id
    - size
    - google::protobuf::Message*::IsInitialized
    - bthread_assign_data
    - Controller*::request_attachment
    - butil::cpuwide_time_us
    - Controller*::set_pb_single_repeated_to_array
    - SampledRequest*::meta::set_attachment_size
    - Socket*::remote_side
    - static_cast<H2StreamContext*>
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - AskToBeSampled
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - swap
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - google::protobuf::Message*::GetDescriptor
    - ParsePbTextFromIOBuf
    - RpcPBMessages*::Request
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - InputMessageBase*::base_real_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::MethodDescriptor*::input_type
    - content_type
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - HttpResponseSender::set_received_us
    - std::shared_ptr::set_log_id
    - strtoull
    - butil::EndPoint::EndPoint
    - GetHeader
    - butil::StringSplitter::length
    - brpc::policy::EndRunningCallMethodInPool
    - DestroyingPtr::body
    - BadMethodRequest::set_service_name
    - HttpResponseSender::set_method_status
    - brpc::policy::ParseContentType
    - Server*::AcceptRequest
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - ConvertGrpcTimeoutToUS
    - butil::StringSplitter::field
    - butil::gettimeofday_us
    - DestroyingPtr::get
    - MakeRawHttpRequest
    - HttpResponseSender::set_messages
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - HttpResponseSender::set_h2_stream_id
    - brpc::policy::FindMethodPropertyByURI
    - std::string::c_str
    - brpc::policy::JsonToProtoMessage
    - H2StreamContext*::stream_id
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - pbrpcframework::get_prototype_by_method_descriptor
    - __builtin_expect
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - ControllerPrivateAccessor::set_readable_progressive_attachment
    - Server::MethodProperty*::service::GetDescriptor
    - SampledRequest*::submit
    - brpc::Span::CreateServerSpan
    - LOG
    - std::shared_ptr::set_request_size
    - brpc::policy::RemoveGrpcPrefix
    - EndRunningUserCodeInPlace
    - RpcPBMessages*::Response
    - Controller*::set_log_id
    - PLOG
    - Server::MethodProperty*::service::CallMethod
    - DestroyingPtr::parsed_length
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Controller::Controller
    - ControllerPrivateAccessor::set_deadline_us
    - c_str
    - google::protobuf::Service*::GetDescriptor
    - Server::MethodProperty*::method::full_name
    - DestroyingPtr::read_body_progressively
    - Controller*::log_id
    - InputMessageBase*::received_us
    - brpc::policy::GetUserAddressFromHeader
    - Controller*::set_pb_bytes_to_base64
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - WebEscape
    - uri
    - HttpResponseSenderAsDone::HttpResponseSenderAsDone
    - brpc::policy::ProtoJsonToProtoMessage
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::set_request_id
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void ProcessHttpRequest(InputMessageBase *msg)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ParseURL
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1772,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1773,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1785,1
    - Dst: str2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1788,1
    - Dst: hostname2endpoint
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1789,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 23
    argCount: 2
    argNames:
    - point
    - server_addr_and_port
    argTypes:
    - butil::EndPoint*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1794
      start: 1768
    functionDepth: 1
    functionLinenumber: 1768
    functionLinenumberEnd: 1794
    functionName: brpc::policy::ParseHttpServerAddress
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ParseURL
    - std::string::c_str
    - std::string::empty
    - hostname2endpoint
    - LOG
    - str2endpoint
    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:1799,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1800,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1801
      start: 1796
    functionDepth: 0
    functionLinenumber: 1796
    functionLinenumberEnd: 1801
    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:1804,1
    - Dst: FindMethodPropertyByURI
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1808,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1809,1
    - Dst: const_cast<std::string *>
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1810,1
    - Dst: set_read_body_progressively
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1812,1
    - Dst: Socket*::read_will_be_progressive
      Src: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp:1813,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 8
    argCount: 2
    argNames:
    - arg
    - socket
    argTypes:
    - void*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1815
      start: 1803
    functionDepth: 0
    functionLinenumber: 1803
    functionLinenumberEnd: 1815
    functionName: brpc::policy::HttpContext::CheckProgressiveRead
    functionSourceFile: /src/brpc/src/brpc/policy/http_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - set_read_body_progressively
    - Socket*::read_will_be_progressive
    - has_progressive_read_method
    - FindMethodPropertyByURI
    - const_cast<std::string *>
    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: brpc::rdma::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: brpc::policy::ParseRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRdmaHandshake(butil::IOBuf* source, Socket* socket,\n
      \                              bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: brpc::policy::ProcessRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRdmaHandshake(InputMessageBase* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: brpc::policy::ParseRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRdmaHandshake(butil::IOBuf* source, Socket* socket,\n
      \                              bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: brpc::policy::ProcessRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRdmaHandshake(InputMessageBase* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: brpc::policy::ParseRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRdmaHandshake(butil::IOBuf* source, Socket* socket,\n
      \                              bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: brpc::policy::ProcessRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRdmaHandshake(InputMessageBase* msg)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:29,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 30
      start: 27
    functionDepth: 1
    functionLinenumber: 27
    functionLinenumberEnd: 30
    functionName: brpc::policy::ParseRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseRdmaHandshake(butil::IOBuf* source, Socket* socket,\n
      \                              bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp:37,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - msg
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 32
    functionDepth: 1
    functionLinenumber: 32
    functionLinenumberEnd: 38
    functionName: brpc::policy::ProcessRdmaHandshake
    functionSourceFile: /src/brpc/src/brpc/policy/rdma_handshake_protocol.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void ProcessRdmaHandshake(InputMessageBase* msg)
  - 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: brpc::policy::P2CEwmaLoadBalancer::NodeStat
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NodeStat()
  - 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: brpc::policy::P2CEwmaLoadBalancer::NodeStat
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NodeStat()
  - 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: brpc::policy::P2CEwmaLoadBalancer::NodeStat
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NodeStat()
  - 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: brpc::policy::P2CEwmaLoadBalancer::NodeStat
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NodeStat()
  - 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*::assign
    - std::string*::append
    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*::assign
    - std::string*::append
    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*::assign
    - std::string*::append
    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*::assign
    - std::string*::append
    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:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::copy_to
    - butil::IOBuf*::size
    - std::string*::empty
    - butil::IOBuf::IOBuf
    - butil::back_char
    - butil::IOBuf*::empty
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - hostname2endpoint
    - LOG
    - swap
    - std::unique_ptr::Init
    - Channel::Channel
    - Controller::Failed
    - butil::StringPiece::CopyToString
    - butil::StringPiece::substr
    - append
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - CallMethod
    - SplitIntoServerAndTag
    - Controller::response_attachment
    - butil::StringPiece::size
    - butil::StringPiece::data
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - reserve
    - std::vector<ServerNode>*::push_back
    - CutLineFromIOBuf
    - Controller::ErrorText
    - butil::StringPiece::find
    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:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::copy_to
    - butil::IOBuf*::size
    - std::string*::empty
    - butil::IOBuf::IOBuf
    - butil::back_char
    - butil::IOBuf*::empty
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - hostname2endpoint
    - LOG
    - swap
    - std::unique_ptr::Init
    - Channel::Channel
    - Controller::Failed
    - butil::StringPiece::CopyToString
    - butil::StringPiece::substr
    - append
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - CallMethod
    - SplitIntoServerAndTag
    - Controller::response_attachment
    - butil::StringPiece::size
    - butil::StringPiece::data
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - reserve
    - std::vector<ServerNode>*::push_back
    - CutLineFromIOBuf
    - Controller::ErrorText
    - butil::StringPiece::find
    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:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::copy_to
    - butil::IOBuf*::size
    - std::string*::empty
    - butil::IOBuf::IOBuf
    - butil::back_char
    - butil::IOBuf*::empty
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - hostname2endpoint
    - LOG
    - swap
    - std::unique_ptr::Init
    - Channel::Channel
    - Controller::Failed
    - butil::StringPiece::CopyToString
    - butil::StringPiece::substr
    - append
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - CallMethod
    - SplitIntoServerAndTag
    - Controller::response_attachment
    - butil::StringPiece::size
    - butil::StringPiece::data
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - reserve
    - std::vector<ServerNode>*::push_back
    - CutLineFromIOBuf
    - Controller::ErrorText
    - butil::StringPiece::find
    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:
    - butil::IOBuf*::cutn
    - butil::IOBuf*::cut_until
    - std::string*::size
    - std::string*::resize
    - butil::IOBuf::copy_to
    - butil::IOBuf*::size
    - std::string*::empty
    - butil::IOBuf::IOBuf
    - butil::back_char
    - butil::IOBuf*::empty
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - hostname2endpoint
    - LOG
    - swap
    - std::unique_ptr::Init
    - Channel::Channel
    - Controller::Failed
    - butil::StringPiece::CopyToString
    - butil::StringPiece::substr
    - append
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - c_str
    - str2endpoint
    - CallMethod
    - SplitIntoServerAndTag
    - Controller::response_attachment
    - butil::StringPiece::size
    - butil::StringPiece::data
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - reserve
    - std::vector<ServerNode>*::push_back
    - CutLineFromIOBuf
    - Controller::ErrorText
    - butil::StringPiece::find
    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:
    - butil::StringPiece*::clear
    - data
    - isspace
    - butil::StringPiece*::set
    - size
    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:
    - getline
    - hostname2endpoint
    - LOG
    - butil::ScopedFILE::get
    - PLOG
    - butil::StringPiece::CopyToString
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - str2endpoint
    - SplitIntoServerAndTag
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::set::insert
    - free
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - std::vector<ServerNode>*::push_back
    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::init
    - bthread_usleep
    - PLOG
    - NamingServiceActions*::ResetServers
    - butil::FileWatcher::check_and_consume
    - CHECK
    - brpc::policy::FileNamingService::GetServers
    - LOG
    - butil::FileWatcher::FileWatcher
    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:
    - butil::StringPiece*::clear
    - data
    - isspace
    - butil::StringPiece*::set
    - size
    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:
    - getline
    - hostname2endpoint
    - LOG
    - butil::ScopedFILE::get
    - PLOG
    - butil::StringPiece::CopyToString
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - str2endpoint
    - SplitIntoServerAndTag
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::set::insert
    - free
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - std::vector<ServerNode>*::push_back
    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::init
    - bthread_usleep
    - PLOG
    - NamingServiceActions*::ResetServers
    - butil::FileWatcher::check_and_consume
    - CHECK
    - brpc::policy::FileNamingService::GetServers
    - LOG
    - butil::FileWatcher::FileWatcher
    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:
    - butil::StringPiece*::clear
    - data
    - isspace
    - butil::StringPiece*::set
    - size
    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:
    - getline
    - hostname2endpoint
    - LOG
    - butil::ScopedFILE::get
    - PLOG
    - butil::StringPiece::CopyToString
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - str2endpoint
    - SplitIntoServerAndTag
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::set::insert
    - free
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - std::vector<ServerNode>*::push_back
    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::init
    - bthread_usleep
    - PLOG
    - NamingServiceActions*::ResetServers
    - butil::FileWatcher::check_and_consume
    - CHECK
    - brpc::policy::FileNamingService::GetServers
    - LOG
    - butil::FileWatcher::FileWatcher
    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:
    - butil::StringPiece*::clear
    - data
    - isspace
    - butil::StringPiece*::set
    - size
    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:
    - getline
    - hostname2endpoint
    - LOG
    - butil::ScopedFILE::get
    - PLOG
    - butil::StringPiece::CopyToString
    - butil::BasicStringPiece::BasicStringPiece
    - fopen
    - const_cast<char*>
    - std::vector<ServerNode>*::size
    - str2endpoint
    - SplitIntoServerAndTag
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::set::insert
    - free
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - std::vector<ServerNode>*::push_back
    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::init
    - bthread_usleep
    - PLOG
    - NamingServiceActions*::ResetServers
    - butil::FileWatcher::check_and_consume
    - CHECK
    - brpc::policy::FileNamingService::GetServers
    - LOG
    - butil::FileWatcher::FileWatcher
    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: auto::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: auto::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: auto::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:
    - options
    - ControllerPrivateAccessor::span
    - CHECK_EQ
    - ErrorCode
    - ControllerPrivateAccessor::get_sending_socket
    - SetFailed
    - auto::set_response_size
    - body::length
    - IsCloseConnection
    - Socket*::SetFailed
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - Socket*::description
    - bthread_id_create
    - auto::set_sent_us
    - body::movable
    - ServerPrivateAccessor
    - Socket*::Write
    - auto::set_start_send_us
    - butil::IOBuf::IOBuf
    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: auto::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::NsheadClosure::SetMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - auto::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:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:159,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:166,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:169,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:174,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:179,1
    - Dst: butil::IOBuf*::cutn
      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: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 183
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 202
    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:210,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:217,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: 218
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 218
    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:221,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:224,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:230,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:233,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:235,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:238,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:249,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:251,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:254,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:258,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:268,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:274,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:280,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:285,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:288,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:292,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:296,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:301,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:325,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:328,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:333,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:338,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:340,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:345,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:347,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:351,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 220
    functionDepth: 2
    functionLinenumber: 220
    functionLinenumberEnd: 354
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - malloc
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - CHECK
    - Server*::thread_local_options
    - SampledRequest*::meta::set_nshead
    - butil::endpoint2str
    - DestroyingPtr::reset
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - DestroyingPtr::payload::swap
    - Socket*::id
    - Socket*::SetFailed
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - DestroyingPtr::meta::fetch
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - NsheadService*::ProcessNsheadRequest
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - ServerPrivateAccessor::acceptor
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - NsheadClosure::NsheadClosure
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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:357,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:371,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:378,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:379,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:382,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:387,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 389
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:392,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:393,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 398
    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:403,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:406,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:414,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:415,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:418,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:419,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,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: 421
      start: 400
    functionDepth: 2
    functionLinenumber: 400
    functionLinenumberEnd: 421
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - Controller*::response
    - Controller*::has_log_id
    - Controller*::log_id
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:432,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:433,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:438,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:447,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: 448
      start: 423
    functionDepth: 1
    functionLinenumber: 423
    functionLinenumberEnd: 448
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:159,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:166,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:169,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:174,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:179,1
    - Dst: butil::IOBuf*::cutn
      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: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 183
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 202
    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:210,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:217,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: 218
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 218
    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:221,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:224,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:230,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:233,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:235,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:238,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:249,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:251,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:254,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:258,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:268,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:274,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:280,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:285,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:288,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:292,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:296,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:301,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:325,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:328,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:333,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:338,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:340,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:345,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:347,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:351,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 220
    functionDepth: 2
    functionLinenumber: 220
    functionLinenumberEnd: 354
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - malloc
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - CHECK
    - Server*::thread_local_options
    - SampledRequest*::meta::set_nshead
    - butil::endpoint2str
    - DestroyingPtr::reset
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - DestroyingPtr::payload::swap
    - Socket*::id
    - Socket*::SetFailed
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - DestroyingPtr::meta::fetch
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - NsheadService*::ProcessNsheadRequest
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - ServerPrivateAccessor::acceptor
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - NsheadClosure::NsheadClosure
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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:357,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:371,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:378,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:379,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:382,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:387,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 389
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:392,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:393,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 398
    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:403,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:406,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:414,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:415,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:418,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:419,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,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: 421
      start: 400
    functionDepth: 2
    functionLinenumber: 400
    functionLinenumberEnd: 421
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - Controller*::response
    - Controller*::has_log_id
    - Controller*::log_id
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:432,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:433,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:438,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:447,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: 448
      start: 423
    functionDepth: 1
    functionLinenumber: 423
    functionLinenumberEnd: 448
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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: auto::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: auto::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: auto::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:
    - options
    - ControllerPrivateAccessor::span
    - CHECK_EQ
    - ErrorCode
    - ControllerPrivateAccessor::get_sending_socket
    - SetFailed
    - auto::set_response_size
    - body::length
    - IsCloseConnection
    - Socket*::SetFailed
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - Socket*::description
    - bthread_id_create
    - auto::set_sent_us
    - body::movable
    - ServerPrivateAccessor
    - Socket*::Write
    - auto::set_start_send_us
    - butil::IOBuf::IOBuf
    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: auto::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:148,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ' full_method_name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 150
    functionName: brpc::NsheadClosure::SetMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - auto::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:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:159,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:166,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:169,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:174,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:179,1
    - Dst: butil::IOBuf*::cutn
      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: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 183
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 202
    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:210,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:217,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: 218
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 218
    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:221,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:224,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:230,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:233,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:235,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:238,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:249,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:251,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:254,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:258,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:268,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:274,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:280,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:285,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:288,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:292,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:296,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:301,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:325,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:328,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:333,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:338,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:340,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:345,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:347,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:351,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 220
    functionDepth: 2
    functionLinenumber: 220
    functionLinenumberEnd: 354
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - malloc
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - CHECK
    - Server*::thread_local_options
    - SampledRequest*::meta::set_nshead
    - butil::endpoint2str
    - DestroyingPtr::reset
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - DestroyingPtr::payload::swap
    - Socket*::id
    - Socket*::SetFailed
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - DestroyingPtr::meta::fetch
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - NsheadService*::ProcessNsheadRequest
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - ServerPrivateAccessor::acceptor
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - NsheadClosure::NsheadClosure
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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:357,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:371,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:378,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:379,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:382,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:387,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 389
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:392,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:393,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 398
    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:403,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:406,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:414,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:415,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:418,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:419,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,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: 421
      start: 400
    functionDepth: 2
    functionLinenumber: 400
    functionLinenumberEnd: 421
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - Controller*::response
    - Controller*::has_log_id
    - Controller*::log_id
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:432,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:433,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:438,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:447,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: 448
      start: 423
    functionDepth: 1
    functionLinenumber: 423
    functionLinenumberEnd: 448
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:159,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:166,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:169,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:174,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:176,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:179,1
    - Dst: butil::IOBuf*::cutn
      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: MakeMessage
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:182,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 20
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 183
    functionName: brpc::policy::ParseNsheadMessage
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 11
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:198,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 202
      start: 196
    functionDepth: 0
    functionLinenumber: 196
    functionLinenumberEnd: 202
    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:210,1
    - Dst: EndRunningUserCodeInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:217,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: 218
      start: 204
    functionDepth: 0
    functionLinenumber: 204
    functionLinenumberEnd: 218
    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:221,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:224,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:225,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:226,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:230,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:233,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:235,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:238,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:241,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:244,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:249,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:251,1
    - Dst: SampledRequest*::meta::set_nshead
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:252,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:254,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:258,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:261,1
    - Dst: NsheadClosure::NsheadClosure
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:268,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:274,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:275,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:280,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:281,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:285,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:286,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:288,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:289,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:290,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:292,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:296,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:297,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:301,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:302,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:303,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:304,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:305,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:306,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:307,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:308,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:309,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:313,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:314,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:317,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:318,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:319,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:322,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:323,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:325,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:328,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:329,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:333,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:338,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:340,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:341,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:342,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:345,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:347,1
    - Dst: NsheadService*::ProcessNsheadRequest
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:348,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:349,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:351,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 79
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 354
      start: 220
    functionDepth: 2
    functionLinenumber: 220
    functionLinenumberEnd: 354
    functionName: brpc::policy::ProcessNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - brpc::Span::CreateServerSpan
    - Controller*::remote_side
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - malloc
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - Controller*::set_log_id
    - CHECK
    - Server*::thread_local_options
    - SampledRequest*::meta::set_nshead
    - butil::endpoint2str
    - DestroyingPtr::reset
    - std::shared_ptr::set_start_callback_us
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - DestroyingPtr::payload::swap
    - Socket*::id
    - Socket*::SetFailed
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - DestroyingPtr::meta::fetch
    - std::shared_ptr::set_log_id
    - butil::cpuwide_time_us
    - NsheadService*::ProcessNsheadRequest
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - ServerPrivateAccessor::acceptor
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::shared_ptr::set_start_parse_us
    - LOG_EVERY_SECOND
    - NsheadClosure::NsheadClosure
    - DestroyingPtr::ReleaseSocket
    - Controller*::SetFailed
    - Socket*::user
    - Server*::AcceptRequest
    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:357,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:361,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:363,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:365,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:366,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:371,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:372,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:373,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:374,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:375,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:378,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:379,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:381,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:382,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:387,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:388,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 389
      start: 356
    functionDepth: 1
    functionLinenumber: 356
    functionLinenumberEnd: 389
    functionName: brpc::policy::ProcessNsheadResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:392,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:393,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:394,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 391
    functionDepth: 1
    functionLinenumber: 391
    functionLinenumberEnd: 398
    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:403,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:405,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:406,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:408,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:409,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:410,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:414,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:415,1
    - Dst: NsheadMessage*::body::size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:418,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:419,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:420,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: 421
      start: 400
    functionDepth: 2
    functionLinenumber: 400
    functionLinenumberEnd: 421
    functionName: brpc::policy::SerializeNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - Controller*::response
    - Controller*::has_log_id
    - Controller*::log_id
    - NsheadMessage*::body::size
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:432,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:433,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:438,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:440,1
    - Dst: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:441,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nshead_protocol.cpp:447,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: 448
      start: 423
    functionDepth: 1
    functionLinenumber: 423
    functionLinenumberEnd: 448
    functionName: brpc::policy::PackNsheadRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    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
    - RedisConnContext*::transaction_handler::Run
    - RedisCommandHandler*::NewTransactionHandler
    - LOG
    - RedisCommandHandler*::Run
    - snprintf
    - RedisReply::SetError
    - RedisConnContext*::transaction_handler::reset
    - as_string
    - RedisReply::SerializeTo
    - SerializeTo
    - RedisReply::size
    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:
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::parser::ParsedArgsSize
    - butil::IOBufAppender::move_to
    - LOG
    - brpc::policy::ConsumeCommand
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - static_cast<RedisConnContext*>
    - Server*::options
    - Socket*::release_parsing_context
    - LOG_IF
    - butil::IOBufAppender::IOBufAppender
    - CHECK
    - Socket*::reset_parsing_context
    - std::vector::swap
    - static_cast<const Server*>
    - InputResponse::InputResponse
    - MakeParseError
    - InputResponse*::response::reply
    - RedisConnContext*::arena::clear
    - MakeMessage
    - RedisConnContext::RedisConnContext
    - Socket*::Write
    - InputResponse*::response::reply_size
    - butil::IOBuf::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - static_cast<InputResponse*>
    - Socket*::PopPipelinedInfo
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:246,1
    - Dst: Controller*::response
      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: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:259,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:267,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 269
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::response::reply_size
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    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:277,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:289,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:294,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: 296
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 296
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - RedisRequest*::SerializeTo
    - LOG
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - GetProtobufByteSize
    - google::protobuf::Message*::GetDescriptor
    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:307,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:310,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:312,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:314,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:316,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:319,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:322,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: 323
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 323
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - ControllerPrivateAccessor
    - RedisAuthenticator*::GetAuthFlags
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - dynamic_cast<const RedisAuthenticator*>
    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: 330
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 330
    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
    - RedisConnContext*::transaction_handler::Run
    - RedisCommandHandler*::NewTransactionHandler
    - LOG
    - RedisCommandHandler*::Run
    - snprintf
    - RedisReply::SetError
    - RedisConnContext*::transaction_handler::reset
    - as_string
    - RedisReply::SerializeTo
    - SerializeTo
    - RedisReply::size
    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:
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::parser::ParsedArgsSize
    - butil::IOBufAppender::move_to
    - LOG
    - brpc::policy::ConsumeCommand
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - static_cast<RedisConnContext*>
    - Server*::options
    - Socket*::release_parsing_context
    - LOG_IF
    - butil::IOBufAppender::IOBufAppender
    - CHECK
    - Socket*::reset_parsing_context
    - std::vector::swap
    - static_cast<const Server*>
    - InputResponse::InputResponse
    - MakeParseError
    - InputResponse*::response::reply
    - RedisConnContext*::arena::clear
    - MakeMessage
    - RedisConnContext::RedisConnContext
    - Socket*::Write
    - InputResponse*::response::reply_size
    - butil::IOBuf::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - static_cast<InputResponse*>
    - Socket*::PopPipelinedInfo
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:246,1
    - Dst: Controller*::response
      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: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:259,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:267,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 269
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::response::reply_size
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    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:277,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:289,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:294,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: 296
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 296
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - RedisRequest*::SerializeTo
    - LOG
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - GetProtobufByteSize
    - google::protobuf::Message*::GetDescriptor
    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:307,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:310,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:312,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:314,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:316,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:319,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:322,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: 323
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 323
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - ControllerPrivateAccessor
    - RedisAuthenticator*::GetAuthFlags
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - dynamic_cast<const RedisAuthenticator*>
    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: 330
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 330
    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
    - RedisConnContext*::transaction_handler::Run
    - RedisCommandHandler*::NewTransactionHandler
    - LOG
    - RedisCommandHandler*::Run
    - snprintf
    - RedisReply::SetError
    - RedisConnContext*::transaction_handler::reset
    - as_string
    - RedisReply::SerializeTo
    - SerializeTo
    - RedisReply::size
    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:
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::parser::ParsedArgsSize
    - butil::IOBufAppender::move_to
    - LOG
    - brpc::policy::ConsumeCommand
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - static_cast<RedisConnContext*>
    - Server*::options
    - Socket*::release_parsing_context
    - LOG_IF
    - butil::IOBufAppender::IOBufAppender
    - CHECK
    - Socket*::reset_parsing_context
    - std::vector::swap
    - static_cast<const Server*>
    - InputResponse::InputResponse
    - MakeParseError
    - InputResponse*::response::reply
    - RedisConnContext*::arena::clear
    - MakeMessage
    - RedisConnContext::RedisConnContext
    - Socket*::Write
    - InputResponse*::response::reply_size
    - butil::IOBuf::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - static_cast<InputResponse*>
    - Socket*::PopPipelinedInfo
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:246,1
    - Dst: Controller*::response
      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: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:259,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:267,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 269
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::response::reply_size
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    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:277,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:289,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:294,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: 296
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 296
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - RedisRequest*::SerializeTo
    - LOG
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - GetProtobufByteSize
    - google::protobuf::Message*::GetDescriptor
    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:307,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:310,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:312,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:314,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:316,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:319,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:322,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: 323
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 323
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - ControllerPrivateAccessor
    - RedisAuthenticator*::GetAuthFlags
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - dynamic_cast<const RedisAuthenticator*>
    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: 330
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 330
    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
    - RedisConnContext*::transaction_handler::Run
    - RedisCommandHandler*::NewTransactionHandler
    - LOG
    - RedisCommandHandler*::Run
    - snprintf
    - RedisReply::SetError
    - RedisConnContext*::transaction_handler::reset
    - as_string
    - RedisReply::SerializeTo
    - SerializeTo
    - RedisReply::size
    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:
    - RedisConnContext*::parser::Consume
    - RedisConnContext*::parser::ParsedArgsSize
    - butil::IOBufAppender::move_to
    - LOG
    - brpc::policy::ConsumeCommand
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - static_cast<RedisConnContext*>
    - Server*::options
    - Socket*::release_parsing_context
    - LOG_IF
    - butil::IOBufAppender::IOBufAppender
    - CHECK
    - Socket*::reset_parsing_context
    - std::vector::swap
    - static_cast<const Server*>
    - InputResponse::InputResponse
    - MakeParseError
    - InputResponse*::response::reply
    - RedisConnContext*::arena::clear
    - MakeMessage
    - RedisConnContext::RedisConnContext
    - Socket*::Write
    - InputResponse*::response::reply_size
    - butil::IOBuf::empty
    - InputResponse*::response::ConsumePartialIOBuf
    - static_cast<InputResponse*>
    - Socket*::PopPipelinedInfo
    - butil::IOBuf::IOBuf
    - butil::IOBuf*::empty
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:241,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:242,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:243,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:244,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:246,1
    - Dst: Controller*::response
      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: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:249,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:252,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:253,1
    - Dst: DestroyingPtr::response::reply_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:255,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:259,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:260,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:267,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:268,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 269
      start: 226
    functionDepth: 2
    functionLinenumber: 226
    functionLinenumberEnd: 269
    functionName: brpc::policy::ProcessRedisResponse
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::response::reply_size
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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: 271
      start: 271
    functionDepth: 0
    functionLinenumber: 271
    functionLinenumberEnd: 271
    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:277,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:280,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:286,1
    - Dst: RedisRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:289,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:290,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: RedisRequest*::command_size
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:292,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:294,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: 296
      start: 273
    functionDepth: 2
    functionLinenumber: 273
    functionLinenumberEnd: 296
    functionName: brpc::policy::SerializeRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - RedisRequest*::command_size
    - RedisRequest*::SerializeTo
    - LOG
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - GetProtobufByteSize
    - google::protobuf::Message*::GetDescriptor
    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:307,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:308,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:310,1
    - Dst: dynamic_cast<const RedisAuthenticator*>
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:312,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:314,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:316,1
    - Dst: RedisAuthenticator*::GetAuthFlags
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:317,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:319,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/redis_protocol.cpp:322,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: 323
      start: 298
    functionDepth: 1
    functionLinenumber: 298
    functionLinenumberEnd: 323
    functionName: brpc::policy::PackRedisRequest
    functionSourceFile: /src/brpc/src/brpc/policy/redis_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - ControllerPrivateAccessor
    - RedisAuthenticator*::GetAuthFlags
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - dynamic_cast<const RedisAuthenticator*>
    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: 330
      start: 325
    functionDepth: 0
    functionLinenumber: 325
    functionLinenumberEnd: 330
    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_Init
    - MD5_Final
    - MD5_Update
    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_Init
    - data
    - MD5_Final
    - size
    - MD5_Update
    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_Init
    - MD5_Final
    - MD5_Update
    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_Init
    - data
    - MD5_Final
    - size
    - MD5_Update
    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_Init
    - MD5_Final
    - MD5_Update
    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_Init
    - data
    - MD5_Final
    - size
    - MD5_Update
    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_Init
    - MD5_Final
    - MD5_Update
    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_Init
    - data
    - MD5_Final
    - size
    - MD5_Update
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RandomizedLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:121,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:128,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - Read
    - StartRecover
    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:137,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RandomizedLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:121,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:128,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - Read
    - StartRecover
    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:137,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RandomizedLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:121,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:128,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - Read
    - StartRecover
    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:137,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RandomizedLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:116,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:121,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:128,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 25
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - Read
    - StartRecover
    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:137,1
    - Dst: RandomizedLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - EspMessage*::body::size
    - Controller*::response
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:110,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:112,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:115,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: 116
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 116
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    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:119,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:125,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:127,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:133,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:140,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:141,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:144,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:145,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:155,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 157
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - EspMessage*::body::size
    - Controller*::response
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:110,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:112,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:115,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: 116
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 116
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    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:119,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:125,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:127,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:133,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:140,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:141,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:144,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:145,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:155,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 157
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - EspMessage*::body::size
    - Controller*::response
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:110,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:112,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:115,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: 116
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 116
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    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:119,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:125,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:127,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:133,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:140,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:141,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:144,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:145,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:155,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 157
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - butil::IOBuf*::length
    - MakeMessage
    - TestRpcPBMessageFactory::Get
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - butil::IOBuf*::append
    - EspMessage*::body::size
    - Controller*::response
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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: auto::set_request_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:105,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:110,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:112,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:115,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: 116
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 116
    functionName: brpc::policy::PackEspRequest
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - ControllerPrivateAccessor::span
    - Controller*::connection_type
    - length
    - auto::set_request_size
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    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:119,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:123,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:125,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:127,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:128,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:133,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:134,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:135,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:136,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:137,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:140,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:141,1
    - Dst: DestroyingPtr::meta::copy_to
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:144,1
    - Dst: DestroyingPtr::payload::swap
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:145,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:148,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:155,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/esp_protocol.cpp:156,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 157
    functionName: brpc::policy::ProcessEspResponse
    functionSourceFile: /src/brpc/src/brpc/policy/esp_protocol.cpp
    functionUses: 4
    functionsReached:
    - DestroyingPtr::meta::copy_to
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::payload::swap
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:
    - body::append
    - const_cast<NsheadMessage&>
    - ParsePbFromIOBuf
    - method_id
    - NsheadMeta*::set_user_string
    - version
    - PublicPbrpcRequest::requesthead
    - PublicPbrpcRequest::requestbody
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_log_id
    - has_log_id
    - id
    - serialized_request
    - Server::MethodProperty*::method::full_name
    - log_id
    - body::clear
    - PublicPbrpcRequest::requestbody_size
    - service
    - compress_type
    - NsheadMeta*::set_full_method_name
    - NsheadMeta*::set_compress_type
    - Controller*::CloseConnection
    - ServerPrivateAccessor
    - Controller*::SetFailed
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - ResponseBody*::set_version
    - ResponseHead*::set_text
    - PublicPbrpcResponse::mutable_responsehead
    - google::protobuf::Message*::SerializeToString
    - ResponseHead*::set_from_host
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - user_string
    - std::string*::data
    - std::string*::size
    - std::string*::swap
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - butil::ip2str
    - butil::my_ip
    - ResponseBody*::set_id
    - correlation_id
    - Controller*::CloseConnection
    - ResponseBody*::mutable_serialized_response
    - Controller*::ErrorText
    - Controller*::Failed
    - ResponseHead*::set_compress_type
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - PublicPbrpcResponse::add_responsebody
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:183,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:189,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:201,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:203,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:206,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:211,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 213
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PublicPbrpcResponse::responsebody_size
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - length
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - id
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - ParsePbFromString
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - code
    - compress_type
    - auto::set_received_us
    - serialized_response
    - PublicPbrpcResponse::responsehead
    - berror
    - text
    - bthread_id_lock
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - PublicPbrpcResponse::responsebody
    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:217,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:219,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:223,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: 224
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 224
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:234,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:244,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:250,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:254,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:266,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:268,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:271,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,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: 283
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 283
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor
    - RequestBody*::set_service
    - RequestBody*::set_id
    - google::protobuf::MethodDescriptor*::index
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - Controller*::connection_type
    - Controller*::request_compress_type
    - RequestBody*::mutable_serialized_request
    - PublicPbrpcRequest::add_requestbody
    - strftime
    - snprintf
    - RequestBody*::set_version
    - google::protobuf::MethodDescriptor*::service
    - RequestHead*::set_compress_type
    - butil::ip2str
    - RequestHead*::set_create_time
    - butil::my_ip
    - RequestHead*::set_charset
    - RequestHead*::set_content_type
    - PublicPbrpcRequest::mutable_requesthead
    - Controller*::log_id
    - memset
    - copy_to
    - RequestBody*::set_charset
    - time
    - RequestHead*::set_connection
    - butil::IOBuf*::append
    - RequestHead*::set_log_id
    - RequestBody*::set_method_id
    - localtime
    - Controller*::has_log_id
    - Controller*::SetFailed
    - GetProtobufByteSize
    - RequestHead*::set_from_host
    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:
    - body::append
    - const_cast<NsheadMessage&>
    - ParsePbFromIOBuf
    - method_id
    - NsheadMeta*::set_user_string
    - version
    - PublicPbrpcRequest::requesthead
    - PublicPbrpcRequest::requestbody
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_log_id
    - has_log_id
    - id
    - serialized_request
    - Server::MethodProperty*::method::full_name
    - log_id
    - body::clear
    - PublicPbrpcRequest::requestbody_size
    - service
    - compress_type
    - NsheadMeta*::set_full_method_name
    - NsheadMeta*::set_compress_type
    - Controller*::CloseConnection
    - ServerPrivateAccessor
    - Controller*::SetFailed
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - ResponseBody*::set_version
    - ResponseHead*::set_text
    - PublicPbrpcResponse::mutable_responsehead
    - google::protobuf::Message*::SerializeToString
    - ResponseHead*::set_from_host
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - user_string
    - std::string*::data
    - std::string*::size
    - std::string*::swap
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - butil::ip2str
    - butil::my_ip
    - ResponseBody*::set_id
    - correlation_id
    - Controller*::CloseConnection
    - ResponseBody*::mutable_serialized_response
    - Controller*::ErrorText
    - Controller*::Failed
    - ResponseHead*::set_compress_type
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - PublicPbrpcResponse::add_responsebody
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:183,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:189,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:201,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:203,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:206,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:211,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 213
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PublicPbrpcResponse::responsebody_size
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - length
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - id
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - ParsePbFromString
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - code
    - compress_type
    - auto::set_received_us
    - serialized_response
    - PublicPbrpcResponse::responsehead
    - berror
    - text
    - bthread_id_lock
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - PublicPbrpcResponse::responsebody
    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:217,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:219,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:223,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: 224
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 224
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:234,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:244,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:250,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:254,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:266,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:268,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:271,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,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: 283
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 283
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor
    - RequestBody*::set_service
    - RequestBody*::set_id
    - google::protobuf::MethodDescriptor*::index
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - Controller*::connection_type
    - Controller*::request_compress_type
    - RequestBody*::mutable_serialized_request
    - PublicPbrpcRequest::add_requestbody
    - strftime
    - snprintf
    - RequestBody*::set_version
    - google::protobuf::MethodDescriptor*::service
    - RequestHead*::set_compress_type
    - butil::ip2str
    - RequestHead*::set_create_time
    - butil::my_ip
    - RequestHead*::set_charset
    - RequestHead*::set_content_type
    - PublicPbrpcRequest::mutable_requesthead
    - Controller*::log_id
    - memset
    - copy_to
    - RequestBody*::set_charset
    - time
    - RequestHead*::set_connection
    - butil::IOBuf*::append
    - RequestHead*::set_log_id
    - RequestBody*::set_method_id
    - localtime
    - Controller*::has_log_id
    - Controller*::SetFailed
    - GetProtobufByteSize
    - RequestHead*::set_from_host
    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:
    - body::append
    - const_cast<NsheadMessage&>
    - ParsePbFromIOBuf
    - method_id
    - NsheadMeta*::set_user_string
    - version
    - PublicPbrpcRequest::requesthead
    - PublicPbrpcRequest::requestbody
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_log_id
    - has_log_id
    - id
    - serialized_request
    - Server::MethodProperty*::method::full_name
    - log_id
    - body::clear
    - PublicPbrpcRequest::requestbody_size
    - service
    - compress_type
    - NsheadMeta*::set_full_method_name
    - NsheadMeta*::set_compress_type
    - Controller*::CloseConnection
    - ServerPrivateAccessor
    - Controller*::SetFailed
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - ResponseBody*::set_version
    - ResponseHead*::set_text
    - PublicPbrpcResponse::mutable_responsehead
    - google::protobuf::Message*::SerializeToString
    - ResponseHead*::set_from_host
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - user_string
    - std::string*::data
    - std::string*::size
    - std::string*::swap
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - butil::ip2str
    - butil::my_ip
    - ResponseBody*::set_id
    - correlation_id
    - Controller*::CloseConnection
    - ResponseBody*::mutable_serialized_response
    - Controller*::ErrorText
    - Controller*::Failed
    - ResponseHead*::set_compress_type
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - PublicPbrpcResponse::add_responsebody
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:183,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:189,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:201,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:203,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:206,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:211,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 213
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PublicPbrpcResponse::responsebody_size
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - length
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - id
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - ParsePbFromString
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - code
    - compress_type
    - auto::set_received_us
    - serialized_response
    - PublicPbrpcResponse::responsehead
    - berror
    - text
    - bthread_id_lock
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - PublicPbrpcResponse::responsebody
    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:217,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:219,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:223,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: 224
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 224
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:234,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:244,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:250,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:254,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:266,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:268,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:271,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,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: 283
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 283
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor
    - RequestBody*::set_service
    - RequestBody*::set_id
    - google::protobuf::MethodDescriptor*::index
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - Controller*::connection_type
    - Controller*::request_compress_type
    - RequestBody*::mutable_serialized_request
    - PublicPbrpcRequest::add_requestbody
    - strftime
    - snprintf
    - RequestBody*::set_version
    - google::protobuf::MethodDescriptor*::service
    - RequestHead*::set_compress_type
    - butil::ip2str
    - RequestHead*::set_create_time
    - butil::my_ip
    - RequestHead*::set_charset
    - RequestHead*::set_content_type
    - PublicPbrpcRequest::mutable_requesthead
    - Controller*::log_id
    - memset
    - copy_to
    - RequestBody*::set_charset
    - time
    - RequestHead*::set_connection
    - butil::IOBuf*::append
    - RequestHead*::set_log_id
    - RequestBody*::set_method_id
    - localtime
    - Controller*::has_log_id
    - Controller*::SetFailed
    - GetProtobufByteSize
    - RequestHead*::set_from_host
    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:
    - body::append
    - const_cast<NsheadMessage&>
    - ParsePbFromIOBuf
    - method_id
    - NsheadMeta*::set_user_string
    - version
    - PublicPbrpcRequest::requesthead
    - PublicPbrpcRequest::requestbody
    - NsheadMeta*::set_correlation_id
    - NsheadMeta*::set_log_id
    - has_log_id
    - id
    - serialized_request
    - Server::MethodProperty*::method::full_name
    - log_id
    - body::clear
    - PublicPbrpcRequest::requestbody_size
    - service
    - compress_type
    - NsheadMeta*::set_full_method_name
    - NsheadMeta*::set_compress_type
    - Controller*::CloseConnection
    - ServerPrivateAccessor
    - Controller*::SetFailed
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - ResponseBody*::set_version
    - ResponseHead*::set_text
    - PublicPbrpcResponse::mutable_responsehead
    - google::protobuf::Message*::SerializeToString
    - ResponseHead*::set_from_host
    - PublicPbrpcResponse::SerializeToZeroCopyStream
    - user_string
    - std::string*::data
    - std::string*::size
    - std::string*::swap
    - Controller*::ErrorCode
    - Controller*::response_compress_type
    - butil::ip2str
    - butil::my_ip
    - ResponseBody*::set_id
    - correlation_id
    - Controller*::CloseConnection
    - ResponseBody*::mutable_serialized_response
    - Controller*::ErrorText
    - Controller*::Failed
    - ResponseHead*::set_compress_type
    - butil::snappy::Compress
    - ResponseHead*::set_code
    - PublicPbrpcResponse::add_responsebody
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:178,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:179,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:180,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:183,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:184,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: code
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: text
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:186,1
    - Dst: serialized_response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:189,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:195,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:196,1
    - Dst: ParsePbFromString
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:198,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:201,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:203,1
    - Dst: length
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:204,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:206,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:211,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:212,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 36
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 152
    functionDepth: 1
    functionLinenumber: 152
    functionLinenumberEnd: 213
    functionName: brpc::policy::ProcessPublicPbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - PublicPbrpcResponse::responsebody_size
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - length
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - id
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - ParsePbFromString
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - code
    - compress_type
    - auto::set_received_us
    - serialized_response
    - PublicPbrpcResponse::responsehead
    - berror
    - text
    - bthread_id_lock
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    - PublicPbrpcResponse::responsebody
    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:217,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:219,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:223,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: 224
      start: 215
    functionDepth: 0
    functionLinenumber: 215
    functionLinenumberEnd: 224
    functionName: brpc::policy::SerializePublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:234,1
    - Dst: PublicPbrpcRequest::add_requestbody
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:235,1
    - Dst: RequestHead*::set_from_host
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::ip2str
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:238,1
    - Dst: RequestHead*::set_content_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:239,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:240,1
    - Dst: RequestHead*::set_connection
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:241,1
    - Dst: RequestHead*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:242,1
    - Dst: time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:244,1
    - Dst: strftime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: localtime
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:245,1
    - Dst: RequestHead*::set_create_time
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:246,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:247,1
    - Dst: RequestHead*::set_log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:250,1
    - Dst: RequestHead*::set_compress_type
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:251,1
    - Dst: RequestBody*::set_version
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:254,1
    - Dst: RequestBody*::set_charset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:255,1
    - Dst: RequestBody*::set_service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:256,1
    - Dst: RequestBody*::set_method_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:257,1
    - Dst: RequestBody*::set_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:258,1
    - Dst: RequestBody*::mutable_serialized_request
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:259,1
    - Dst: copy_to
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:260,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:264,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:266,1
    - Dst: GetProtobufByteSize
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:268,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:269,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:271,1
    - Dst: PublicPbrpcRequest::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:279,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp:280,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: 283
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 283
    functionName: brpc::policy::PackPublicPbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/public_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor
    - RequestBody*::set_service
    - RequestBody*::set_id
    - google::protobuf::MethodDescriptor*::index
    - PublicPbrpcRequest::SerializeToZeroCopyStream
    - Controller*::connection_type
    - Controller*::request_compress_type
    - RequestBody*::mutable_serialized_request
    - PublicPbrpcRequest::add_requestbody
    - strftime
    - snprintf
    - RequestBody*::set_version
    - google::protobuf::MethodDescriptor*::service
    - RequestHead*::set_compress_type
    - butil::ip2str
    - RequestHead*::set_create_time
    - butil::my_ip
    - RequestHead*::set_charset
    - RequestHead*::set_content_type
    - PublicPbrpcRequest::mutable_requesthead
    - Controller*::log_id
    - memset
    - copy_to
    - RequestBody*::set_charset
    - time
    - RequestHead*::set_connection
    - butil::IOBuf*::append
    - RequestHead*::set_log_id
    - RequestBody*::set_method_id
    - localtime
    - Controller*::has_log_id
    - Controller*::SetFailed
    - GetProtobufByteSize
    - RequestHead*::set_from_host
    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: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    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:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    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:70,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:72,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:73,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:80,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:85,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: number_returned
      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: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:96,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:97,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:101,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:107,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 111
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - options
    - MongoServiceAdaptor*::SerializeError
    - ControllerPrivateAccessor
    - cursor_id
    - PLOG
    - static_cast<const void*>
    - message
    - IsCloseConnection
    - Socket*::SetFailed
    - Failed
    - butil::IOBuf::append
    - starting_from
    - response_flags
    - number_returned
    - Socket*::Write
    - butil::IOBuf::empty
    - has_message
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:121,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:123,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:130,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:135,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:142,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:144,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:146,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:148,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:162,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:164,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:165,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:166,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:169,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:171,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 37
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 172
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 7
    functionsReached:
    - butil::IOBuf*::cutn
    - static_cast<uint32_t>
    - butil::IOBuf*::fetch
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<const Server*>
    - MongoContextMessage::MongoContextMessage
    - CHECK
    - MakeParseError
    - LOG
    - butil::IOBuf*::length
    - Socket*::parsing_context
    - mongo_head_t::make_host_endian
    - is_mongo_opcode
    - Socket*::reset_parsing_context
    - MakeMessage
    - Server*::options
    - 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:185,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:194,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:211,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:215,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:216,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:219,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:220,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:231,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:236,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:237,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:242,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:243,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      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: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:254,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:259,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:260,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:272,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:273,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:276,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:277,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:279,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:280,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:281,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:285,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:292,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:293,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:296,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:298,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:304,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 183
    functionDepth: 2
    functionLinenumber: 183
    functionLinenumberEnd: 305
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - Server*::IsRunning
    - Server::MethodProperty*::service::GetDescriptor
    - butil::EnsureString
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - SendMongoResponse*::res::mutable_header
    - Socket*::parsing_context
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - SendMongoResponse*::cntl::set_log_id
    - ScopedNonServiceError::release
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - SendMongoResponse*::cntl::SetFailed
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_method
    - MongoContextMessage*::context
    - SendMongoResponse*::req::set_message
    - dynamic_cast<MongoContextMessage*>
    - Socket*::id
    - SendMongoResponse*::cntl::set_mongo_session_data
    - google::protobuf::ServiceDescriptor*::method
    - bthread_assign_data
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::method::full_name
    - std::string::c_str
    - DestroyingPtr::meta::fetch
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - MethodStatus*::OnRequested
    - DestroyingPtr::payload::to_string
    - Socket*::auth_context
    - pbrpcframework::get_prototype_by_method_descriptor
    - ServerPrivateAccessor
    - MongoOp_IsValid
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - SendMongoResponse*::req::mutable_header
    - DestroyingPtr::ReleaseSocket
    - static_cast<MongoOp>
    - SendMongoResponse*::Run
    - std::string::size
    - SendMongoResponse::SendMongoResponse
    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: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    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:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    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:70,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:72,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:73,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:80,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:85,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: number_returned
      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: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:96,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:97,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:101,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:107,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 111
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - options
    - MongoServiceAdaptor*::SerializeError
    - ControllerPrivateAccessor
    - cursor_id
    - PLOG
    - static_cast<const void*>
    - message
    - IsCloseConnection
    - Socket*::SetFailed
    - Failed
    - butil::IOBuf::append
    - starting_from
    - response_flags
    - number_returned
    - Socket*::Write
    - butil::IOBuf::empty
    - has_message
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:121,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:123,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:130,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:135,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:142,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:144,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:146,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:148,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:162,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:164,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:165,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:166,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:169,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:171,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 37
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 172
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 7
    functionsReached:
    - butil::IOBuf*::cutn
    - static_cast<uint32_t>
    - butil::IOBuf*::fetch
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<const Server*>
    - MongoContextMessage::MongoContextMessage
    - CHECK
    - MakeParseError
    - LOG
    - butil::IOBuf*::length
    - Socket*::parsing_context
    - mongo_head_t::make_host_endian
    - is_mongo_opcode
    - Socket*::reset_parsing_context
    - MakeMessage
    - Server*::options
    - 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:185,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:194,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:211,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:215,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:216,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:219,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:220,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:231,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:236,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:237,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:242,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:243,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      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: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:254,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:259,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:260,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:272,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:273,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:276,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:277,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:279,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:280,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:281,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:285,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:292,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:293,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:296,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:298,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:304,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 183
    functionDepth: 2
    functionLinenumber: 183
    functionLinenumberEnd: 305
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - Server*::IsRunning
    - Server::MethodProperty*::service::GetDescriptor
    - butil::EnsureString
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - SendMongoResponse*::res::mutable_header
    - Socket*::parsing_context
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - SendMongoResponse*::cntl::set_log_id
    - ScopedNonServiceError::release
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - SendMongoResponse*::cntl::SetFailed
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_method
    - MongoContextMessage*::context
    - SendMongoResponse*::req::set_message
    - dynamic_cast<MongoContextMessage*>
    - Socket*::id
    - SendMongoResponse*::cntl::set_mongo_session_data
    - google::protobuf::ServiceDescriptor*::method
    - bthread_assign_data
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::method::full_name
    - std::string::c_str
    - DestroyingPtr::meta::fetch
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - MethodStatus*::OnRequested
    - DestroyingPtr::payload::to_string
    - Socket*::auth_context
    - pbrpcframework::get_prototype_by_method_descriptor
    - ServerPrivateAccessor
    - MongoOp_IsValid
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - SendMongoResponse*::req::mutable_header
    - DestroyingPtr::ReleaseSocket
    - static_cast<MongoOp>
    - SendMongoResponse*::Run
    - std::string::size
    - SendMongoResponse::SendMongoResponse
    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: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    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:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    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:70,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:72,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:73,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:80,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:85,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: number_returned
      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: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:96,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:97,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:101,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:107,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 111
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - options
    - MongoServiceAdaptor*::SerializeError
    - ControllerPrivateAccessor
    - cursor_id
    - PLOG
    - static_cast<const void*>
    - message
    - IsCloseConnection
    - Socket*::SetFailed
    - Failed
    - butil::IOBuf::append
    - starting_from
    - response_flags
    - number_returned
    - Socket*::Write
    - butil::IOBuf::empty
    - has_message
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:121,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:123,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:130,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:135,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:142,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:144,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:146,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:148,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:162,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:164,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:165,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:166,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:169,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:171,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 37
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 172
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 7
    functionsReached:
    - butil::IOBuf*::cutn
    - static_cast<uint32_t>
    - butil::IOBuf*::fetch
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<const Server*>
    - MongoContextMessage::MongoContextMessage
    - CHECK
    - MakeParseError
    - LOG
    - butil::IOBuf*::length
    - Socket*::parsing_context
    - mongo_head_t::make_host_endian
    - is_mongo_opcode
    - Socket*::reset_parsing_context
    - MakeMessage
    - Server*::options
    - 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:185,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:194,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:211,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:215,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:216,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:219,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:220,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:231,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:236,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:237,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:242,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:243,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      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: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:254,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:259,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:260,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:272,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:273,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:276,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:277,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:279,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:280,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:281,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:285,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:292,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:293,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:296,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:298,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:304,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 183
    functionDepth: 2
    functionLinenumber: 183
    functionLinenumberEnd: 305
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - Server*::IsRunning
    - Server::MethodProperty*::service::GetDescriptor
    - butil::EnsureString
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - SendMongoResponse*::res::mutable_header
    - Socket*::parsing_context
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - SendMongoResponse*::cntl::set_log_id
    - ScopedNonServiceError::release
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - SendMongoResponse*::cntl::SetFailed
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_method
    - MongoContextMessage*::context
    - SendMongoResponse*::req::set_message
    - dynamic_cast<MongoContextMessage*>
    - Socket*::id
    - SendMongoResponse*::cntl::set_mongo_session_data
    - google::protobuf::ServiceDescriptor*::method
    - bthread_assign_data
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::method::full_name
    - std::string::c_str
    - DestroyingPtr::meta::fetch
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - MethodStatus*::OnRequested
    - DestroyingPtr::payload::to_string
    - Socket*::auth_context
    - pbrpcframework::get_prototype_by_method_descriptor
    - ServerPrivateAccessor
    - MongoOp_IsValid
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - SendMongoResponse*::req::mutable_header
    - DestroyingPtr::ReleaseSocket
    - static_cast<MongoOp>
    - SendMongoResponse*::Run
    - std::string::size
    - SendMongoResponse::SendMongoResponse
    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: 51
      start: 48
    functionDepth: 0
    functionLinenumber: 48
    functionLinenumberEnd: 51
    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:64,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 65
    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:70,1
    - Dst: IsCloseConnection
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:72,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:73,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:78,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:79,1
    - Dst: Failed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:80,1
    - Dst: MongoServiceAdaptor*::SerializeError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:81,1
    - Dst: has_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:82,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:84,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:85,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:86,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:87,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: static_cast<const void*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:89,1
    - Dst: response_flags
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:90,1
    - Dst: cursor_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:91,1
    - Dst: starting_from
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:92,1
    - Dst: number_returned
      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: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:96,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:97,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:98,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:101,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:106,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:107,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 111
      start: 67
    functionDepth: 1
    functionLinenumber: 67
    functionLinenumberEnd: 111
    functionName: brpc::policy::SendMongoResponse::Run
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - header
    - options
    - MongoServiceAdaptor*::SerializeError
    - ControllerPrivateAccessor
    - cursor_id
    - PLOG
    - static_cast<const void*>
    - message
    - IsCloseConnection
    - Socket*::SetFailed
    - Failed
    - butil::IOBuf::append
    - starting_from
    - response_flags
    - number_returned
    - Socket*::Write
    - butil::IOBuf::empty
    - has_message
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: void SendMongoResponse::Run()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:120,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:121,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:123,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:126,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:130,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:132,1
    - Dst: mongo_head_t::make_host_endian
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:135,1
    - Dst: is_mongo_opcode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:136,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:138,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:142,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:144,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:146,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:147,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:148,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:155,1
    - Dst: MongoServiceAdaptor*::CreateSocketContext
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:157,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:159,1
    - Dst: MongoContextMessage::MongoContextMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:161,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:162,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:164,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:165,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:166,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:169,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:171,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 37
    argCount: 3
    argNames:
    - source
    - socket
    - arg
    argTypes:
    - butil::IOBuf*
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 113
    functionDepth: 1
    functionLinenumber: 113
    functionLinenumberEnd: 172
    functionName: brpc::policy::ParseMongoMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 7
    functionsReached:
    - butil::IOBuf*::cutn
    - static_cast<uint32_t>
    - butil::IOBuf*::fetch
    - MongoServiceAdaptor*::CreateSocketContext
    - static_cast<const Server*>
    - MongoContextMessage::MongoContextMessage
    - CHECK
    - MakeParseError
    - LOG
    - butil::IOBuf*::length
    - Socket*::parsing_context
    - mongo_head_t::make_host_endian
    - is_mongo_opcode
    - Socket*::reset_parsing_context
    - MakeMessage
    - Server*::options
    - 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:185,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:186,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:187,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:191,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:194,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:195,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:196,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:201,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:202,1
    - Dst: dynamic_cast<MongoContextMessage*>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:207,1
    - Dst: SendMongoResponse::SendMongoResponse
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:211,1
    - Dst: SendMongoResponse*::cntl::set_mongo_session_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: MongoContextMessage*::context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:212,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:215,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:216,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:217,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:218,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:219,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:220,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:222,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:227,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:228,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:231,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:232,1
    - Dst: ServerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:236,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:237,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:239,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:242,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:243,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:249,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      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: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:254,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:259,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:260,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:262,1
    - Dst: MongoOp_IsValid
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:267,1
    - Dst: SendMongoResponse*::cntl::SetFailed
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:268,1
    - Dst: SendMongoResponse*::cntl::set_log_id
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:272,1
    - Dst: DestroyingPtr::payload::to_string
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:273,1
    - Dst: SendMongoResponse*::req::set_message
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:274,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:275,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:276,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:277,1
    - Dst: SendMongoResponse*::req::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:278,1
    - Dst: static_cast<MongoOp>
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:279,1
    - Dst: SendMongoResponse*::res::mutable_header
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:280,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:281,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:285,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:288,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:292,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:293,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:296,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:298,1
    - Dst: SendMongoResponse*::Run
      Src: /src/brpc/src/brpc/policy/mongo_protocol.cpp:304,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 62
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 305
      start: 183
    functionDepth: 2
    functionLinenumber: 183
    functionLinenumberEnd: 305
    functionName: brpc::policy::ProcessMongoRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mongo_protocol.cpp
    functionUses: 0
    functionsReached:
    - Server*::IsRunning
    - Server::MethodProperty*::service::GetDescriptor
    - butil::EnsureString
    - TooManyUserCode
    - LOG
    - BeginRunningUserCode
    - SendMongoResponse*::res::mutable_header
    - Socket*::parsing_context
    - ControllerPrivateAccessor::set_server
    - Server*::options
    - InputMessageBase*::arg
    - SendMongoResponse*::cntl::set_log_id
    - ScopedNonServiceError::release
    - Socket*::local_side
    - EndRunningUserCodeInPlace
    - DestroyingPtr::received_us
    - SendMongoResponse*::cntl::SetFailed
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - ControllerPrivateAccessor::set_method
    - MongoContextMessage*::context
    - SendMongoResponse*::req::set_message
    - dynamic_cast<MongoContextMessage*>
    - Socket*::id
    - SendMongoResponse*::cntl::set_mongo_session_data
    - google::protobuf::ServiceDescriptor*::method
    - bthread_assign_data
    - google::protobuf::ServiceDescriptor*::method_count
    - Server::MethodProperty*::method::full_name
    - std::string::c_str
    - DestroyingPtr::meta::fetch
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - MethodStatus*::OnRequested
    - DestroyingPtr::payload::to_string
    - Socket*::auth_context
    - pbrpcframework::get_prototype_by_method_descriptor
    - ServerPrivateAccessor
    - MongoOp_IsValid
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - SendMongoResponse*::req::mutable_header
    - DestroyingPtr::ReleaseSocket
    - static_cast<MongoOp>
    - SendMongoResponse*::Run
    - std::string::size
    - SendMongoResponse::SendMongoResponse
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RoundRobinLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:129,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:131,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - StartRecover
    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:137,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - RoundRobinLoadBalancer*::SetParameters
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RoundRobinLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:129,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:131,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - StartRecover
    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:137,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - RoundRobinLoadBalancer*::SetParameters
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RoundRobinLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:129,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:131,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - StartRecover
    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:137,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - RoundRobinLoadBalancer*::SetParameters
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::RoundRobinLoadBalancer::Remove
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:123,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:124,1
    - Dst: StartRecover
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:129,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:131,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 28
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 96
    functionDepth: 1
    functionLinenumber: 96
    functionLinenumberEnd: 133
    functionName: brpc::policy::RoundRobinLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - DoReject
    - bthread::prime_offset
    - StopRecoverIfNecessary
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - IsServerAvailable
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::tls
    - StartRecover
    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:137,1
    - Dst: RoundRobinLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:138,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 143
    functionName: brpc::policy::RoundRobinLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - RoundRobinLoadBalancer::RoundRobinLoadBalancer
    - RoundRobinLoadBalancer*::SetParameters
    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: 147
      start: 145
    functionDepth: 0
    functionLinenumber: 145
    functionLinenumberEnd: 147
    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:157,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:160,1
    - Dst: butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp:161,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 149
    functionDepth: 0
    functionLinenumber: 149
    functionLinenumberEnd: 166
    functionName: brpc::policy::RoundRobinLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/round_robin_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers, TLS>::ScopedPtr::server_list::size
    - Read
    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:169,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 170
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 170
    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:
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - SerializeAsCompressedData
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - Controller*::Failed
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:130,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:135,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:145,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:149,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 151
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - DestroyingPtr::meta::fetch
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - Socket*::remote_side
    - bthread_id_lock
    - Controller*::SetFailed
    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:155,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:157,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:161,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: 162
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 162
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:172,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:184,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:187,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:198,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: 199
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 199
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - google::protobuf::MethodDescriptor*::index
    - Controller*::connection_type
    - Controller*::request_compress_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - SerializeAsCompressedData
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - Controller*::Failed
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:130,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:135,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:145,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:149,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 151
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - DestroyingPtr::meta::fetch
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - Socket*::remote_side
    - bthread_id_lock
    - Controller*::SetFailed
    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:155,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:157,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:161,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: 162
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 162
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:172,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:184,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:187,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:198,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: 199
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 199
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - google::protobuf::MethodDescriptor*::index
    - Controller*::connection_type
    - Controller*::request_compress_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - SerializeAsCompressedData
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - Controller*::Failed
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:130,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:135,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:145,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:149,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 151
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - DestroyingPtr::meta::fetch
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - Socket*::remote_side
    - bthread_id_lock
    - Controller*::SetFailed
    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:155,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:157,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:161,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: 162
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 162
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:172,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:184,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:187,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:198,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: 199
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 199
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - google::protobuf::MethodDescriptor*::index
    - Controller*::connection_type
    - Controller*::request_compress_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadMeta*::set_compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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:
    - ParseFromCompressedData
    - body::length
    - Controller*::set_request_compress_type
    - CompressTypeToCStr
    - compress_type
    - Controller*::SetFailed
    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:
    - SerializeAsCompressedData
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - Controller*::Failed
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:125,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:126,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:127,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:128,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:130,1
    - Dst: DestroyingPtr::meta::fetch
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:133,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:135,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:136,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:143,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:145,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:149,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:150,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 108
    functionDepth: 1
    functionLinenumber: 108
    functionLinenumberEnd: 151
    functionName: brpc::policy::ProcessNovaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - DestroyingPtr::meta::fetch
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - Socket*::remote_side
    - bthread_id_lock
    - Controller*::SetFailed
    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:155,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:157,1
    - Dst: SerializeRequestDefault
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:161,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: 162
      start: 153
    functionDepth: 0
    functionLinenumber: 153
    functionLinenumberEnd: 162
    functionName: brpc::policy::SerializeNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Controller*::request_compress_type
    - SerializeRequestDefault
    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:172,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:173,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:181,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:182,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:184,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:185,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:187,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:190,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp:198,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: 199
      start: 164
    functionDepth: 1
    functionLinenumber: 164
    functionLinenumberEnd: 199
    functionName: brpc::policy::PackNovaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/nova_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - google::protobuf::MethodDescriptor*::index
    - Controller*::connection_type
    - Controller*::request_compress_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    - baas::CredentialVerifier::CredentialVerifier
    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
    - baas::CredentialContext::starter
    - AuthContext*::set_is_service
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - AuthContext*::set_roles
    - AuthContext*::set_starter
    - LOG
    - baas::CredentialContext::group
    - Verify
    - baas::CredentialContext::roles
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::IsService
    - AuthContext*::set_group
    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:
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    - baas::CredentialVerifier::CredentialVerifier
    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
    - baas::CredentialContext::starter
    - AuthContext*::set_is_service
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - AuthContext*::set_roles
    - AuthContext*::set_starter
    - LOG
    - baas::CredentialContext::group
    - Verify
    - baas::CredentialContext::roles
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::IsService
    - AuthContext*::set_group
    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:
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    - baas::CredentialVerifier::CredentialVerifier
    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
    - baas::CredentialContext::starter
    - AuthContext*::set_is_service
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - AuthContext*::set_roles
    - AuthContext*::set_starter
    - LOG
    - baas::CredentialContext::group
    - Verify
    - baas::CredentialContext::roles
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::IsService
    - AuthContext*::set_group
    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:
    - CHECK
    - baas::CredentialGenerator::CredentialGenerator
    - baas::CredentialVerifier::CredentialVerifier
    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
    - baas::CredentialContext::starter
    - AuthContext*::set_is_service
    - AuthContext*::set_user
    - baas::CredentialContext::user
    - AuthContext*::set_roles
    - AuthContext*::set_starter
    - LOG
    - baas::CredentialContext::group
    - Verify
    - baas::CredentialContext::roles
    - baas::sdk::GetReturnCodeMessage
    - baas::CredentialContext::IsService
    - AuthContext*::set_group
    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:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 69
    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:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 88
    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: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    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: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    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: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    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: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    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: 122
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 122
    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: 129
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 129
    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:136,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:140,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: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<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:145,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:156,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:160,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - GetProtobufByteSize
    - brpc::policy::PackSofaHeader
    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:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:180,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:197,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:204,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:205,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 206
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - SofaRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:218,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:222,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:228,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:229,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:238,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:243,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:250,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:259,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:266,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:267,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:273,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:278,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:298,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:299,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:300,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:308,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: 310
      start: 210
    functionDepth: 5
    functionLinenumber: 210
    functionLinenumberEnd: 310
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - CHECK_EQ
    - Controller*::response_attachment
    - butil::IOBuf::size
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - butil::IOBuf::movable
    - Controller*::ErrorCode
    - SofaRpcMeta::set_reason
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::response_compress_type
    - SofaRpcMeta::set_failed
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - SofaRpcMeta::set_compress_type
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - google::protobuf::Message*::InitializationErrorString
    - Socket*::description
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - auto::set_sent_us
    - butil::IOBuf::length
    - Socket*::Write
    - auto::set_start_send_us
    - SofaRpcMeta::set_type
    - butil::IOBuf::IOBuf
    - SofaRpcMeta::set_error_code
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - SerializeAsCompressedData
    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:322,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:324,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:325,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:331,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:332,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:342,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:347,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:348,1
    - Dst: LOG
      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:352,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:353,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:357,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:365,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:367,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:369,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:373,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:386,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:392,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:393,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:398,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:404,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:412,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:419,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:424,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:428,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:429,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:436,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:447,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:449,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,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:455,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:459,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:461,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:463,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,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:472,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      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:476,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:480,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:489,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 321
    functionDepth: 6
    functionLinenumber: 321
    functionLinenumberEnd: 490
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - DestroyingPtr::meta::size
    - brpc::Span::CreateServerSpan
    - TooManyUserCode
    - SofaRpcMeta::sequence_id
    - butil::EnsureString
    - LOG
    - ParsePbFromIOBuf
    - std::unique_ptr::release
    - BeginRunningUserCode
    - std::unique_ptr::SetFailed
    - ControllerPrivateAccessor::set_server
    - ParseFromCompressedData
    - InputMessageBase*::arg
    - Server*::options
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - DestroyingPtr::payload::size
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - DestroyingPtr::received_us
    - EndRunningUserCodeInPlace
    - brpc::policy::SendSofaResponse
    - std::unique_ptr::unique_ptr
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - google::protobuf::Service*::GetRequestPrototype
    - Socket*::SetFailed
    - SampledRequest*::meta::set_compress_type
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - Server::MethodProperty*::method::full_name
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::unique_ptr::reset
    - butil::cpuwide_time_us
    - std::shared_ptr::set_remote_side
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - MethodStatus*::OnRequested
    - SofaRpcMeta::compress_type
    - Socket*::description
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SofaRpcMeta::method
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - std::shared_ptr::set_start_parse_us
    - google::protobuf::Service*::GetResponsePrototype
    - google::protobuf::MethodDescriptor*::full_name
    - DestroyingPtr::ReleaseSocket
    - Socket*::user
    - Server*::AcceptRequest
    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:493,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:493,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:494,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 499
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - static_cast<const Server*>
    - InputMessageBase*::arg
    - Server*::options
    - 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:502,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:506,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:514,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:515,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:526,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:530,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:535,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:536,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:541,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:548,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 501
    functionDepth: 2
    functionLinenumber: 501
    functionLinenumberEnd: 549
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - brpc::policy::Sofa2CompressType
    - DestroyingPtr::meta::size
    - Controller*::response
    - SofaRpcMeta::sequence_id
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - SofaRpcMeta::reason
    - static_cast<uint64_t>
    - SofaRpcMeta::error_code
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - SofaRpcMeta::compress_type
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:559,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:563,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_method
      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: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:571,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:574,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:578,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: 579
      start: 551
    functionDepth: 2
    functionLinenumber: 551
    functionLinenumberEnd: 579
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_method
    - butil::IOBuf*::append
    - Controller*::request_attachment
    - SofaRpcMeta::set_compress_type
    - method_name
    - Controller*::request_compress_type
    - SofaRpcMeta::set_type
    - LOG
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::sampled_request
    - size
    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:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 69
    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:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 88
    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: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    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: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    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: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    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: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    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: 122
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 122
    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: 129
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 129
    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:136,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:140,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: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<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:145,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:156,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:160,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - GetProtobufByteSize
    - brpc::policy::PackSofaHeader
    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:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:180,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:197,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:204,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:205,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 206
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - SofaRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:218,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:222,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:228,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:229,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:238,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:243,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:250,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:259,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:266,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:267,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:273,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:278,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:298,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:299,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:300,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:308,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: 310
      start: 210
    functionDepth: 5
    functionLinenumber: 210
    functionLinenumberEnd: 310
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - CHECK_EQ
    - Controller*::response_attachment
    - butil::IOBuf::size
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - butil::IOBuf::movable
    - Controller*::ErrorCode
    - SofaRpcMeta::set_reason
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::response_compress_type
    - SofaRpcMeta::set_failed
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - SofaRpcMeta::set_compress_type
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - google::protobuf::Message*::InitializationErrorString
    - Socket*::description
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - auto::set_sent_us
    - butil::IOBuf::length
    - Socket*::Write
    - auto::set_start_send_us
    - SofaRpcMeta::set_type
    - butil::IOBuf::IOBuf
    - SofaRpcMeta::set_error_code
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - SerializeAsCompressedData
    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:322,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:324,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:325,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:331,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:332,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:342,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:347,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:348,1
    - Dst: LOG
      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:352,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:353,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:357,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:365,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:367,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:369,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:373,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:386,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:392,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:393,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:398,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:404,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:412,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:419,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:424,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:428,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:429,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:436,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:447,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:449,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,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:455,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:459,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:461,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:463,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,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:472,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      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:476,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:480,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:489,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 321
    functionDepth: 6
    functionLinenumber: 321
    functionLinenumberEnd: 490
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - DestroyingPtr::meta::size
    - brpc::Span::CreateServerSpan
    - TooManyUserCode
    - SofaRpcMeta::sequence_id
    - butil::EnsureString
    - LOG
    - ParsePbFromIOBuf
    - std::unique_ptr::release
    - BeginRunningUserCode
    - std::unique_ptr::SetFailed
    - ControllerPrivateAccessor::set_server
    - ParseFromCompressedData
    - InputMessageBase*::arg
    - Server*::options
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - DestroyingPtr::payload::size
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - DestroyingPtr::received_us
    - EndRunningUserCodeInPlace
    - brpc::policy::SendSofaResponse
    - std::unique_ptr::unique_ptr
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - google::protobuf::Service*::GetRequestPrototype
    - Socket*::SetFailed
    - SampledRequest*::meta::set_compress_type
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - Server::MethodProperty*::method::full_name
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::unique_ptr::reset
    - butil::cpuwide_time_us
    - std::shared_ptr::set_remote_side
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - MethodStatus*::OnRequested
    - SofaRpcMeta::compress_type
    - Socket*::description
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SofaRpcMeta::method
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - std::shared_ptr::set_start_parse_us
    - google::protobuf::Service*::GetResponsePrototype
    - google::protobuf::MethodDescriptor*::full_name
    - DestroyingPtr::ReleaseSocket
    - Socket*::user
    - Server*::AcceptRequest
    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:493,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:493,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:494,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 499
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - static_cast<const Server*>
    - InputMessageBase*::arg
    - Server*::options
    - 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:502,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:506,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:514,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:515,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:526,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:530,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:535,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:536,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:541,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:548,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 501
    functionDepth: 2
    functionLinenumber: 501
    functionLinenumberEnd: 549
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - brpc::policy::Sofa2CompressType
    - DestroyingPtr::meta::size
    - Controller*::response
    - SofaRpcMeta::sequence_id
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - SofaRpcMeta::reason
    - static_cast<uint64_t>
    - SofaRpcMeta::error_code
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - SofaRpcMeta::compress_type
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:559,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:563,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_method
      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: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:571,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:574,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:578,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: 579
      start: 551
    functionDepth: 2
    functionLinenumber: 551
    functionLinenumberEnd: 579
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_method
    - butil::IOBuf*::append
    - Controller*::request_attachment
    - SofaRpcMeta::set_compress_type
    - method_name
    - Controller*::request_compress_type
    - SofaRpcMeta::set_type
    - LOG
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::sampled_request
    - size
    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:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 69
    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:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 88
    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: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    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: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    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: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    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: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    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: 122
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 122
    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: 129
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 129
    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:136,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:140,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: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<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:145,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:156,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:160,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - GetProtobufByteSize
    - brpc::policy::PackSofaHeader
    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:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:180,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:197,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:204,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:205,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 206
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - SofaRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:218,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:222,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:228,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:229,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:238,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:243,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:250,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:259,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:266,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:267,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:273,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:278,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:298,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:299,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:300,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:308,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: 310
      start: 210
    functionDepth: 5
    functionLinenumber: 210
    functionLinenumberEnd: 310
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - CHECK_EQ
    - Controller*::response_attachment
    - butil::IOBuf::size
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - butil::IOBuf::movable
    - Controller*::ErrorCode
    - SofaRpcMeta::set_reason
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::response_compress_type
    - SofaRpcMeta::set_failed
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - SofaRpcMeta::set_compress_type
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - google::protobuf::Message*::InitializationErrorString
    - Socket*::description
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - auto::set_sent_us
    - butil::IOBuf::length
    - Socket*::Write
    - auto::set_start_send_us
    - SofaRpcMeta::set_type
    - butil::IOBuf::IOBuf
    - SofaRpcMeta::set_error_code
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - SerializeAsCompressedData
    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:322,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:324,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:325,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:331,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:332,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:342,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:347,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:348,1
    - Dst: LOG
      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:352,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:353,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:357,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:365,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:367,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:369,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:373,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:386,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:392,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:393,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:398,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:404,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:412,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:419,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:424,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:428,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:429,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:436,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:447,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:449,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,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:455,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:459,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:461,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:463,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,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:472,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      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:476,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:480,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:489,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 321
    functionDepth: 6
    functionLinenumber: 321
    functionLinenumberEnd: 490
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - DestroyingPtr::meta::size
    - brpc::Span::CreateServerSpan
    - TooManyUserCode
    - SofaRpcMeta::sequence_id
    - butil::EnsureString
    - LOG
    - ParsePbFromIOBuf
    - std::unique_ptr::release
    - BeginRunningUserCode
    - std::unique_ptr::SetFailed
    - ControllerPrivateAccessor::set_server
    - ParseFromCompressedData
    - InputMessageBase*::arg
    - Server*::options
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - DestroyingPtr::payload::size
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - DestroyingPtr::received_us
    - EndRunningUserCodeInPlace
    - brpc::policy::SendSofaResponse
    - std::unique_ptr::unique_ptr
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - google::protobuf::Service*::GetRequestPrototype
    - Socket*::SetFailed
    - SampledRequest*::meta::set_compress_type
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - Server::MethodProperty*::method::full_name
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::unique_ptr::reset
    - butil::cpuwide_time_us
    - std::shared_ptr::set_remote_side
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - MethodStatus*::OnRequested
    - SofaRpcMeta::compress_type
    - Socket*::description
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SofaRpcMeta::method
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - std::shared_ptr::set_start_parse_us
    - google::protobuf::Service*::GetResponsePrototype
    - google::protobuf::MethodDescriptor*::full_name
    - DestroyingPtr::ReleaseSocket
    - Socket*::user
    - Server*::AcceptRequest
    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:493,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:493,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:494,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 499
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - static_cast<const Server*>
    - InputMessageBase*::arg
    - Server*::options
    - 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:502,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:506,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:514,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:515,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:526,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:530,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:535,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:536,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:541,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:548,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 501
    functionDepth: 2
    functionLinenumber: 501
    functionLinenumberEnd: 549
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - brpc::policy::Sofa2CompressType
    - DestroyingPtr::meta::size
    - Controller*::response
    - SofaRpcMeta::sequence_id
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - SofaRpcMeta::reason
    - static_cast<uint64_t>
    - SofaRpcMeta::error_code
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - SofaRpcMeta::compress_type
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:559,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:563,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_method
      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: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:571,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:574,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:578,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: 579
      start: 551
    functionDepth: 2
    functionLinenumber: 551
    functionLinenumberEnd: 579
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_method
    - butil::IOBuf*::append
    - Controller*::request_attachment
    - SofaRpcMeta::set_compress_type
    - method_name
    - Controller*::request_compress_type
    - SofaRpcMeta::set_type
    - LOG
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::sampled_request
    - size
    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:66,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - SofaCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 55
    functionDepth: 1
    functionLinenumber: 55
    functionLinenumberEnd: 69
    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:82,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 88
    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: 93
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 93
    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: 99
      start: 95
    functionDepth: 0
    functionLinenumber: 95
    functionLinenumberEnd: 99
    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: 107
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 107
    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: 116
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 116
    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: 122
      start: 118
    functionDepth: 0
    functionLinenumber: 118
    functionLinenumberEnd: 122
    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: 129
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 129
    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:136,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:137,1
    - Dst: SofaRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:140,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: 141
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 141
    functionName: brpc::policy::PackSofaHeader
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - SofaRawPacker::pack32
    - reinterpret_cast<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:145,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:148,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:152,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:153,1
    - Dst: brpc::policy::PackSofaHeader
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:156,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:157,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:160,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - SofaRpcMeta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 143
    functionDepth: 1
    functionLinenumber: 143
    functionLinenumberEnd: 163
    functionName: brpc::policy::SerializeSofaHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SerializeWithCachedSizes
    - ::google::protobuf::io::CodedOutputStream::HadError
    - butil::IOBuf*::append
    - CHECK
    - GetProtobufByteSize
    - brpc::policy::PackSofaHeader
    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:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:172,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:175,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:176,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:180,1
    - Dst: SofaRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:195,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:196,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:197,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:198,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:199,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:201,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:202,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:204,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:205,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 206
    functionName: brpc::policy::ParseSofaMessage
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - butil::IOBuf*::length
    - MakeMessage
    - SofaRawUnpacker::unpack32
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:218,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:220,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:222,1
    - Dst: Controller*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:228,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:229,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:233,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:238,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:242,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:243,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:244,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:245,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:247,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:248,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:249,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:250,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:259,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:263,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:265,1
    - Dst: SofaRpcMeta::set_failed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:266,1
    - Dst: SofaRpcMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:267,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:268,1
    - Dst: SofaRpcMeta::set_reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:271,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:273,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:274,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:275,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:277,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:278,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:280,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:283,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:292,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:296,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:298,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:299,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:300,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:305,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:308,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: 310
      start: 210
    functionDepth: 5
    functionLinenumber: 210
    functionLinenumberEnd: 310
    functionName: brpc::policy::SendSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - CHECK_EQ
    - Controller*::response_attachment
    - butil::IOBuf::size
    - LOG_IF
    - ControllerPrivateAccessor::get_sending_socket
    - Controller*::IsCloseConnection
    - auto::set_response_size
    - butil::IOBuf::movable
    - Controller*::ErrorCode
    - SofaRpcMeta::set_reason
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::response_compress_type
    - SofaRpcMeta::set_failed
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - SofaRpcMeta::set_compress_type
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - brpc::policy::CompressType2Sofa
    - bthread_id_join
    - google::protobuf::Message*::InitializationErrorString
    - Socket*::description
    - bthread_id_create
    - Controller*::Failed
    - Controller*::ErrorText
    - auto::set_sent_us
    - butil::IOBuf::length
    - Socket*::Write
    - auto::set_start_send_us
    - SofaRpcMeta::set_type
    - butil::IOBuf::IOBuf
    - SofaRpcMeta::set_error_code
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - SerializeAsCompressedData
    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:322,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:324,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:325,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:326,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:330,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:331,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:332,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:333,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:336,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:338,1
    - Dst: SampledRequest*::meta::set_method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:340,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:341,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:342,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:344,1
    - Dst: Controller::Controller
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:347,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:348,1
    - Dst: LOG
      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:352,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:353,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:355,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:357,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:358,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:359,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:361,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:362,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:364,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:365,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:366,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:367,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:369,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:373,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:374,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:378,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:379,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:381,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:382,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:383,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:384,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:385,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:386,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:387,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:392,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:393,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:397,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:398,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:400,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:404,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByFullName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:410,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:412,1
    - Dst: SofaRpcMeta::method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:413,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:416,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:417,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:419,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:420,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:424,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:428,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:429,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: Server::MethodProperty*::method::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:430,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:436,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:438,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:445,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:446,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:447,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:449,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:453,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:455,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:459,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:461,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:463,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:467,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:468,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:471,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:472,1
    - Dst: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:474,1
    - Dst: google::protobuf::Service*::CallMethod
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:475,1
    - Dst: std::unique_ptr::release
      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:476,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:477,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:480,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:481,1
    - Dst: brpc::policy::SendSofaResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:487,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:488,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:489,1
    CyclomaticComplexity: 31
    EdgeCount: 31
    ICount: 89
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 490
      start: 321
    functionDepth: 6
    functionLinenumber: 321
    functionLinenumberEnd: 490
    functionName: brpc::policy::ProcessSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - Server*::IsRunning
    - SampledRequest*::submit
    - AskToBeSampled
    - brpc::policy::Sofa2CompressType
    - SampledRequest*::meta::set_protocol_type
    - ControllerPrivateAccessor::set_span
    - std::shared_ptr::set_protocol
    - DestroyingPtr::meta::size
    - brpc::Span::CreateServerSpan
    - TooManyUserCode
    - SofaRpcMeta::sequence_id
    - butil::EnsureString
    - LOG
    - ParsePbFromIOBuf
    - std::unique_ptr::release
    - BeginRunningUserCode
    - std::unique_ptr::SetFailed
    - ControllerPrivateAccessor::set_server
    - ParseFromCompressedData
    - InputMessageBase*::arg
    - Server*::options
    - std::shared_ptr::set_request_size
    - ScopedNonServiceError::release
    - IsTraceable
    - std::shared_ptr::AsParent
    - Socket*::local_side
    - DestroyingPtr::payload::size
    - "::brpc::NewCallback<\n            int64_t, Controller*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - DestroyingPtr::received_us
    - EndRunningUserCodeInPlace
    - brpc::policy::SendSofaResponse
    - std::unique_ptr::unique_ptr
    - Server*::thread_local_options
    - google::protobuf::Service*::CallMethod
    - DestroyingPtr::reset
    - butil::endpoint2str
    - std::shared_ptr::set_start_callback_us
    - SampledRequest*::meta::set_method_name
    - Controller::Controller
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - google::protobuf::Service*::GetRequestPrototype
    - Socket*::SetFailed
    - SampledRequest*::meta::set_compress_type
    - bthread_assign_data
    - Socket*::is_overcrowded
    - DestroyingPtr::base_real_us
    - Server::MethodProperty*::method::full_name
    - static_cast<const Server*>
    - SocketUniquePtr::get
    - std::unique_ptr::reset
    - butil::cpuwide_time_us
    - std::shared_ptr::set_remote_side
    - ServerPrivateAccessor::FindMethodPropertyByFullName
    - MethodStatus*::OnRequested
    - SofaRpcMeta::compress_type
    - Socket*::description
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SofaRpcMeta::method
    - brpc::policy::EndRunningCallMethodInPool
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - std::shared_ptr::set_start_parse_us
    - google::protobuf::Service*::GetResponsePrototype
    - google::protobuf::MethodDescriptor*::full_name
    - DestroyingPtr::ReleaseSocket
    - Socket*::user
    - Server*::AcceptRequest
    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:493,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:493,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:494,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:495,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 499
      start: 492
    functionDepth: 1
    functionLinenumber: 492
    functionLinenumberEnd: 499
    functionName: brpc::policy::VerifySofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - static_cast<const Server*>
    - InputMessageBase*::arg
    - Server*::options
    - 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:502,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:505,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:506,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: SofaRpcMeta::sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:510,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:512,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:514,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:515,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:520,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:521,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:522,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:523,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:524,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:526,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:527,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::error_code
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:529,1
    - Dst: SofaRpcMeta::reason
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:530,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:531,1
    - Dst: brpc::policy::Sofa2CompressType
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: SofaRpcMeta::compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:533,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:534,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:535,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:536,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:539,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:541,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:547,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:548,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 27
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 501
    functionDepth: 2
    functionLinenumber: 501
    functionLinenumberEnd: 549
    functionName: brpc::policy::ProcessSofaResponse
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - brpc::policy::Sofa2CompressType
    - DestroyingPtr::meta::size
    - Controller*::response
    - SofaRpcMeta::sequence_id
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - DestroyingPtr::payload::length
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::set_response_compress_type
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - SofaRpcMeta::reason
    - static_cast<uint64_t>
    - SofaRpcMeta::error_code
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - SofaRpcMeta::compress_type
    - auto::set_received_us
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:558,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:559,1
    - Dst: SofaRpcMeta::set_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:563,1
    - Dst: SofaRpcMeta::set_sequence_id
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:564,1
    - Dst: SofaRpcMeta::set_method
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:566,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::request_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:567,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:568,1
    - Dst: SofaRpcMeta::set_method
      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: method_name
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:570,1
    - Dst: SofaRpcMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:571,1
    - Dst: brpc::policy::CompressType2Sofa
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:572,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:574,1
    - Dst: brpc::policy::SerializeSofaHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:577,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp:578,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: 579
      start: 551
    functionDepth: 2
    functionLinenumber: 551
    functionLinenumberEnd: 579
    functionName: brpc::policy::PackSofaRequest
    functionSourceFile: /src/brpc/src/brpc/policy/sofa_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - SofaRpcMeta::set_method
    - butil::IOBuf*::append
    - Controller*::request_attachment
    - SofaRpcMeta::set_compress_type
    - method_name
    - Controller*::request_compress_type
    - SofaRpcMeta::set_type
    - LOG
    - brpc::policy::CompressType2Sofa
    - SofaRpcMeta::set_sequence_id
    - Controller*::SetFailed
    - compress_type
    - google::protobuf::MethodDescriptor*::full_name
    - brpc::policy::SerializeSofaHeaderAndMeta
    - Controller*::sampled_request
    - size
    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: BIG_CONSTANT
      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: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - BIG_CONSTANT
    - static_cast<int>
    - CHECK_EQ
    - 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: BIG_CONSTANT
      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: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - BIG_CONSTANT
    - static_cast<int>
    - CHECK_EQ
    - 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: BIG_CONSTANT
      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: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - BIG_CONSTANT
    - static_cast<int>
    - CHECK_EQ
    - 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: BIG_CONSTANT
      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: 1
    functionLinenumber: 44
    functionLinenumberEnd: 48
    functionName: brpc::policy::ConstantConcurrencyLimiter::New
    functionSourceFile: /src/brpc/src/brpc/policy/constant_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - ConstantConcurrencyLimiter::ConstantConcurrencyLimiter
    - BIG_CONSTANT
    - static_cast<int>
    - CHECK_EQ
    - 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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::push_back
    - hostname2endpoint
    - butil::StringPiece::data
    - LOG
    - butil::StringPiece::size
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - brpc::policy::SplitIntoServerAndTag
    - const_cast<char*>
    - std::string::assign
    - std::vector<ServerNode>*::size
    - str2endpoint
    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:
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    - std::vector::clear
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::push_back
    - hostname2endpoint
    - butil::StringPiece::data
    - LOG
    - butil::StringPiece::size
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - brpc::policy::SplitIntoServerAndTag
    - const_cast<char*>
    - std::string::assign
    - std::vector<ServerNode>*::size
    - str2endpoint
    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:
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    - std::vector::clear
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::push_back
    - hostname2endpoint
    - butil::StringPiece::data
    - LOG
    - butil::StringPiece::size
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - brpc::policy::SplitIntoServerAndTag
    - const_cast<char*>
    - std::string::assign
    - std::vector<ServerNode>*::size
    - str2endpoint
    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:
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    - std::vector::clear
    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:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::CopyToString
    - std::vector<ServerNode>*::push_back
    - hostname2endpoint
    - butil::StringPiece::data
    - LOG
    - butil::StringPiece::size
    - std::set::insert
    - butil::EndPoint::EndPoint
    - std::vector<ServerNode>*::clear
    - brpc::policy::SplitIntoServerAndTag
    - const_cast<char*>
    - std::string::assign
    - std::vector<ServerNode>*::size
    - str2endpoint
    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:
    - NamingServiceActions*::ResetServers
    - brpc::policy::ListNamingService::GetServers
    - std::vector::clear
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    - server_list::size
    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:
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    - size
    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:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    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: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:122,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:125,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:130,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:133,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:139,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:142,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:149,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:151,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:152,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:159,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 172
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - IsServerAvailable
    - butil::FlatSet::size
    - Read
    - std::lower_bound
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::FlatSet
    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:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 177
    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: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    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:191,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 200
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    - server_list::size
    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:
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    - size
    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:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    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: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:122,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:125,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:130,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:133,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:139,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:142,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:149,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:151,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:152,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:159,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 172
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - IsServerAvailable
    - butil::FlatSet::size
    - Read
    - std::lower_bound
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::FlatSet
    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:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 177
    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: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    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:191,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 200
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    - server_list::size
    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:
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    - size
    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:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    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: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:122,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:125,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:130,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:133,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:139,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:142,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:149,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:151,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:152,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:159,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 172
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - IsServerAvailable
    - butil::FlatSet::size
    - Read
    - std::lower_bound
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::FlatSet
    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:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 177
    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: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    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:191,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 200
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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_map::emplace
    - LOG
    - server_list::reserve
    - server_list::emplace_back
    - server_list::capacity
    - butil::StringToUint
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    - server_list::size
    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:
    - brpc::policy::WeightedRandomizedLoadBalancer::Add
    - size
    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:
    - size
    - brpc::policy::WeightedRandomizedLoadBalancer::Remove
    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: 9
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:122,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:125,1
    - Dst: butil::FlatSet::FlatSet
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:130,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:133,1
    - Dst: std::lower_bound
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:136,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:139,1
    - Dst: butil::FlatSet::insert
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:142,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:143,1
    - Dst: butil::FlatSet::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:149,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:151,1
    - Dst: bthread::prime_offset
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:152,1
    - Dst: butil::FlatSet::seek
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:156,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:159,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:160,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 30
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 172
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - bthread::prime_offset
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::begin
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::ExcludedServers::IsExcluded
    - butil::fast_rand_less_than
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::end
    - IsServerAvailable
    - butil::FlatSet::size
    - Read
    - std::lower_bound
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::FlatSet
    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:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 174
    functionDepth: 0
    functionLinenumber: 174
    functionLinenumberEnd: 177
    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: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    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:191,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp:194,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 200
    functionName: brpc::policy::WeightedRandomizedLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/weighted_randomized_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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:90,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 97
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - butil::cpuwide_time_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:100,1
    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: 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: 105
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 105
    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:109,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:116,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:121,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:124,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:129,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 138
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_strong
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - fetch_add
    - VLOG
    - butil::cpuwide_time_us
    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: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    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: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    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:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 153
    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:168,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:169,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:189,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:200,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:205,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: 207
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 207
    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::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    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:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 216
    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: 225
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 225
    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: 234
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 234
    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:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 241
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:244,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:256,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:269,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:271,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:272,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:280,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:288,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:290,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 297
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 1
    functionsReached:
    - load
    - static_cast<double>
    - std::max
    - std::min
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::ceil
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    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:90,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 97
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - butil::cpuwide_time_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:100,1
    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: 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: 105
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 105
    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:109,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:116,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:121,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:124,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:129,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 107
    functionDepth: 3
    functionLinenumber: 107
    functionLinenumberEnd: 138
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_strong
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - fetch_add
    - VLOG
    - butil::cpuwide_time_us
    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: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    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: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    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:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 153
    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:168,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:169,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:189,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:200,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:205,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: 207
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 207
    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::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    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:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 216
    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: 225
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 225
    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: 234
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 234
    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:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 241
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:244,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:256,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:269,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:271,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:272,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:280,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:288,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:290,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 297
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 2
    functionsReached:
    - load
    - static_cast<double>
    - std::max
    - std::min
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::ceil
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    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:90,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 97
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - butil::cpuwide_time_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:100,1
    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: 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: 105
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 105
    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:109,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:116,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:121,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:124,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:129,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 107
    functionDepth: 3
    functionLinenumber: 107
    functionLinenumberEnd: 138
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_strong
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - fetch_add
    - VLOG
    - butil::cpuwide_time_us
    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: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    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: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    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:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 153
    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:168,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:169,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:189,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:200,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:205,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: 207
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 207
    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::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    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:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 216
    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: 225
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 225
    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: 234
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 234
    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:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 241
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:244,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:256,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:269,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:271,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:272,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:280,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:288,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:290,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 297
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 3
    functionsReached:
    - load
    - static_cast<double>
    - std::max
    - std::min
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::ceil
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    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:90,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 88
    functionDepth: 2
    functionLinenumber: 88
    functionLinenumberEnd: 97
    functionName: brpc::policy::AutoConcurrencyLimiter::AutoConcurrencyLimiter
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - butil::cpuwide_time_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:100,1
    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: 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: 105
      start: 103
    functionDepth: 0
    functionLinenumber: 103
    functionLinenumberEnd: 105
    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:109,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:114,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:116,1
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:121,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AddSample
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:124,1
    - Dst: VLOG
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:129,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 14
    argCount: 2
    argNames:
    - error_code
    - latency_us
    argTypes:
    - int
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 107
    functionDepth: 3
    functionLinenumber: 107
    functionLinenumberEnd: 138
    functionName: brpc::policy::AutoConcurrencyLimiter::OnResponded
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 0
    functionsReached:
    - load
    - compare_exchange_strong
    - brpc::policy::AutoConcurrencyLimiter::AddSample
    - fetch_add
    - VLOG
    - butil::cpuwide_time_us
    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: 142
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 142
    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: 146
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 146
    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:151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 153
    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:168,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:169,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:189,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:200,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:203,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::ResetSampleWindow
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:205,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: 207
      start: 155
    functionDepth: 2
    functionLinenumber: 155
    functionLinenumberEnd: 207
    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::UpdateMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::NextResetTime
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    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:210,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 216
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 216
    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: 225
      start: 218
    functionDepth: 0
    functionLinenumber: 218
    functionLinenumberEnd: 225
    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: 234
      start: 227
    functionDepth: 0
    functionLinenumber: 227
    functionLinenumberEnd: 234
    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:237,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - next_max_concurrency
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 241
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:244,1
    - Dst: static_cast<double>
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:256,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:269,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:271,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::UpdateQps
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:272,1
    - Dst: std::ceil
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:280,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:288,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:290,1
    - Dst: brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
      Src: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp:296,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 22
    argCount: 1
    argNames:
    - sampling_time_us
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 297
      start: 243
    functionDepth: 1
    functionLinenumber: 243
    functionLinenumberEnd: 297
    functionName: brpc::policy::AutoConcurrencyLimiter::UpdateMaxConcurrency
    functionSourceFile: /src/brpc/src/brpc/policy/auto_concurrency_limiter.cpp
    functionUses: 4
    functionsReached:
    - load
    - static_cast<double>
    - std::max
    - std::min
    - brpc::policy::AutoConcurrencyLimiter::AdjustMaxConcurrency
    - brpc::policy::AutoConcurrencyLimiter::UpdateMinLatency
    - std::ceil
    - brpc::policy::AutoConcurrencyLimiter::UpdateQps
    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:
    - butil::IOBuf::to_string
    - empty
    - c_str
    - butil::IOBuf::IOBuf
    - brpc::RedisCommandFormat
    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:
    - butil::IOBuf::to_string
    - empty
    - c_str
    - butil::IOBuf::IOBuf
    - brpc::RedisCommandFormat
    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:
    - butil::IOBuf::to_string
    - empty
    - c_str
    - butil::IOBuf::IOBuf
    - brpc::RedisCommandFormat
    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:
    - butil::IOBuf::to_string
    - empty
    - c_str
    - butil::IOBuf::IOBuf
    - brpc::RedisCommandFormat
    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:45,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:47,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 58
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::ServiceDescriptor*::full_name
    - butil::EnsureString
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:67,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: 70
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - body::length
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::MessageHandler::parse_from_iobuf
    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:75,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:76,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:81,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:86,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:92,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,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: 97
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 97
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - google::protobuf::Message*::GetDescriptor
    - Controller*::Failed
    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:100,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:102,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:107,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:110,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:115,1
    - Dst: auto::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: auto::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: auto::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: auto::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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,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: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetDescriptor
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Controller*::CloseConnection
    - Socket*::correlation_id
    - auto::set_received_us
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - berror
    - mcpack2pb::find_message_handler
    - bthread_id_lock
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,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: std::string::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::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:45,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:47,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 58
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::ServiceDescriptor*::full_name
    - butil::EnsureString
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:67,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: 70
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - body::length
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::MessageHandler::parse_from_iobuf
    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:75,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:76,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:81,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:86,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:92,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,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: 97
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 97
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - google::protobuf::Message*::GetDescriptor
    - Controller*::Failed
    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:100,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:102,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:107,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:110,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:115,1
    - Dst: auto::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: auto::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: auto::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: auto::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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,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: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetDescriptor
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Controller*::CloseConnection
    - Socket*::correlation_id
    - auto::set_received_us
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - berror
    - mcpack2pb::find_message_handler
    - bthread_id_lock
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,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: std::string::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::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:45,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:47,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 58
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::ServiceDescriptor*::full_name
    - butil::EnsureString
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:67,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: 70
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - body::length
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::MessageHandler::parse_from_iobuf
    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:75,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:76,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:81,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:86,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:92,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,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: 97
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 97
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - google::protobuf::Message*::GetDescriptor
    - Controller*::Failed
    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:100,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:102,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:107,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:110,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:115,1
    - Dst: auto::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: auto::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: auto::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: auto::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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,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: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetDescriptor
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Controller*::CloseConnection
    - Socket*::correlation_id
    - auto::set_received_us
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - berror
    - mcpack2pb::find_message_handler
    - bthread_id_lock
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,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: std::string::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::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:45,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:47,1
    - Dst: google::protobuf::Service*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:50,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:51,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:52,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:53,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:56,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:57,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - ' svr'
    - cntl
    - out_meta
    argTypes:
    - Server
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 58
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - google::protobuf::ServiceDescriptor*::full_name
    - butil::EnsureString
    - google::protobuf::ServiceDescriptor*::method_count
    - google::protobuf::MethodDescriptor*::full_name
    - Controller*::SetFailed
    - NsheadMeta*::set_full_method_name
    - first_service
    - google::protobuf::Service*::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:63,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:64,1
    - Dst: mcpack2pb::MessageHandler::parse_from_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:65,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:66,1
    - Dst: body::length
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:67,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: 70
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 70
    functionName: brpc::policy::NsheadMcpackAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - body::length
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::MessageHandler::parse_from_iobuf
    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:75,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:76,1
    - Dst: Controller*::response_compress_type
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:81,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:86,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:90,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:91,1
    - Dst: mcpack2pb::MessageHandler::serialize_to_iobuf
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:92,1
    - Dst: Controller*::CloseConnection
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:94,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: 97
      start: 72
    functionDepth: 2
    functionLinenumber: 72
    functionLinenumberEnd: 97
    functionName: brpc::policy::NsheadMcpackAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - LOG
    - Controller*::response_compress_type
    - Controller*::CloseConnection
    - google::protobuf::Message*::GetDescriptor
    - Controller*::Failed
    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:100,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:102,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:105,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:107,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:109,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:110,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:115,1
    - Dst: auto::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: auto::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: auto::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: auto::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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:127,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: 99
    functionDepth: 2
    functionLinenumber: 99
    functionLinenumberEnd: 136
    functionName: brpc::policy::ProcessNsheadMcpackResponse
    functionSourceFile: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - google::protobuf::Message*::GetDescriptor
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Controller*::CloseConnection
    - Socket*::correlation_id
    - auto::set_received_us
    - mcpack2pb::MessageHandler::parse_from_iobuf
    - berror
    - mcpack2pb::find_message_handler
    - bthread_id_lock
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/nshead_mcpack_protocol.cpp:146,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: std::string::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::MessageHandler::serialize_to_iobuf
    - std::string::c_str
    - butil::EnsureString
    - mcpack2pb::find_message_handler
    - Controller*::request_compress_type
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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: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
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 70
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:82,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:85,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:90,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:95,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:102,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:109,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:111,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:116,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:117,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:124,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:127,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:146,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:149,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:151,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 51
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 155
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    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:158,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:163,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:165,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:166,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:179,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:186,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:188,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:193,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:194,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 157
    functionDepth: 2
    functionLinenumber: 157
    functionLinenumberEnd: 195
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - raw_buffer
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:201,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:204,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,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: 210
      start: 197
    functionDepth: 2
    functionLinenumber: 197
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - MemcacheRequest*::raw_buffer
    - ControllerPrivateAccessor
    - MemcacheRequest*::pipelined_count
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:221,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:222,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:224,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:226,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: 227
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 227
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    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: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    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: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
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 70
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:82,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:85,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:90,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:95,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:102,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:109,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:111,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:116,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:117,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:124,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:127,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:146,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:149,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:151,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 51
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 155
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    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:158,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:163,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:165,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:166,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:179,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:186,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:188,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:193,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:194,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 157
    functionDepth: 2
    functionLinenumber: 157
    functionLinenumberEnd: 195
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - raw_buffer
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:201,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:204,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,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: 210
      start: 197
    functionDepth: 2
    functionLinenumber: 197
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - MemcacheRequest*::raw_buffer
    - ControllerPrivateAccessor
    - MemcacheRequest*::pipelined_count
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:221,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:222,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:224,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:226,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: 227
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 227
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    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: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    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: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
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 70
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:82,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:85,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:90,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:95,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:102,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:109,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:111,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:116,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:117,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:124,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:127,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:146,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:149,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:151,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 51
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 155
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    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:158,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:163,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:165,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:166,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:179,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:186,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:188,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:193,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:194,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 157
    functionDepth: 2
    functionLinenumber: 157
    functionLinenumberEnd: 195
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - raw_buffer
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:201,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:204,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,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: 210
      start: 197
    functionDepth: 2
    functionLinenumber: 197
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - MemcacheRequest*::raw_buffer
    - ControllerPrivateAccessor
    - MemcacheRequest*::pipelined_count
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:221,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:222,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:224,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:226,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: 227
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 227
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    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: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    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: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
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 70
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:73,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 75
    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: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:80,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:82,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:85,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:90,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:93,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:95,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:97,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:98,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:102,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:104,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:108,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:109,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:110,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:111,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:114,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:116,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:117,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:124,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:127,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:129,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:130,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:132,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:133,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:137,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:138,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:142,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:143,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:146,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:147,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:149,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:151,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 51
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 155
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 155
    functionName: brpc::policy::ParseMemcacheMessage
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    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:158,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:163,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:165,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:166,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:171,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:172,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:173,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:174,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:175,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:177,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:178,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:179,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:180,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:181,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:185,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:186,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:188,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:193,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:194,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 157
    functionDepth: 2
    functionLinenumber: 157
    functionLinenumberEnd: 195
    functionName: brpc::policy::ProcessMemcacheResponse
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - raw_buffer
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    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:201,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:203,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:204,1
    - Dst: MemcacheRequest*::raw_buffer
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,1
    - Dst: MemcacheRequest*::pipelined_count
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:209,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: 210
      start: 197
    functionDepth: 2
    functionLinenumber: 197
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - MemcacheRequest*::raw_buffer
    - ControllerPrivateAccessor
    - MemcacheRequest*::pipelined_count
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:221,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:222,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:224,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp:226,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: 227
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 227
    functionName: brpc::policy::PackMemcacheRequest
    functionSourceFile: /src/brpc/src/brpc/policy/memcache_binary_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - butil::IOBuf*::append
    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: 234
      start: 229
    functionDepth: 0
    functionLinenumber: 229
    functionLinenumberEnd: 234
    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:
    - port
    - std::vector<ServerNode>*::push_back
    - host_ip
    - BnsOutput::instance
    - tag
    - LOG
    - BnsInput::set_service_name
    - ServerNode
    - std::vector<ServerNode>*::clear
    - webfoot::get_instance_by_service
    - BnsOutput::instance_size
    - status
    - webfoot::error_to_string
    - butil::str2ip
    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:
    - port
    - std::vector<ServerNode>*::push_back
    - host_ip
    - BnsOutput::instance
    - tag
    - LOG
    - BnsInput::set_service_name
    - ServerNode
    - std::vector<ServerNode>*::clear
    - webfoot::get_instance_by_service
    - BnsOutput::instance_size
    - status
    - webfoot::error_to_string
    - butil::str2ip
    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:
    - port
    - std::vector<ServerNode>*::push_back
    - host_ip
    - BnsOutput::instance
    - tag
    - LOG
    - BnsInput::set_service_name
    - ServerNode
    - std::vector<ServerNode>*::clear
    - webfoot::get_instance_by_service
    - BnsOutput::instance_size
    - status
    - webfoot::error_to_string
    - butil::str2ip
    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:
    - port
    - std::vector<ServerNode>*::push_back
    - host_ip
    - BnsOutput::instance
    - tag
    - LOG
    - BnsInput::set_service_name
    - ServerNode
    - std::vector<ServerNode>*::clear
    - webfoot::get_instance_by_service
    - BnsOutput::instance_size
    - status
    - webfoot::error_to_string
    - butil::str2ip
    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: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::max<int64_t>
    - std::min
    - std::max
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::P2CEwmaLoadBalancer()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:72,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:73,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:75,1
    - Dst: WeightOfTag
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:78,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:79,1
    - Dst: std::make_shared<NodeStat>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:83,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:88,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:89,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' id'
    argTypes:
    - Servers
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 91
    functionName: brpc::policy::P2CEwmaLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_map::seek
    - server_list::reserve
    - WeightOfTag
    - std::make_shared<NodeStat>
    - server_list::push_back
    - server_list::capacity
    - server_list::size
    linkageType: ''
    returnType: bool
    signature: "bool P2CEwmaLoadBalancer::Add(Servers& bg, const Servers& fg,\n                              const
      ServerId& id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:94,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:99,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:101,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 104
    functionName: brpc::policy::P2CEwmaLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - server_list::pop_back
    - server_map::seek
    - server_list::back
    - server_map::erase
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:109,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    argTypes:
    - Servers
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::P2CEwmaLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchAdd(\n    Servers& bg, const Servers&
      fg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:118,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/p2c_ewma_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: 1
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::P2CEwmaLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:134,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 139
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:149,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:151,1
    - Dst: stat::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:157,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:161,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:163,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' info'
    - now_us
    argTypes:
    - ServerInfo
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 168
    functionName: brpc::policy::P2CEwmaLoadBalancer::Score
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - stat::stamp_us::load
    - std::exp
    - std::max
    - stat::ewma_us::load
    - stat::inflight::load
    linkageType: ''
    returnType: double
    signature: "double P2CEwmaLoadBalancer::Score(\n    const ServerInfo& info, int64_t
      now_us) const"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:175,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:182,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:191,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:195,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:198,1
    - Dst: SocketUniquePtr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:202,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:206,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:210,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:212,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:222,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:234,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:240,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:249,1
    - Dst: ServerInfo*::stat::inflight::fetch_add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:259,1
    - Dst: SelectOut*::ptr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:262,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 60
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 264
    functionName: brpc::policy::P2CEwmaLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::swap
    - ServerInfo*::stat::inflight::fetch_add
    - butil::gettimeofday_us
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - butil::fast_rand_less_than
    - IsServerAvailable
    - std::min
    - consider
    - Read
    - SelectOut*::ptr::swap
    linkageType: ''
    returnType: int
    signature: int P2CEwmaLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:268,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:271,1
    - Dst: stat::get
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:276,1
    - Dst: NodeStat*::inflight::fetch_sub
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:277,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:279,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:289,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:290,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:291,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:292,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:302,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:303,1
    - Dst: NodeStat*::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:309,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:311,1
    - Dst: NodeStat*::ewma_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:314,1
    - Dst: NodeStat*::stamp_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:315,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 316
    functionName: brpc::policy::P2CEwmaLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - NodeStat*::ewma_us::load
    - std::max
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - BAIDU_SCOPED_LOCK
    - stat::get
    - controller::timeout_ms
    - std::exp
    - NodeStat*::ewma_us::store
    - Read
    - NodeStat*::stamp_us::store
    - NodeStat*::stamp_us::load
    - NodeStat*::inflight::fetch_sub
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:320,1
    - Dst: P2CEwmaLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:321,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 326
    functionName: brpc::policy::P2CEwmaLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - P2CEwmaLoadBalancer*::SetParameters
    - P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    linkageType: ''
    returnType: P2CEwmaLoadBalancer
    signature: "P2CEwmaLoadBalancer * P2CEwmaLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:335,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:343,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: brpc::policy::P2CEwmaLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    - butil::StringToInt64
    - butil::StringToUint
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::SetParameters(const butil::StringPiece& params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 360
    functionName: brpc::policy::P2CEwmaLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:370,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:375,1
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:379,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:381,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:382,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 386
    functionName: brpc::policy::P2CEwmaLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - stat::ewma_us::load
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - Read
    - stat::inflight::load
    linkageType: ''
    returnType: void
    signature: "void P2CEwmaLoadBalancer::Describe(\n    std::ostream& os, const DescribeOptions&
      options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::max<int64_t>
    - std::min
    - std::max
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::P2CEwmaLoadBalancer()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:72,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:73,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:75,1
    - Dst: WeightOfTag
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:78,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:79,1
    - Dst: std::make_shared<NodeStat>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:83,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:88,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:89,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' id'
    argTypes:
    - Servers
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 91
    functionName: brpc::policy::P2CEwmaLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_map::seek
    - server_list::reserve
    - WeightOfTag
    - std::make_shared<NodeStat>
    - server_list::push_back
    - server_list::capacity
    - server_list::size
    linkageType: ''
    returnType: bool
    signature: "bool P2CEwmaLoadBalancer::Add(Servers& bg, const Servers& fg,\n                              const
      ServerId& id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:94,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:99,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:101,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 104
    functionName: brpc::policy::P2CEwmaLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - server_list::pop_back
    - server_map::seek
    - server_list::back
    - server_map::erase
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:109,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    argTypes:
    - Servers
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::P2CEwmaLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchAdd(\n    Servers& bg, const Servers&
      fg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:118,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/p2c_ewma_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: 1
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::P2CEwmaLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:134,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 139
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:149,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:151,1
    - Dst: stat::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:157,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:161,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:163,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' info'
    - now_us
    argTypes:
    - ServerInfo
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 168
    functionName: brpc::policy::P2CEwmaLoadBalancer::Score
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - stat::stamp_us::load
    - std::exp
    - std::max
    - stat::ewma_us::load
    - stat::inflight::load
    linkageType: ''
    returnType: double
    signature: "double P2CEwmaLoadBalancer::Score(\n    const ServerInfo& info, int64_t
      now_us) const"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:175,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:182,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:191,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:195,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:198,1
    - Dst: SocketUniquePtr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:202,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:206,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:210,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:212,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:222,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:234,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:240,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:249,1
    - Dst: ServerInfo*::stat::inflight::fetch_add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:259,1
    - Dst: SelectOut*::ptr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:262,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 60
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 264
    functionName: brpc::policy::P2CEwmaLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::swap
    - ServerInfo*::stat::inflight::fetch_add
    - butil::gettimeofday_us
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - butil::fast_rand_less_than
    - IsServerAvailable
    - std::min
    - consider
    - Read
    - SelectOut*::ptr::swap
    linkageType: ''
    returnType: int
    signature: int P2CEwmaLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:268,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:271,1
    - Dst: stat::get
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:276,1
    - Dst: NodeStat*::inflight::fetch_sub
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:277,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:279,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:289,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:290,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:291,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:292,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:302,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:303,1
    - Dst: NodeStat*::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:309,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:311,1
    - Dst: NodeStat*::ewma_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:314,1
    - Dst: NodeStat*::stamp_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:315,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 316
    functionName: brpc::policy::P2CEwmaLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - NodeStat*::ewma_us::load
    - std::max
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - BAIDU_SCOPED_LOCK
    - stat::get
    - controller::timeout_ms
    - std::exp
    - NodeStat*::ewma_us::store
    - Read
    - NodeStat*::stamp_us::store
    - NodeStat*::stamp_us::load
    - NodeStat*::inflight::fetch_sub
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:320,1
    - Dst: P2CEwmaLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:321,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 326
    functionName: brpc::policy::P2CEwmaLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - P2CEwmaLoadBalancer*::SetParameters
    - P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    linkageType: ''
    returnType: P2CEwmaLoadBalancer
    signature: "P2CEwmaLoadBalancer * P2CEwmaLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:335,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:343,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: brpc::policy::P2CEwmaLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    - butil::StringToInt64
    - butil::StringToUint
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::SetParameters(const butil::StringPiece& params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 360
    functionName: brpc::policy::P2CEwmaLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:370,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:375,1
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:379,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:381,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:382,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 386
    functionName: brpc::policy::P2CEwmaLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - stat::ewma_us::load
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - Read
    - stat::inflight::load
    linkageType: ''
    returnType: void
    signature: "void P2CEwmaLoadBalancer::Describe(\n    std::ostream& os, const DescribeOptions&
      options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::max<int64_t>
    - std::min
    - std::max
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::P2CEwmaLoadBalancer()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:72,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:73,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:75,1
    - Dst: WeightOfTag
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:78,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:79,1
    - Dst: std::make_shared<NodeStat>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:83,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:88,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:89,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' id'
    argTypes:
    - Servers
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 91
    functionName: brpc::policy::P2CEwmaLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_map::seek
    - server_list::reserve
    - WeightOfTag
    - std::make_shared<NodeStat>
    - server_list::push_back
    - server_list::capacity
    - server_list::size
    linkageType: ''
    returnType: bool
    signature: "bool P2CEwmaLoadBalancer::Add(Servers& bg, const Servers& fg,\n                              const
      ServerId& id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:94,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:99,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:101,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 104
    functionName: brpc::policy::P2CEwmaLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - server_list::pop_back
    - server_map::seek
    - server_list::back
    - server_map::erase
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:109,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    argTypes:
    - Servers
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::P2CEwmaLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchAdd(\n    Servers& bg, const Servers&
      fg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:118,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/p2c_ewma_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: 1
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::P2CEwmaLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:134,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 139
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:149,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:151,1
    - Dst: stat::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:157,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:161,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:163,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' info'
    - now_us
    argTypes:
    - ServerInfo
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 168
    functionName: brpc::policy::P2CEwmaLoadBalancer::Score
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 4
    functionsReached:
    - stat::stamp_us::load
    - std::exp
    - std::max
    - stat::ewma_us::load
    - stat::inflight::load
    linkageType: ''
    returnType: double
    signature: "double P2CEwmaLoadBalancer::Score(\n    const ServerInfo& info, int64_t
      now_us) const"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:175,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:182,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:191,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:195,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:198,1
    - Dst: SocketUniquePtr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:202,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:206,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:210,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:212,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:222,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:234,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:240,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:249,1
    - Dst: ServerInfo*::stat::inflight::fetch_add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:259,1
    - Dst: SelectOut*::ptr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:262,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 60
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 264
    functionName: brpc::policy::P2CEwmaLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::swap
    - ServerInfo*::stat::inflight::fetch_add
    - butil::gettimeofday_us
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - butil::fast_rand_less_than
    - IsServerAvailable
    - std::min
    - consider
    - Read
    - SelectOut*::ptr::swap
    linkageType: ''
    returnType: int
    signature: int P2CEwmaLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:268,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:271,1
    - Dst: stat::get
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:276,1
    - Dst: NodeStat*::inflight::fetch_sub
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:277,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:279,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:289,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:290,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:291,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:292,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:302,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:303,1
    - Dst: NodeStat*::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:309,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:311,1
    - Dst: NodeStat*::ewma_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:314,1
    - Dst: NodeStat*::stamp_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:315,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 316
    functionName: brpc::policy::P2CEwmaLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - NodeStat*::ewma_us::load
    - std::max
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - BAIDU_SCOPED_LOCK
    - stat::get
    - controller::timeout_ms
    - std::exp
    - NodeStat*::ewma_us::store
    - Read
    - NodeStat*::stamp_us::store
    - NodeStat*::stamp_us::load
    - NodeStat*::inflight::fetch_sub
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:320,1
    - Dst: P2CEwmaLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:321,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 326
    functionName: brpc::policy::P2CEwmaLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - P2CEwmaLoadBalancer*::SetParameters
    - P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    linkageType: ''
    returnType: P2CEwmaLoadBalancer
    signature: "P2CEwmaLoadBalancer * P2CEwmaLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:335,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:343,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: brpc::policy::P2CEwmaLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    - butil::StringToInt64
    - butil::StringToUint
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::SetParameters(const butil::StringPiece& params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 360
    functionName: brpc::policy::P2CEwmaLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:370,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:375,1
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:379,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:381,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:382,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 386
    functionName: brpc::policy::P2CEwmaLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - stat::ewma_us::load
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - Read
    - stat::inflight::load
    linkageType: ''
    returnType: void
    signature: "void P2CEwmaLoadBalancer::Describe(\n    std::ostream& os, const DescribeOptions&
      options)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:53,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:57,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:58,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 1
    argNames:
    - ' tag'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 62
    functionName: brpc::policy::WeightOfTag
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - empty
    - butil::StringToUint
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t WeightOfTag(const std::string& tag)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:67,1
    - Dst: std::max<int64_t>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:68,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::policy::P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - std::max<int64_t>
    - std::min
    - std::max
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::P2CEwmaLoadBalancer()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: server_list::capacity
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:72,1
    - Dst: server_list::reserve
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:73,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:75,1
    - Dst: WeightOfTag
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:78,1
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:79,1
    - Dst: std::make_shared<NodeStat>
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:83,1
    - Dst: server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:88,1
    - Dst: server_list::push_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:89,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' id'
    argTypes:
    - Servers
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 91
    functionName: brpc::policy::P2CEwmaLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_map::seek
    - server_list::reserve
    - WeightOfTag
    - std::make_shared<NodeStat>
    - server_list::push_back
    - server_list::capacity
    - server_list::size
    linkageType: ''
    returnType: bool
    signature: "bool P2CEwmaLoadBalancer::Add(Servers& bg, const Servers& fg,\n                              const
      ServerId& id)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:94,1
    - Dst: server_list::back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:99,1
    - Dst: server_list::pop_back
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:101,1
    - Dst: server_map::erase
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 9
    argCount: 2
    argNames:
    - ' bg'
    - ' id'
    argTypes:
    - Servers
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 104
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 104
    functionName: brpc::policy::P2CEwmaLoadBalancer::Remove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - server_list::pop_back
    - server_map::seek
    - server_list::back
    - server_map::erase
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::Remove(Servers& bg, const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:109,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:110,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 3
    argNames:
    - ' bg'
    - ' fg'
    - ' servers'
    argTypes:
    - Servers
    - Servers
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 113
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - size
    - brpc::policy::P2CEwmaLoadBalancer::Add
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchAdd(\n    Servers& bg, const Servers&
      fg, const std::vector<ServerId>& servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:118,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Remove
      Src: /src/brpc/src/brpc/policy/p2c_ewma_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: 1
    functionLinenumber: 115
    functionLinenumberEnd: 122
    functionName: brpc::policy::P2CEwmaLoadBalancer::BatchRemove
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::P2CEwmaLoadBalancer::Remove
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::BatchRemove(\n    Servers& bg, const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:125,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 126
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::AddServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:129,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' id'
    argTypes:
    - ServerId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 130
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::RemoveServer(const ServerId& id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: ModifyWithForeground
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:134,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 139
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 139
    functionName: brpc::policy::P2CEwmaLoadBalancer::AddServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - ModifyWithForeground
    - size
    - LOG_IF
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::AddServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:143,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' servers'
    argTypes:
    - std::vector<ServerId>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 141
    functionDepth: 0
    functionLinenumber: 141
    functionLinenumberEnd: 144
    functionName: brpc::policy::P2CEwmaLoadBalancer::RemoveServersInBatch
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - Modify
    linkageType: ''
    returnType: size_t
    signature: "size_t P2CEwmaLoadBalancer::RemoveServersInBatch(\n    const std::vector<ServerId>&
      servers)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:149,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:151,1
    - Dst: stat::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:157,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:161,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:163,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:166,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ' info'
    - now_us
    argTypes:
    - ServerInfo
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 146
    functionDepth: 0
    functionLinenumber: 146
    functionLinenumberEnd: 168
    functionName: brpc::policy::P2CEwmaLoadBalancer::Score
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 6
    functionsReached:
    - stat::stamp_us::load
    - std::exp
    - std::max
    - stat::ewma_us::load
    - stat::inflight::load
    linkageType: ''
    returnType: double
    signature: "double P2CEwmaLoadBalancer::Score(\n    const ServerInfo& info, int64_t
      now_us) const"
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:172,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:175,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:182,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:191,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:195,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:198,1
    - Dst: SocketUniquePtr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:202,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:206,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:210,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:212,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:222,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:234,1
    - Dst: consider
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:240,1
    - Dst: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:249,1
    - Dst: ServerInfo*::stat::inflight::fetch_add
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:259,1
    - Dst: SelectOut*::ptr::swap
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:262,1
    CyclomaticComplexity: 23
    EdgeCount: 23
    ICount: 60
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 264
      start: 170
    functionDepth: 1
    functionLinenumber: 170
    functionLinenumberEnd: 264
    functionName: brpc::policy::P2CEwmaLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::swap
    - ServerInfo*::stat::inflight::fetch_add
    - butil::gettimeofday_us
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - butil::fast_rand_less_than
    - IsServerAvailable
    - std::min
    - consider
    - Read
    - SelectOut*::ptr::swap
    linkageType: ''
    returnType: int
    signature: int P2CEwmaLoadBalancer::SelectServer(const SelectIn& in, SelectOut*
      out)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:268,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:271,1
    - Dst: stat::get
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:276,1
    - Dst: NodeStat*::inflight::fetch_sub
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:277,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:279,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:289,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:290,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:291,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:292,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:302,1
    - Dst: NodeStat*::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:303,1
    - Dst: NodeStat*::stamp_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:309,1
    - Dst: std::exp
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:311,1
    - Dst: NodeStat*::ewma_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:314,1
    - Dst: NodeStat*::stamp_us::store
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:315,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 316
      start: 266
    functionDepth: 1
    functionLinenumber: 266
    functionLinenumberEnd: 316
    functionName: brpc::policy::P2CEwmaLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - NodeStat*::ewma_us::load
    - std::max
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - BAIDU_SCOPED_LOCK
    - stat::get
    - controller::timeout_ms
    - std::exp
    - NodeStat*::ewma_us::store
    - Read
    - NodeStat*::stamp_us::store
    - NodeStat*::stamp_us::load
    - NodeStat*::inflight::fetch_sub
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Feedback(const CallInfo& info)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:320,1
    - Dst: P2CEwmaLoadBalancer*::SetParameters
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:321,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 326
      start: 318
    functionDepth: 0
    functionLinenumber: 318
    functionLinenumberEnd: 326
    functionName: brpc::policy::P2CEwmaLoadBalancer::New
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - P2CEwmaLoadBalancer*::SetParameters
    - P2CEwmaLoadBalancer::P2CEwmaLoadBalancer
    linkageType: ''
    returnType: P2CEwmaLoadBalancer
    signature: "P2CEwmaLoadBalancer * P2CEwmaLoadBalancer::New(\n    const butil::StringPiece&
      params) const"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:329,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:332,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:335,1
    - Dst: butil::StringToUint
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:337,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:339,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:343,1
    - Dst: butil::StringToInt64
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:345,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:346,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:351,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 25
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 356
      start: 328
    functionDepth: 1
    functionLinenumber: 328
    functionLinenumberEnd: 356
    functionName: brpc::policy::P2CEwmaLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    - butil::StringToInt64
    - butil::StringToUint
    linkageType: ''
    returnType: bool
    signature: bool P2CEwmaLoadBalancer::SetParameters(const butil::StringPiece& params)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 360
      start: 358
    functionDepth: 0
    functionLinenumber: 358
    functionLinenumberEnd: 360
    functionName: brpc::policy::P2CEwmaLoadBalancer::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void P2CEwmaLoadBalancer::Destroy()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:370,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:374,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:375,1
    - Dst: stat::ewma_us::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:379,1
    - Dst: stat::inflight::load
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:381,1
    - Dst: brpc::policy::P2CEwmaLoadBalancer::Score
      Src: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp:382,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 386
      start: 362
    functionDepth: 1
    functionLinenumber: 362
    functionLinenumberEnd: 386
    functionName: brpc::policy::P2CEwmaLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/p2c_ewma_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::gettimeofday_us
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - stat::ewma_us::load
    - brpc::policy::P2CEwmaLoadBalancer::Score
    - Read
    - stat::inflight::load
    linkageType: ''
    returnType: void
    signature: "void P2CEwmaLoadBalancer::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: 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:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 82
    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:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 101
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 112
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 112
    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: 120
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 120
    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: 129
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 129
    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: 135
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 135
    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: 142
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 142
    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:149,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:150,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:152,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: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<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:158,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:164,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:169,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:173,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 176
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::PackHuluHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - SerializeWithCachedSizes
    - butil::IOBuf*::append
    - CHECK
    - 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:181,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:189,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:193,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:208,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:218,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:219,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:220,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - __builtin_expect
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:233,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:237,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:249,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:254,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:259,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:260,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:261,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:271,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:272,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:276,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:277,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:283,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      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:289,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_source_addr
      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:292,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:297,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:321,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:322,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:323,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:331,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: 333
      start: 225
    functionDepth: 5
    functionLinenumber: 225
    functionLinenumberEnd: 333
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HuluController*::Failed
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - HuluController*::ErrorText
    - CHECK_EQ
    - HuluController*::response_compress_type
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - HuluController*::response_attachment
    - auto::set_response_size
    - butil::IOBuf::movable
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_message_size
    - HuluController*::response_user_data
    - HuluController*::IsCloseConnection
    - HuluRpcResponseMeta::set_correlation_id
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::ErrorCode
    - HuluController*::response_source_addr
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - brpc::policy::CompressType2Hulu
    - google::protobuf::Message*::InitializationErrorString
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - Socket*::description
    - bthread_id_create
    - auto::set_sent_us
    - butil::IOBuf::length
    - HuluRpcResponseMeta::set_error_code
    - HuluController*::SetFailed
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - auto::set_start_send_us
    - butil::IOBuf::IOBuf
    - HuluRpcResponseMeta::set_compress_type
    - 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:345,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:347,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:348,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:354,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:355,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:376,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:377,1
    - Dst: LOG
      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:381,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:396,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:398,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:413,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:427,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:433,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:434,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:439,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:444,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:456,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:467,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:473,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:480,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:487,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:494,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:497,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:499,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:507,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,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:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:519,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,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: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:535,1
    - Dst: google::protobuf::Service*::CallMethod
      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: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:537,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:540,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:541,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:550,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 551
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::request_attachment
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - static_cast<size_t>
    - HuluRpcRequestMeta::has_trace_id
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - std::unique_ptr::set_request_source_addr
    - SampledRequest*::meta::set_user_data
    - bthread_assign_data
    - HuluRpcRequestMeta::parent_span_id
    - butil::cpuwide_time_us
    - HuluRpcRequestMeta::user_data
    - SampledRequest*::meta::set_attachment_size
    - HuluRpcRequestMeta::log_id
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - HuluRpcRequestMeta::span_id
    - ParseFromCompressedData
    - AskToBeSampled
    - google::protobuf::Service*::GetResponsePrototype
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - HuluRpcRequestMeta::has_user_data
    - Server*::options
    - std::unique_ptr::unique_ptr
    - std::shared_ptr::set_start_callback_us
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::Service*::GetRequestPrototype
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - std::unique_ptr::reset
    - std::shared_ptr::set_log_id
    - HuluRpcRequestMeta::correlation_id
    - DestroyingPtr::payload::cutn
    - brpc::policy::EndRunningCallMethodInPool
    - BadMethodRequest::set_service_name
    - Server*::AcceptRequest
    - HuluRpcRequestMeta::user_defined_source_addr
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::user_message_size
    - DestroyingPtr::payload::length
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - HuluRpcRequestMeta::service_name
    - DestroyingPtr::payload::size
    - Socket*::local_side
    - DestroyingPtr::received_us
    - HuluRpcRequestMeta::trace_id
    - std::unique_ptr::set_log_id
    - Server*::thread_local_options
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::CallMethod
    - HuluRpcRequestMeta::method_index
    - std::string::c_str
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::has_user_message_size
    - HuluRpcRequestMeta::has_log_id
    - pbrpcframework::get_prototype_by_method_descriptor
    - HuluRpcRequestMeta::compress_type
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - butil::IOBuf::IOBuf
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - SampledRequest*::submit
    - Server::MethodProperty*::service::GetDescriptor
    - brpc::Span::CreateServerSpan
    - std::unique_ptr::release
    - LOG
    - CompressTypeToCStr
    - std::unique_ptr::SetFailed
    - std::shared_ptr::set_request_size
    - EndRunningUserCodeInPlace
    - SampledRequest*::meta::set_method_index
    - Server::MethodProperty*::service::CallMethod
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Socket*::SetFailed
    - DestroyingPtr::base_real_us
    - butil::IOBuf::clear
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SampledRequest*::meta::set_service_name
    - brpc::policy::SendHuluResponse
    - google::protobuf::MethodDescriptor*::full_name
    - HuluController::HuluController
    - Socket*::user
    - std::unique_ptr::set_request_user_data
    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:555,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:561,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:564,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:570,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:571,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:580,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:583,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:589,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:590,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 553
    functionDepth: 2
    functionLinenumber: 553
    functionLinenumberEnd: 594
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Socket*::mutable_auth_context
    - LOG
    - ParsePbFromIOBuf
    - HuluRpcResponseMeta::mutable_error_text
    - MostCommonMessage*::socket
    - Server*::options
    - Authenticator*::VerifyCredential
    - std::string::empty
    - MostCommonMessage*::arg
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_correlation_id
    - static_cast<const Server*>
    - PLOG_IF
    - static_cast<const MostCommonMessage*>
    - HuluRpcRequestMeta::credential_data
    - HuluRpcResponseMeta::set_error_code
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - 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:597,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:607,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:609,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:610,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::ErrorCode
      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:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:640,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:644,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:650,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:654,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:661,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:662,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 596
    functionDepth: 2
    functionLinenumber: 596
    functionLinenumberEnd: 663
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - DestroyingPtr::payload::length
    - Controller*::response_attachment
    - LOG_IF
    - HuluRpcResponseMeta::has_user_data
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::has_user_message_size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - brpc::policy::Hulu2CompressType
    - Controller*::set_response_compress_type
    - Controller*::ErrorCode
    - DestroyingPtr::reset
    - dynamic_cast<HuluController*>
    - auto::set_base_real_us
    - HuluController*::set_response_user_data
    - static_cast<uint64_t>
    - HuluRpcResponseMeta::error_text
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::user_data
    - HuluController*::set_response_source_addr
    - HuluRpcResponseMeta::user_defined_source_addr
    - auto::set_received_us
    - DestroyingPtr::payload::cutn
    - berror
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::compress_type
    - butil::IOBuf::IOBuf
    - bthread_id_lock
    - HuluRpcResponseMeta::correlation_id
    - Controller*::SetFailed
    - HuluRpcResponseMeta::error_code
    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:673,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:675,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::request_compress_type
      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:682,1
    - Dst: HuluRpcRequestMeta::set_service_name
      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: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_method_index
      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: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:686,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: dynamic_cast<HuluController*>
      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:695,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluController*::request_source_addr
      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:699,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:704,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:705,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:711,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:713,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:725,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,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: 729
      start: 665
    functionDepth: 2
    functionLinenumber: 665
    functionLinenumberEnd: 729
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - method_index
    - HuluRpcRequestMeta::set_service_name
    - ControllerPrivateAccessor
    - auto::parent_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_trace_id
    - service_name
    - HuluController*::request_user_data
    - HuluRpcRequestMeta::set_method_index
    - google::protobuf::MethodDescriptor*::index
    - Controller*::request_compress_type
    - dynamic_cast<HuluController*>
    - HuluRpcRequestMeta::mutable_credential_data
    - Authenticator*::GenerateCredential
    - google::protobuf::MethodDescriptor*::service
    - HuluRpcRequestMeta::set_correlation_id
    - size
    - HuluRpcRequestMeta::set_span_id
    - HuluController*::request_source_addr
    - Controller*::request_attachment
    - HuluRpcRequestMeta::set_log_id
    - auto::span_id
    - HuluRpcRequestMeta::set_user_message_size
    - Controller*::log_id
    - brpc::policy::CompressType2Hulu
    - Controller*::SetFailed
    - compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_data
    - auto::trace_id
    - butil::IOBuf*::append
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::has_log_id
    - HuluRpcRequestMeta::set_parent_span_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_compress_type
    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:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 82
    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:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 101
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 112
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 112
    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: 120
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 120
    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: 129
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 129
    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: 135
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 135
    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: 142
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 142
    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:149,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:150,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:152,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: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<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:158,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:164,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:169,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:173,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 176
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::PackHuluHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - SerializeWithCachedSizes
    - butil::IOBuf*::append
    - CHECK
    - 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:181,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:189,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:193,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:208,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:218,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:219,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:220,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - __builtin_expect
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:233,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:237,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:249,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:254,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:259,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:260,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:261,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:271,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:272,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:276,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:277,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:283,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      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:289,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_source_addr
      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:292,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:297,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:321,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:322,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:323,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:331,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: 333
      start: 225
    functionDepth: 5
    functionLinenumber: 225
    functionLinenumberEnd: 333
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - HuluController*::Failed
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - HuluController*::ErrorText
    - CHECK_EQ
    - HuluController*::response_compress_type
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - HuluController*::response_attachment
    - auto::set_response_size
    - butil::IOBuf::movable
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_message_size
    - HuluController*::response_user_data
    - HuluController*::IsCloseConnection
    - HuluRpcResponseMeta::set_correlation_id
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::ErrorCode
    - HuluController*::response_source_addr
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - brpc::policy::CompressType2Hulu
    - google::protobuf::Message*::InitializationErrorString
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - Socket*::description
    - bthread_id_create
    - auto::set_sent_us
    - butil::IOBuf::length
    - HuluRpcResponseMeta::set_error_code
    - HuluController*::SetFailed
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - auto::set_start_send_us
    - butil::IOBuf::IOBuf
    - HuluRpcResponseMeta::set_compress_type
    - 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:345,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:347,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:348,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:354,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:355,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:376,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:377,1
    - Dst: LOG
      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:381,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:396,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:398,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:413,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:427,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:433,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:434,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:439,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:444,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:456,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:467,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:473,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:480,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:487,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:494,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:497,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:499,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:507,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,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:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:519,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,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: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:535,1
    - Dst: google::protobuf::Service*::CallMethod
      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: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:537,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:540,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:541,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:550,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 551
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::request_attachment
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - static_cast<size_t>
    - HuluRpcRequestMeta::has_trace_id
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - std::unique_ptr::set_request_source_addr
    - SampledRequest*::meta::set_user_data
    - bthread_assign_data
    - HuluRpcRequestMeta::parent_span_id
    - butil::cpuwide_time_us
    - HuluRpcRequestMeta::user_data
    - SampledRequest*::meta::set_attachment_size
    - HuluRpcRequestMeta::log_id
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - HuluRpcRequestMeta::span_id
    - ParseFromCompressedData
    - AskToBeSampled
    - google::protobuf::Service*::GetResponsePrototype
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - HuluRpcRequestMeta::has_user_data
    - Server*::options
    - std::unique_ptr::unique_ptr
    - std::shared_ptr::set_start_callback_us
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::Service*::GetRequestPrototype
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - std::unique_ptr::reset
    - std::shared_ptr::set_log_id
    - HuluRpcRequestMeta::correlation_id
    - DestroyingPtr::payload::cutn
    - brpc::policy::EndRunningCallMethodInPool
    - BadMethodRequest::set_service_name
    - Server*::AcceptRequest
    - HuluRpcRequestMeta::user_defined_source_addr
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::user_message_size
    - DestroyingPtr::payload::length
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - HuluRpcRequestMeta::service_name
    - DestroyingPtr::payload::size
    - Socket*::local_side
    - DestroyingPtr::received_us
    - HuluRpcRequestMeta::trace_id
    - std::unique_ptr::set_log_id
    - Server*::thread_local_options
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::CallMethod
    - HuluRpcRequestMeta::method_index
    - std::string::c_str
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::has_user_message_size
    - HuluRpcRequestMeta::has_log_id
    - pbrpcframework::get_prototype_by_method_descriptor
    - HuluRpcRequestMeta::compress_type
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - butil::IOBuf::IOBuf
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - SampledRequest*::submit
    - Server::MethodProperty*::service::GetDescriptor
    - brpc::Span::CreateServerSpan
    - std::unique_ptr::release
    - LOG
    - CompressTypeToCStr
    - std::unique_ptr::SetFailed
    - std::shared_ptr::set_request_size
    - EndRunningUserCodeInPlace
    - SampledRequest*::meta::set_method_index
    - Server::MethodProperty*::service::CallMethod
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Socket*::SetFailed
    - DestroyingPtr::base_real_us
    - butil::IOBuf::clear
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SampledRequest*::meta::set_service_name
    - brpc::policy::SendHuluResponse
    - google::protobuf::MethodDescriptor*::full_name
    - HuluController::HuluController
    - Socket*::user
    - std::unique_ptr::set_request_user_data
    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:555,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:561,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:564,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:570,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:571,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:580,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:583,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:589,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:590,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 553
    functionDepth: 2
    functionLinenumber: 553
    functionLinenumberEnd: 594
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Socket*::mutable_auth_context
    - LOG
    - ParsePbFromIOBuf
    - HuluRpcResponseMeta::mutable_error_text
    - MostCommonMessage*::socket
    - Server*::options
    - Authenticator*::VerifyCredential
    - std::string::empty
    - MostCommonMessage*::arg
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_correlation_id
    - static_cast<const Server*>
    - PLOG_IF
    - static_cast<const MostCommonMessage*>
    - HuluRpcRequestMeta::credential_data
    - HuluRpcResponseMeta::set_error_code
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - 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:597,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:607,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:609,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:610,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::ErrorCode
      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:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:640,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:644,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:650,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:654,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:661,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:662,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 596
    functionDepth: 2
    functionLinenumber: 596
    functionLinenumberEnd: 663
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - DestroyingPtr::payload::length
    - Controller*::response_attachment
    - LOG_IF
    - HuluRpcResponseMeta::has_user_data
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::has_user_message_size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - brpc::policy::Hulu2CompressType
    - Controller*::set_response_compress_type
    - Controller*::ErrorCode
    - DestroyingPtr::reset
    - dynamic_cast<HuluController*>
    - auto::set_base_real_us
    - HuluController*::set_response_user_data
    - static_cast<uint64_t>
    - HuluRpcResponseMeta::error_text
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::user_data
    - HuluController*::set_response_source_addr
    - HuluRpcResponseMeta::user_defined_source_addr
    - auto::set_received_us
    - DestroyingPtr::payload::cutn
    - berror
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::compress_type
    - butil::IOBuf::IOBuf
    - bthread_id_lock
    - HuluRpcResponseMeta::correlation_id
    - Controller*::SetFailed
    - HuluRpcResponseMeta::error_code
    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:673,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:675,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::request_compress_type
      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:682,1
    - Dst: HuluRpcRequestMeta::set_service_name
      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: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_method_index
      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: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:686,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: dynamic_cast<HuluController*>
      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:695,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluController*::request_source_addr
      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:699,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:704,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:705,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:711,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:713,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:725,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,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: 729
      start: 665
    functionDepth: 2
    functionLinenumber: 665
    functionLinenumberEnd: 729
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - method_index
    - HuluRpcRequestMeta::set_service_name
    - ControllerPrivateAccessor
    - auto::parent_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_trace_id
    - service_name
    - HuluController*::request_user_data
    - HuluRpcRequestMeta::set_method_index
    - google::protobuf::MethodDescriptor*::index
    - Controller*::request_compress_type
    - dynamic_cast<HuluController*>
    - HuluRpcRequestMeta::mutable_credential_data
    - Authenticator*::GenerateCredential
    - google::protobuf::MethodDescriptor*::service
    - HuluRpcRequestMeta::set_correlation_id
    - size
    - HuluRpcRequestMeta::set_span_id
    - HuluController*::request_source_addr
    - Controller*::request_attachment
    - HuluRpcRequestMeta::set_log_id
    - auto::span_id
    - HuluRpcRequestMeta::set_user_message_size
    - Controller*::log_id
    - brpc::policy::CompressType2Hulu
    - Controller*::SetFailed
    - compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_data
    - auto::trace_id
    - butil::IOBuf*::append
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::has_log_id
    - HuluRpcRequestMeta::set_parent_span_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_compress_type
    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:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 82
    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:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 101
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 112
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 112
    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: 120
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 120
    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: 129
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 129
    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: 135
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 135
    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: 142
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 142
    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:149,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:150,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:152,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: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<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:158,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:164,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:169,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:173,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 176
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::PackHuluHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - SerializeWithCachedSizes
    - butil::IOBuf*::append
    - CHECK
    - 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:181,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:189,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:193,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:208,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:218,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:219,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:220,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - __builtin_expect
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:233,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:237,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:249,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:254,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:259,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:260,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:261,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:271,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:272,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:276,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:277,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:283,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      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:289,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_source_addr
      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:292,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:297,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:321,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:322,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:323,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:331,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: 333
      start: 225
    functionDepth: 5
    functionLinenumber: 225
    functionLinenumberEnd: 333
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - HuluController*::Failed
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - HuluController*::ErrorText
    - CHECK_EQ
    - HuluController*::response_compress_type
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - HuluController*::response_attachment
    - auto::set_response_size
    - butil::IOBuf::movable
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_message_size
    - HuluController*::response_user_data
    - HuluController*::IsCloseConnection
    - HuluRpcResponseMeta::set_correlation_id
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::ErrorCode
    - HuluController*::response_source_addr
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - brpc::policy::CompressType2Hulu
    - google::protobuf::Message*::InitializationErrorString
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - Socket*::description
    - bthread_id_create
    - auto::set_sent_us
    - butil::IOBuf::length
    - HuluRpcResponseMeta::set_error_code
    - HuluController*::SetFailed
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - auto::set_start_send_us
    - butil::IOBuf::IOBuf
    - HuluRpcResponseMeta::set_compress_type
    - 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:345,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:347,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:348,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:354,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:355,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:376,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:377,1
    - Dst: LOG
      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:381,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:396,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:398,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:413,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:427,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:433,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:434,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:439,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:444,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:456,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:467,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:473,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:480,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:487,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:494,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:497,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:499,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:507,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,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:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:519,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,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: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:535,1
    - Dst: google::protobuf::Service*::CallMethod
      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: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:537,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:540,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:541,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:550,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 551
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::request_attachment
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - static_cast<size_t>
    - HuluRpcRequestMeta::has_trace_id
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - std::unique_ptr::set_request_source_addr
    - SampledRequest*::meta::set_user_data
    - bthread_assign_data
    - HuluRpcRequestMeta::parent_span_id
    - butil::cpuwide_time_us
    - HuluRpcRequestMeta::user_data
    - SampledRequest*::meta::set_attachment_size
    - HuluRpcRequestMeta::log_id
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - HuluRpcRequestMeta::span_id
    - ParseFromCompressedData
    - AskToBeSampled
    - google::protobuf::Service*::GetResponsePrototype
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - HuluRpcRequestMeta::has_user_data
    - Server*::options
    - std::unique_ptr::unique_ptr
    - std::shared_ptr::set_start_callback_us
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::Service*::GetRequestPrototype
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - std::unique_ptr::reset
    - std::shared_ptr::set_log_id
    - HuluRpcRequestMeta::correlation_id
    - DestroyingPtr::payload::cutn
    - brpc::policy::EndRunningCallMethodInPool
    - BadMethodRequest::set_service_name
    - Server*::AcceptRequest
    - HuluRpcRequestMeta::user_defined_source_addr
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::user_message_size
    - DestroyingPtr::payload::length
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - HuluRpcRequestMeta::service_name
    - DestroyingPtr::payload::size
    - Socket*::local_side
    - DestroyingPtr::received_us
    - HuluRpcRequestMeta::trace_id
    - std::unique_ptr::set_log_id
    - Server*::thread_local_options
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::CallMethod
    - HuluRpcRequestMeta::method_index
    - std::string::c_str
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::has_user_message_size
    - HuluRpcRequestMeta::has_log_id
    - pbrpcframework::get_prototype_by_method_descriptor
    - HuluRpcRequestMeta::compress_type
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - butil::IOBuf::IOBuf
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - SampledRequest*::submit
    - Server::MethodProperty*::service::GetDescriptor
    - brpc::Span::CreateServerSpan
    - std::unique_ptr::release
    - LOG
    - CompressTypeToCStr
    - std::unique_ptr::SetFailed
    - std::shared_ptr::set_request_size
    - EndRunningUserCodeInPlace
    - SampledRequest*::meta::set_method_index
    - Server::MethodProperty*::service::CallMethod
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Socket*::SetFailed
    - DestroyingPtr::base_real_us
    - butil::IOBuf::clear
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SampledRequest*::meta::set_service_name
    - brpc::policy::SendHuluResponse
    - google::protobuf::MethodDescriptor*::full_name
    - HuluController::HuluController
    - Socket*::user
    - std::unique_ptr::set_request_user_data
    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:555,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:561,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:564,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:570,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:571,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:580,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:583,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:589,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:590,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 553
    functionDepth: 2
    functionLinenumber: 553
    functionLinenumberEnd: 594
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Socket*::mutable_auth_context
    - LOG
    - ParsePbFromIOBuf
    - HuluRpcResponseMeta::mutable_error_text
    - MostCommonMessage*::socket
    - Server*::options
    - Authenticator*::VerifyCredential
    - std::string::empty
    - MostCommonMessage*::arg
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_correlation_id
    - static_cast<const Server*>
    - PLOG_IF
    - static_cast<const MostCommonMessage*>
    - HuluRpcRequestMeta::credential_data
    - HuluRpcResponseMeta::set_error_code
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - 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:597,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:607,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:609,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:610,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::ErrorCode
      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:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:640,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:644,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:650,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:654,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:661,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:662,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 596
    functionDepth: 2
    functionLinenumber: 596
    functionLinenumberEnd: 663
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - DestroyingPtr::payload::length
    - Controller*::response_attachment
    - LOG_IF
    - HuluRpcResponseMeta::has_user_data
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::has_user_message_size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - brpc::policy::Hulu2CompressType
    - Controller*::set_response_compress_type
    - Controller*::ErrorCode
    - DestroyingPtr::reset
    - dynamic_cast<HuluController*>
    - auto::set_base_real_us
    - HuluController*::set_response_user_data
    - static_cast<uint64_t>
    - HuluRpcResponseMeta::error_text
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::user_data
    - HuluController*::set_response_source_addr
    - HuluRpcResponseMeta::user_defined_source_addr
    - auto::set_received_us
    - DestroyingPtr::payload::cutn
    - berror
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::compress_type
    - butil::IOBuf::IOBuf
    - bthread_id_lock
    - HuluRpcResponseMeta::correlation_id
    - Controller*::SetFailed
    - HuluRpcResponseMeta::error_code
    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:673,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:675,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::request_compress_type
      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:682,1
    - Dst: HuluRpcRequestMeta::set_service_name
      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: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_method_index
      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: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:686,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: dynamic_cast<HuluController*>
      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:695,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluController*::request_source_addr
      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:699,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:704,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:705,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:711,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:713,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:725,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,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: 729
      start: 665
    functionDepth: 2
    functionLinenumber: 665
    functionLinenumberEnd: 729
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - method_index
    - HuluRpcRequestMeta::set_service_name
    - ControllerPrivateAccessor
    - auto::parent_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_trace_id
    - service_name
    - HuluController*::request_user_data
    - HuluRpcRequestMeta::set_method_index
    - google::protobuf::MethodDescriptor*::index
    - Controller*::request_compress_type
    - dynamic_cast<HuluController*>
    - HuluRpcRequestMeta::mutable_credential_data
    - Authenticator*::GenerateCredential
    - google::protobuf::MethodDescriptor*::service
    - HuluRpcRequestMeta::set_correlation_id
    - size
    - HuluRpcRequestMeta::set_span_id
    - HuluController*::request_source_addr
    - Controller*::request_attachment
    - HuluRpcRequestMeta::set_log_id
    - auto::span_id
    - HuluRpcRequestMeta::set_user_message_size
    - Controller*::log_id
    - brpc::policy::CompressType2Hulu
    - Controller*::SetFailed
    - compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_data
    - auto::trace_id
    - butil::IOBuf*::append
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::has_log_id
    - HuluRpcRequestMeta::set_parent_span_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_compress_type
    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:79,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 14
    argCount: 1
    argNames:
    - type
    argTypes:
    - HuluCompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 82
    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:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:98,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 17
    argCount: 1
    argNames:
    - type
    argTypes:
    - CompressType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 101
    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: 106
      start: 106
    functionDepth: 0
    functionLinenumber: 106
    functionLinenumberEnd: 106
    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: 112
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 112
    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: 120
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 120
    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: 129
      start: 128
    functionDepth: 0
    functionLinenumber: 128
    functionLinenumberEnd: 129
    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: 135
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 135
    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: 142
      start: 137
    functionDepth: 0
    functionLinenumber: 137
    functionLinenumberEnd: 142
    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:149,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:150,1
    - Dst: HuluRawPacker::pack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:152,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: 153
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 153
    functionName: brpc::policy::PackHuluHeader
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - reinterpret_cast<const uint32_t*>
    - HuluRawPacker::pack32
    - reinterpret_cast<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:158,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:161,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:164,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:165,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:166,1
    - Dst: brpc::policy::PackHuluHeader
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:169,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:170,1
    - Dst: SerializeWithCachedSizes
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:173,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    - Dst: ::google::protobuf::io::CodedOutputStream::HadError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:174,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 3
    argNames:
    - out
    - ' meta'
    - payload_size
    argTypes:
    - butil::IOBuf*
    - Meta
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 156
    functionDepth: 1
    functionLinenumber: 156
    functionLinenumberEnd: 176
    functionName: brpc::policy::SerializeHuluHeaderAndMeta
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - brpc::policy::PackHuluHeader
    - ::google::protobuf::io::CodedOutputStream::HadError
    - SerializeWithCachedSizes
    - butil::IOBuf*::append
    - CHECK
    - 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:181,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:185,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:188,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:189,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:193,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:197,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:201,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:202,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:203,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:204,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:205,1
    - Dst: HuluRawUnpacker::unpack32
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:208,1
    - Dst: __builtin_expect
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:210,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:213,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:214,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:216,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:217,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:218,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:219,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:220,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 178
    functionDepth: 1
    functionLinenumber: 178
    functionLinenumberEnd: 221
    functionName: brpc::policy::ParseHuluMessage
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - butil::IOBuf*::cutn
    - MakeParseError
    - LOG
    - butil::IOBuf*::copy_to
    - Socket*::remote_side
    - __builtin_expect
    - HuluRawUnpacker::unpack32
    - butil::IOBuf*::length
    - MakeMessage
    - butil::IOBuf*::pop_front
    - memcmp
    - TestRpcPBMessageFactory::Get
    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:233,1
    - Dst: auto::set_start_send_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:235,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:237,1
    - Dst: HuluController*::IsCloseConnection
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:243,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:244,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:249,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:253,1
    - Dst: HuluController*::Failed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:254,1
    - Dst: google::protobuf::Message*::IsInitialized
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:255,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:256,1
    - Dst: google::protobuf::Message*::InitializationErrorString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:258,1
    - Dst: SerializeAsCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:259,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:260,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:261,1
    - Dst: butil::IOBuf::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:271,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:272,1
    - Dst: HuluController*::ErrorCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:276,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:277,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:278,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluController*::ErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:281,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:283,1
    - Dst: HuluRpcResponseMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:284,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluController*::response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:285,1
    - Dst: HuluRpcResponseMeta::set_user_message_size
      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:289,1
    - Dst: HuluRpcResponseMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:290,1
    - Dst: HuluController*::response_source_addr
      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:292,1
    - Dst: HuluRpcResponseMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: HuluController*::response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:293,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:296,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:297,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::movable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:299,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: HuluController*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:301,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:305,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: bthread_id_create
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:315,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:319,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:321,1
    - Dst: HuluController*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:322,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:323,1
    - Dst: bthread_id_join
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:328,1
    - Dst: auto::set_sent_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:331,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: 333
      start: 225
    functionDepth: 5
    functionLinenumber: 225
    functionLinenumberEnd: 333
    functionName: brpc::policy::SendHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - HuluController*::Failed
    - ControllerPrivateAccessor::span
    - CompressTypeToCStr
    - HuluController*::ErrorText
    - CHECK_EQ
    - HuluController*::response_compress_type
    - butil::IOBuf::size
    - ControllerPrivateAccessor::get_sending_socket
    - HuluController*::response_attachment
    - auto::set_response_size
    - butil::IOBuf::movable
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_user_message_size
    - HuluController*::response_user_data
    - HuluController*::IsCloseConnection
    - HuluRpcResponseMeta::set_correlation_id
    - Socket*::SetFailed
    - google::protobuf::Message*::IsInitialized
    - HuluRpcResponseMeta::set_user_data
    - HuluController*::ErrorCode
    - HuluController*::response_source_addr
    - PLOG_IF
    - butil::cpuwide_time_us
    - butil::IOBuf::append
    - bthread_id_join
    - brpc::policy::CompressType2Hulu
    - google::protobuf::Message*::InitializationErrorString
    - HuluRpcResponseMeta::set_user_defined_source_addr
    - Socket*::description
    - bthread_id_create
    - auto::set_sent_us
    - butil::IOBuf::length
    - HuluRpcResponseMeta::set_error_code
    - HuluController*::SetFailed
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - auto::set_start_send_us
    - butil::IOBuf::IOBuf
    - HuluRpcResponseMeta::set_compress_type
    - 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:345,1
    - Dst: DestroyingPtr::ReleaseSocket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:347,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:348,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: InputMessageBase*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:349,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:354,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:355,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: HuluRpcRequestMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:359,1
    - Dst: AskToBeSampled
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:360,1
    - Dst: SampledRequest*::meta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:362,1
    - Dst: SampledRequest*::meta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:363,1
    - Dst: SampledRequest*::meta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:364,1
    - Dst: SampledRequest*::meta::set_protocol_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:365,1
    - Dst: SampledRequest*::meta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:366,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:367,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:368,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:369,1
    - Dst: SampledRequest*::meta::set_attachment_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:370,1
    - Dst: SampledRequest*::submit
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:373,1
    - Dst: HuluController::HuluController
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:376,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:377,1
    - Dst: LOG
      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:381,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:382,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:385,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:386,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:387,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: ServerPrivateAccessor::acceptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:388,1
    - Dst: HuluRpcRequestMeta::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:389,1
    - Dst: std::unique_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:390,1
    - Dst: std::unique_ptr::set_request_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:392,1
    - Dst: ControllerPrivateAccessor::set_server
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:393,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:395,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:396,1
    - Dst: Socket*::local_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:397,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:398,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:400,1
    - Dst: HuluRpcRequestMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:403,1
    - Dst: std::unique_ptr::set_request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:404,1
    - Dst: HuluRpcRequestMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:407,1
    - Dst: std::unique_ptr::set_request_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: HuluRpcRequestMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:408,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:413,1
    - Dst: bthread_assign_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: Server*::thread_local_options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:414,1
    - Dst: IsTraceable
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: HuluRpcRequestMeta::has_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:418,1
    - Dst: brpc::Span::CreateServerSpan
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:419,1
    - Dst: HuluRpcRequestMeta::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: HuluRpcRequestMeta::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:420,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:421,1
    - Dst: ControllerPrivateAccessor::set_span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:422,1
    - Dst: std::shared_ptr::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: HuluRpcRequestMeta::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:423,1
    - Dst: std::shared_ptr::set_remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::unique_ptr::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:424,1
    - Dst: std::shared_ptr::set_protocol
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:425,1
    - Dst: std::shared_ptr::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:426,1
    - Dst: std::shared_ptr::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:427,1
    - Dst: std::shared_ptr::set_request_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:428,1
    - Dst: Server*::IsRunning
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:433,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:434,1
    - Dst: ServerPrivateAccessor::AddConcurrency
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:438,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:439,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:440,1
    - Dst: TooManyUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:443,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:444,1
    - Dst: ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:450,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:451,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:453,1
    - Dst: HuluRpcRequestMeta::method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:454,1
    - Dst: Server::MethodProperty*::service::GetDescriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:456,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:457,1
    - Dst: BadMethodRequest::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: HuluRpcRequestMeta::service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:460,1
    - Dst: Server::MethodProperty*::service::CallMethod
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:461,1
    - Dst: Socket*::is_overcrowded
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:464,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:465,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:467,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:468,1
    - Dst: ScopedNonServiceError::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:473,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: google::protobuf::MethodDescriptor*::full_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:476,1
    - Dst: MethodStatus*::OnRequested
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:479,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:480,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_method
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:487,1
    - Dst: Server*::AcceptRequest
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:489,1
    - Dst: std::shared_ptr::ResetServerSpanName
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:494,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:496,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:497,1
    - Dst: HuluRpcRequestMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:499,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: HuluRpcRequestMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:500,1
    - Dst: std::unique_ptr::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:502,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: google::protobuf::Service*::GetRequestPrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:505,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:506,1
    - Dst: std::unique_ptr::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:507,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:509,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,1
    - Dst: google::protobuf::Service*::GetResponsePrototype
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:513,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:515,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:519,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:520,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:521,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:524,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:525,1
    - Dst: std::shared_ptr::set_start_callback_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:528,1
    - Dst: std::shared_ptr::AsParent
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:529,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: BeginRunningUserCode
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:535,1
    - Dst: google::protobuf::Service*::CallMethod
      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: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:537,1
    - Dst: EndRunningUserCodeInPlace
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:538,1
    - Dst: brpc::policy::EndRunningCallMethodInPool
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:540,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:541,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:542,1
    - Dst: brpc::policy::SendHuluResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:548,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:549,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:550,1
    CyclomaticComplexity: 39
    EdgeCount: 39
    ICount: 115
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 551
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 551
    functionName: brpc::policy::ProcessHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::request_attachment
    - SampledRequest*::meta::set_protocol_type
    - std::shared_ptr::set_protocol
    - butil::EnsureString
    - DestroyingPtr::meta::size
    - "::brpc::NewCallback<\n            int64_t, HuluController*, const google::protobuf::Message*,\n
      \           const google::protobuf::Message*, const Server*,\n                  MethodStatus
      *, int64_t>"
    - static_cast<size_t>
    - HuluRpcRequestMeta::has_trace_id
    - ControllerPrivateAccessor::set_method
    - Socket*::id
    - std::unique_ptr::set_request_source_addr
    - SampledRequest*::meta::set_user_data
    - bthread_assign_data
    - HuluRpcRequestMeta::parent_span_id
    - butil::cpuwide_time_us
    - HuluRpcRequestMeta::user_data
    - SampledRequest*::meta::set_attachment_size
    - HuluRpcRequestMeta::log_id
    - Socket*::remote_side
    - std::unique_ptr::remote_side
    - DestroyingPtr::ReleaseSocket
    - std::shared_ptr::ResetServerSpanName
    - std::unique_ptr::get
    - HuluRpcRequestMeta::span_id
    - ParseFromCompressedData
    - AskToBeSampled
    - google::protobuf::Service*::GetResponsePrototype
    - TooManyUserCode
    - ParsePbFromIOBuf
    - BeginRunningUserCode
    - ControllerPrivateAccessor::set_server
    - HuluRpcRequestMeta::has_user_data
    - Server*::options
    - std::unique_ptr::unique_ptr
    - std::shared_ptr::set_start_callback_us
    - std::unique_ptr::set_request_compress_type
    - std::shared_ptr::set_received_us
    - ServerPrivateAccessor::AddConcurrency
    - google::protobuf::Service*::GetRequestPrototype
    - SampledRequest*::meta::set_compress_type
    - Socket*::is_overcrowded
    - static_cast<const Server*>
    - std::unique_ptr::reset
    - std::shared_ptr::set_log_id
    - HuluRpcRequestMeta::correlation_id
    - DestroyingPtr::payload::cutn
    - brpc::policy::EndRunningCallMethodInPool
    - BadMethodRequest::set_service_name
    - Server*::AcceptRequest
    - HuluRpcRequestMeta::user_defined_source_addr
    - Server*::IsRunning
    - ControllerPrivateAccessor::set_span
    - HuluRpcRequestMeta::user_message_size
    - DestroyingPtr::payload::length
    - InputMessageBase*::arg
    - ScopedNonServiceError::release
    - std::shared_ptr::AsParent
    - HuluRpcRequestMeta::service_name
    - DestroyingPtr::payload::size
    - Socket*::local_side
    - DestroyingPtr::received_us
    - HuluRpcRequestMeta::trace_id
    - std::unique_ptr::set_log_id
    - Server*::thread_local_options
    - brpc::policy::Hulu2CompressType
    - google::protobuf::Service*::CallMethod
    - HuluRpcRequestMeta::method_index
    - std::string::c_str
    - SocketUniquePtr::get
    - std::shared_ptr::set_remote_side
    - MethodStatus*::OnRequested
    - HuluRpcRequestMeta::has_user_message_size
    - HuluRpcRequestMeta::has_log_id
    - pbrpcframework::get_prototype_by_method_descriptor
    - HuluRpcRequestMeta::compress_type
    - std::shared_ptr::set_start_parse_us
    - IsTraceable
    - butil::IOBuf::IOBuf
    - HuluRpcRequestMeta::has_user_defined_source_addr
    - SampledRequest*::submit
    - Server::MethodProperty*::service::GetDescriptor
    - brpc::Span::CreateServerSpan
    - std::unique_ptr::release
    - LOG
    - CompressTypeToCStr
    - std::unique_ptr::SetFailed
    - std::shared_ptr::set_request_size
    - EndRunningUserCodeInPlace
    - SampledRequest*::meta::set_method_index
    - Server::MethodProperty*::service::CallMethod
    - ServerPrivateAccessor::FindMethodPropertyByNameAndIndex
    - DestroyingPtr::reset
    - butil::endpoint2str
    - Socket*::SetFailed
    - DestroyingPtr::base_real_us
    - butil::IOBuf::clear
    - ServerPrivateAccessor::acceptor
    - Socket*::auth_context
    - SampledRequest*::meta::set_service_name
    - brpc::policy::SendHuluResponse
    - google::protobuf::MethodDescriptor*::full_name
    - HuluController::HuluController
    - Socket*::user
    - std::unique_ptr::set_request_user_data
    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:555,1
    - Dst: MostCommonMessage*::socket
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:556,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: MostCommonMessage*::arg
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:557,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:560,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:561,1
    - Dst: Server*::options
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:564,1
    - Dst: Authenticator*::VerifyCredential
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: HuluRpcRequestMeta::credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:569,1
    - Dst: Socket*::remote_side
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:570,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:571,1
    - Dst: HuluRpcResponseMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcRequestMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:577,1
    - Dst: HuluRpcResponseMeta::set_error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:578,1
    - Dst: Authenticator*::GetUnauthorizedErrorText
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:579,1
    - Dst: HuluRpcResponseMeta::set_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:580,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:581,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:582,1
    - Dst: HuluRpcResponseMeta::mutable_error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:583,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:585,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:586,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:589,1
    - Dst: PLOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:590,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 594
      start: 553
    functionDepth: 2
    functionLinenumber: 553
    functionLinenumberEnd: 594
    functionName: brpc::policy::VerifyHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - Socket*::mutable_auth_context
    - LOG
    - ParsePbFromIOBuf
    - HuluRpcResponseMeta::mutable_error_text
    - MostCommonMessage*::socket
    - Server*::options
    - Authenticator*::VerifyCredential
    - std::string::empty
    - MostCommonMessage*::arg
    - Authenticator*::GetUnauthorizedErrorText
    - HuluRpcResponseMeta::set_error_text
    - HuluRpcResponseMeta::set_correlation_id
    - static_cast<const Server*>
    - PLOG_IF
    - static_cast<const MostCommonMessage*>
    - HuluRpcRequestMeta::credential_data
    - HuluRpcResponseMeta::set_error_code
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - 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:597,1
    - Dst: ParsePbFromIOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:600,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:601,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: HuluRpcResponseMeta::correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:605,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:607,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:609,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:610,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:615,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:616,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:617,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:618,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:619,1
    - Dst: Controller*::ErrorCode
      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:622,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_code
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:624,1
    - Dst: HuluRpcResponseMeta::error_text
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:625,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:628,1
    - Dst: HuluRpcResponseMeta::has_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:630,1
    - Dst: DestroyingPtr::payload::cutn
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: HuluRpcResponseMeta::user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:631,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:633,1
    - Dst: brpc::policy::Hulu2CompressType
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: HuluRpcResponseMeta::compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:636,1
    - Dst: Controller*::set_response_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:637,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:638,1
    - Dst: ParseFromCompressedData
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:640,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:641,1
    - Dst: CompressTypeToCStr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:644,1
    - Dst: DestroyingPtr::payload::length
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:645,1
    - Dst: dynamic_cast<HuluController*>
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:648,1
    - Dst: HuluRpcResponseMeta::has_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:650,1
    - Dst: HuluController*::set_response_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:651,1
    - Dst: HuluRpcResponseMeta::user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:652,1
    - Dst: HuluRpcResponseMeta::has_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:654,1
    - Dst: HuluController*::set_response_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: HuluRpcResponseMeta::user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:655,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:661,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:662,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 40
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 663
      start: 596
    functionDepth: 2
    functionLinenumber: 596
    functionLinenumberEnd: 663
    functionName: brpc::policy::ProcessHuluResponse
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ParseFromCompressedData
    - HuluRpcResponseMeta::has_user_defined_source_addr
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG
    - ParsePbFromIOBuf
    - CompressTypeToCStr
    - DestroyingPtr::payload::length
    - Controller*::response_attachment
    - LOG_IF
    - HuluRpcResponseMeta::has_user_data
    - DestroyingPtr::payload::size
    - HuluRpcResponseMeta::has_user_message_size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - brpc::policy::Hulu2CompressType
    - Controller*::set_response_compress_type
    - Controller*::ErrorCode
    - DestroyingPtr::reset
    - dynamic_cast<HuluController*>
    - auto::set_base_real_us
    - HuluController*::set_response_user_data
    - static_cast<uint64_t>
    - HuluRpcResponseMeta::error_text
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - HuluRpcResponseMeta::user_data
    - HuluController*::set_response_source_addr
    - HuluRpcResponseMeta::user_defined_source_addr
    - auto::set_received_us
    - DestroyingPtr::payload::cutn
    - berror
    - HuluRpcResponseMeta::user_message_size
    - HuluRpcResponseMeta::compress_type
    - butil::IOBuf::IOBuf
    - bthread_id_lock
    - HuluRpcResponseMeta::correlation_id
    - Controller*::SetFailed
    - HuluRpcResponseMeta::error_code
    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:673,1
    - Dst: HuluRpcRequestMeta::mutable_credential_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:674,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:675,1
    - Dst: HuluRpcRequestMeta::set_service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: google::protobuf::MethodDescriptor*::service
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:679,1
    - Dst: HuluRpcRequestMeta::set_method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: google::protobuf::MethodDescriptor*::index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:680,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:681,1
    - Dst: Controller*::request_compress_type
      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:682,1
    - Dst: HuluRpcRequestMeta::set_service_name
      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: service_name
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:684,1
    - Dst: HuluRpcRequestMeta::set_method_index
      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: method_index
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:685,1
    - Dst: HuluRpcRequestMeta::set_compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:686,1
    - Dst: brpc::policy::CompressType2Hulu
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: compress_type
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:687,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::sampled_request
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:688,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:690,1
    - Dst: dynamic_cast<HuluController*>
      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:695,1
    - Dst: HuluRpcRequestMeta::set_user_defined_source_addr
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:696,1
    - Dst: HuluController*::request_source_addr
      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:699,1
    - Dst: HuluRpcRequestMeta::set_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluController*::request_user_data
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:700,1
    - Dst: HuluRpcRequestMeta::set_correlation_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:704,1
    - Dst: Controller*::has_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:705,1
    - Dst: HuluRpcRequestMeta::set_log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:706,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:710,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:711,1
    - Dst: HuluRpcRequestMeta::set_user_message_size
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:713,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:717,1
    - Dst: HuluRpcRequestMeta::set_trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: auto::trace_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:719,1
    - Dst: HuluRpcRequestMeta::set_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: auto::span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:720,1
    - Dst: HuluRpcRequestMeta::set_parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: auto::parent_span_id
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:721,1
    - Dst: brpc::policy::SerializeHuluHeaderAndMeta
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:724,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:725,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,1
    - Dst: Controller*::request_attachment
      Src: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp:727,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: 729
      start: 665
    functionDepth: 2
    functionLinenumber: 665
    functionLinenumberEnd: 729
    functionName: brpc::policy::PackHuluRequest
    functionSourceFile: /src/brpc/src/brpc/policy/hulu_pbrpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - method_index
    - HuluRpcRequestMeta::set_service_name
    - ControllerPrivateAccessor
    - auto::parent_span_id
    - HuluRpcRequestMeta::set_user_defined_source_addr
    - HuluRpcRequestMeta::set_trace_id
    - service_name
    - HuluController*::request_user_data
    - HuluRpcRequestMeta::set_method_index
    - google::protobuf::MethodDescriptor*::index
    - Controller*::request_compress_type
    - dynamic_cast<HuluController*>
    - HuluRpcRequestMeta::mutable_credential_data
    - Authenticator*::GenerateCredential
    - google::protobuf::MethodDescriptor*::service
    - HuluRpcRequestMeta::set_correlation_id
    - size
    - HuluRpcRequestMeta::set_span_id
    - HuluController*::request_source_addr
    - Controller*::request_attachment
    - HuluRpcRequestMeta::set_log_id
    - auto::span_id
    - HuluRpcRequestMeta::set_user_message_size
    - Controller*::log_id
    - brpc::policy::CompressType2Hulu
    - Controller*::SetFailed
    - compress_type
    - user_data
    - HuluRpcRequestMeta::set_user_data
    - auto::trace_id
    - butil::IOBuf*::append
    - brpc::policy::SerializeHuluHeaderAndMeta
    - Controller*::has_log_id
    - HuluRpcRequestMeta::set_parent_span_id
    - Controller*::sampled_request
    - HuluRpcRequestMeta::set_compress_type
    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:
    - Disabled
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - Disabled
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - Disabled
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - Disabled
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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:
    - BAIDU_SCOPED_LOCK
    - ResetWeight
    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
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - _hash_func
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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
    - CHECK
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - MD5HashSignature
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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:
    - GetReplicaPolicy
    - CHECK
    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>::size
    - std::set_union
    - std::vector<Node>::end
    - std::vector<Node>::resize
    - std::vector<Node>::begin
    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>::begin
    - std::vector<Node>::size
    - berror
    - std::vector<Node>::clear
    - std::find
    - std::vector<ServerId>::size
    - CHECK
    - std::vector<Node>::push_back
    - std::vector<ServerId>::empty
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::init
    - butil::FlatSet::FlatSet
    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>::clear
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    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::reserve
    - std::vector::end
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    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::insert
    - std::vector::reserve
    - std::vector::clear
    - std::vector::end
    - std::vector<ServerId>::size
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    - 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:
    - ModifyWithForeground
    - CHECK
    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:
    - ModifyWithForeground
    - CHECK
    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::ConsistentHashingLoadBalancer
    - ConsistentHashingLoadBalancer*::SetParameters
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 335
    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
    - brpc::ExcludedServers::IsExcluded
    - IsServerAvailable
    - LOG
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - std::lower_bound
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:344,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:347,1
    - Dst: std::map::size
      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:350,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 337
    functionDepth: 1
    functionLinenumber: 337
    functionLinenumberEnd: 365
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::map::end
    - std::map::begin
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - sqrt
    - GetReplicaPolicy
    - std::map::size
    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:369,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:376,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:379,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::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      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:383,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 390
    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
    - std::map::end
    - std::map<butil::EndPoint, double>*::clear
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:393,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:393,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:399,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 408
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - butil::StringToSizeT
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    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
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - _hash_func
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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
    - CHECK
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - MD5HashSignature
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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:
    - GetReplicaPolicy
    - CHECK
    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>::size
    - std::set_union
    - std::vector<Node>::end
    - std::vector<Node>::resize
    - std::vector<Node>::begin
    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>::begin
    - std::vector<Node>::size
    - berror
    - std::vector<Node>::clear
    - std::find
    - std::vector<ServerId>::size
    - CHECK
    - std::vector<Node>::push_back
    - std::vector<ServerId>::empty
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::init
    - butil::FlatSet::FlatSet
    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>::clear
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    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::reserve
    - std::vector::end
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    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::insert
    - std::vector::reserve
    - std::vector::clear
    - std::vector::end
    - std::vector<ServerId>::size
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    - 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:
    - ModifyWithForeground
    - CHECK
    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:
    - ModifyWithForeground
    - CHECK
    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::ConsistentHashingLoadBalancer
    - ConsistentHashingLoadBalancer*::SetParameters
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 335
    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
    - brpc::ExcludedServers::IsExcluded
    - IsServerAvailable
    - LOG
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - std::lower_bound
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:344,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:347,1
    - Dst: std::map::size
      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:350,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 365
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::map::end
    - std::map::begin
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - sqrt
    - GetReplicaPolicy
    - std::map::size
    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:369,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:376,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:379,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::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      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:383,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 390
    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
    - std::map::end
    - std::map<butil::EndPoint, double>*::clear
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:393,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:393,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:399,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 408
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - butil::StringToSizeT
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    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
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - _hash_func
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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
    - CHECK
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - MD5HashSignature
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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:
    - GetReplicaPolicy
    - CHECK
    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>::size
    - std::set_union
    - std::vector<Node>::end
    - std::vector<Node>::resize
    - std::vector<Node>::begin
    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>::begin
    - std::vector<Node>::size
    - berror
    - std::vector<Node>::clear
    - std::find
    - std::vector<ServerId>::size
    - CHECK
    - std::vector<Node>::push_back
    - std::vector<ServerId>::empty
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::init
    - butil::FlatSet::FlatSet
    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>::clear
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    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::reserve
    - std::vector::end
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    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::insert
    - std::vector::reserve
    - std::vector::clear
    - std::vector::end
    - std::vector<ServerId>::size
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    - 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:
    - ModifyWithForeground
    - CHECK
    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:
    - ModifyWithForeground
    - CHECK
    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::ConsistentHashingLoadBalancer
    - ConsistentHashingLoadBalancer*::SetParameters
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 335
    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
    - brpc::ExcludedServers::IsExcluded
    - IsServerAvailable
    - LOG
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - std::lower_bound
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:344,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:347,1
    - Dst: std::map::size
      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:350,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 365
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::map::end
    - std::map::begin
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - sqrt
    - GetReplicaPolicy
    - std::map::size
    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:369,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:376,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:379,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::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      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:383,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 390
    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
    - std::map::end
    - std::map<butil::EndPoint, double>*::clear
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:393,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:393,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:399,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 408
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - butil::StringToSizeT
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    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
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - _hash_func
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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
    - CHECK
    - std::vector<ConsistentHashingLoadBalancer::Node>*::push_back
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - MD5HashSignature
    - SocketUniquePtr::remote_side
    - snprintf
    - std::vector<ConsistentHashingLoadBalancer::Node>*::clear
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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>
    - KetamaReplicaPolicy::KetamaReplicaPolicy
    - DefaultReplicaPolicy::DefaultReplicaPolicy
    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:
    - at
    - pthread_once
    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:
    - GetReplicaPolicy
    - CHECK
    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>::size
    - std::set_union
    - std::vector<Node>::end
    - std::vector<Node>::resize
    - std::vector<Node>::begin
    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>::begin
    - std::vector<Node>::size
    - berror
    - std::vector<Node>::clear
    - std::find
    - std::vector<ServerId>::size
    - CHECK
    - std::vector<Node>::push_back
    - std::vector<ServerId>::empty
    - butil::FlatSet::insert
    - butil::FlatSet::seek
    - butil::FlatSet::init
    - butil::FlatSet::FlatSet
    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>::clear
    - std::vector<Node>::push_back
    - std::vector<Node>::size
    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::reserve
    - std::vector::end
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    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::insert
    - std::vector::reserve
    - std::vector::clear
    - std::vector::end
    - std::vector<ServerId>::size
    - CHECK
    - std::vector::begin
    - GetReplicaPolicy
    - ModifyWithForeground
    - std::sort
    - 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:
    - ModifyWithForeground
    - CHECK
    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:
    - ModifyWithForeground
    - CHECK
    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::ConsistentHashingLoadBalancer
    - ConsistentHashingLoadBalancer*::SetParameters
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:326,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:329,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:330,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 28
    argCount: 2
    argNames:
    - in
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 301
    functionDepth: 1
    functionLinenumber: 301
    functionLinenumberEnd: 335
    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
    - brpc::ExcludedServers::IsExcluded
    - IsServerAvailable
    - LOG
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - std::lower_bound
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:344,1
    - Dst: brpc::policy::ConsistentHashingLoadBalancer::GetLoads
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:347,1
    - Dst: std::map::size
      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:350,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:354,1
    - Dst: sqrt
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:362,1
    - Dst: std::map::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:363,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 2
    argNames:
    - os
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 365
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 365
    functionName: brpc::policy::ConsistentHashingLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - std::map::end
    - std::map::begin
    - brpc::policy::ConsistentHashingLoadBalancer::GetLoads
    - sqrt
    - GetReplicaPolicy
    - std::map::size
    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:369,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:373,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::empty
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:376,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:379,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::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:380,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:381,1
    - Dst: butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
      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:383,1
    - Dst: std::map::begin
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    - Dst: std::map::end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:387,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 17
    argCount: 1
    argNames:
    - load_map
    argTypes:
    - std::map<butil::EndPoint, double>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 390
      start: 367
    functionDepth: 1
    functionLinenumber: 367
    functionLinenumberEnd: 390
    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
    - std::map::end
    - std::map<butil::EndPoint, double>*::clear
    - std::map::begin
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::end
    - Read
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::size
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::get
    - butil::DoublyBufferedData<std::vector<Node> >::ScopedPtr::begin
    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:393,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:393,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:395,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:396,1
    - Dst: butil::KeyValuePairsSplitter::key
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:399,1
    - Dst: butil::StringToSizeT
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: butil::KeyValuePairsSplitter::value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:400,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    - Dst: butil::KeyValuePairsSplitter::key_and_value
      Src: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp:405,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 1
    argNames:
    - ' params'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 392
    functionDepth: 1
    functionLinenumber: 392
    functionLinenumberEnd: 408
    functionName: brpc::policy::ConsistentHashingLoadBalancer::SetParameters
    functionSourceFile: /src/brpc/src/brpc/policy/consistent_hashing_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - begin
    - butil::StringToSizeT
    - end
    - butil::KeyValuePairsSplitter::value
    - butil::KeyValuePairsSplitter::key_and_value
    - LOG
    - butil::KeyValuePairsSplitter::key
    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: 0
    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: 0
    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: 0
    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: 0
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - GetDescriptor
    - LOG
    - google::protobuf::io::GzipOutputStream::Close
    - SerializeTo
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - std::min
    - LOG
    - google::protobuf::io::GzipOutputStream::BackUp
    - google::protobuf::io::GzipOutputStream::Close
    - size
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipInputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - butil::IOBufAsZeroCopyOutputStream::Next
    - std::min
    - LOG
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - size
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - GetDescriptor
    - LOG
    - google::protobuf::io::GzipOutputStream::Close
    - SerializeTo
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - std::min
    - LOG
    - google::protobuf::io::GzipOutputStream::BackUp
    - google::protobuf::io::GzipOutputStream::Close
    - size
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipInputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - butil::IOBufAsZeroCopyOutputStream::Next
    - std::min
    - LOG
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - size
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - GetDescriptor
    - LOG
    - google::protobuf::io::GzipOutputStream::Close
    - SerializeTo
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - std::min
    - LOG
    - google::protobuf::io::GzipOutputStream::BackUp
    - google::protobuf::io::GzipOutputStream::Close
    - size
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipInputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - butil::IOBufAsZeroCopyOutputStream::Next
    - std::min
    - LOG
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - size
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - SerializeToZeroCopyStream
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - GetDescriptor
    - LOG
    - google::protobuf::io::GzipOutputStream::Close
    - SerializeTo
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::Format2CStr
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - google::protobuf::Message*::GetDescriptor
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipOutputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::Next
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - google::protobuf::io::GzipOutputStream::ZlibErrorMessage
    - std::min
    - LOG
    - google::protobuf::io::GzipOutputStream::BackUp
    - google::protobuf::io::GzipOutputStream::Close
    - size
    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:
    - brpc::policy::Format2CStr
    - google::protobuf::io::GzipInputStream::Next
    - memcpy
    - butil::IOBufAsZeroCopyInputStream::ByteCount
    - butil::IOBufAsZeroCopyOutputStream::Next
    - std::min
    - LOG
    - butil::IOBufAsZeroCopyOutputStream::BackUp
    - google::protobuf::io::GzipInputStream::ZlibErrorMessage
    - size
    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:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:68,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:69,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:70,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:71,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:73,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:74,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 76
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:79,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:86,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:91,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:94,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:96,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:101,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:104,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:109,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:110,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:115,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:117,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:122,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:123,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:130,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:133,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:135,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:136,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:140,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:147,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 150
    functionName: brpc::policy::ParseCouchbaseMessage
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseCouchbaseMessage(butil::IOBuf* source, Socket* socket,\n
      \                                 bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:153,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:167,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:171,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:173,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:174,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:175,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:176,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:182,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:183,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:187,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:192,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:193,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 194
    functionName: brpc::policy::ProcessCouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - rawBuffer
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessCouchbaseResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:199,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:201,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:202,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:203,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::pipelinedCount
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,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: 210
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - CouchbaseOperations::CouchbaseRequest*::rawBuffer
    - CouchbaseOperations::CouchbaseRequest*::pipelinedCount
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void SerializeCouchbaseRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                              const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:219,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:220,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:222,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:223,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:225,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:228,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 230
    functionName: brpc::policy::PackCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - std::string::empty
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void PackCouchbaseRequest(butil::IOBuf* buf, SocketMessage**,\n                          uint64_t
      /*correlation_id*/,\n                          const google::protobuf::MethodDescriptor*,\n
      \                         Controller* cntl, 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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::policy::GetCouchbaseMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetCouchbaseMethodName(\n    const google::protobuf::MethodDescriptor*,
      const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:68,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:69,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:70,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:71,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:73,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:74,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 76
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:79,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 5
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:86,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:91,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:94,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:96,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:101,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:104,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:109,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:110,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:115,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:117,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:122,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:123,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:130,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:133,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:135,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:136,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:140,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:147,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 150
    functionName: brpc::policy::ParseCouchbaseMessage
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseCouchbaseMessage(butil::IOBuf* source, Socket* socket,\n
      \                                 bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:153,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:167,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:171,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:173,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:174,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:175,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:176,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:182,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:183,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:187,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:192,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:193,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 194
    functionName: brpc::policy::ProcessCouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - rawBuffer
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessCouchbaseResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:199,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:201,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:202,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:203,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::pipelinedCount
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,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: 210
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - CouchbaseOperations::CouchbaseRequest*::rawBuffer
    - CouchbaseOperations::CouchbaseRequest*::pipelinedCount
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void SerializeCouchbaseRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                              const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:219,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:220,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:222,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:223,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:225,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:228,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 230
    functionName: brpc::policy::PackCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - std::string::empty
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void PackCouchbaseRequest(butil::IOBuf* buf, SocketMessage**,\n                          uint64_t
      /*correlation_id*/,\n                          const google::protobuf::MethodDescriptor*,\n
      \                         Controller* cntl, 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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::policy::GetCouchbaseMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetCouchbaseMethodName(\n    const google::protobuf::MethodDescriptor*,
      const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:68,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:69,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:70,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:71,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:73,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:74,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 76
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:79,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:86,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:91,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:94,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:96,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:101,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:104,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:109,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:110,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:115,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:117,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:122,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:123,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:130,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:133,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:135,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:136,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:140,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:147,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 150
    functionName: brpc::policy::ParseCouchbaseMessage
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseCouchbaseMessage(butil::IOBuf* source, Socket* socket,\n
      \                                 bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:153,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:167,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:171,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:173,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:174,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:175,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:176,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:182,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:183,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:187,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:192,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:193,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 194
    functionName: brpc::policy::ProcessCouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - rawBuffer
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessCouchbaseResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:199,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:201,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:202,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:203,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::pipelinedCount
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,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: 210
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - CouchbaseOperations::CouchbaseRequest*::rawBuffer
    - CouchbaseOperations::CouchbaseRequest*::pipelinedCount
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void SerializeCouchbaseRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                              const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:219,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:220,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:222,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:223,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:225,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:228,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 230
    functionName: brpc::policy::PackCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - std::string::empty
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void PackCouchbaseRequest(butil::IOBuf* buf, SocketMessage**,\n                          uint64_t
      /*correlation_id*/,\n                          const google::protobuf::MethodDescriptor*,\n
      \                         Controller* cntl, 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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::policy::GetCouchbaseMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetCouchbaseMethodName(\n    const google::protobuf::MethodDescriptor*,
      const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::bit_array_clear
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:53,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:54,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:55,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:56,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:57,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:58,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:59,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:60,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:61,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:62,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:63,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:64,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:65,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:66,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:67,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:68,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:69,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:70,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:71,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:73,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:74,1
    - Dst: butil::bit_array_set
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 23
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 52
    functionDepth: 1
    functionLinenumber: 52
    functionLinenumberEnd: 76
    functionName: brpc::policy::InitSupportedCommandMap
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::bit_array_clear
    - butil::bit_array_set
    linkageType: ''
    returnType: void
    signature: void InitSupportedCommandMap()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:79,1
    - Dst: butil::bit_array_get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - command
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 1
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: brpc::policy::IsSupportedCommand
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 7
    functionsReached:
    - butil::bit_array_get
    - pthread_once
    linkageType: ''
    returnType: bool
    signature: bool IsSupportedCommand(uint8_t command)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::fetch1
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:86,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:88,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:91,1
    - Dst: butil::IOBuf*::fetch
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:94,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:96,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:99,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:101,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:103,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:104,1
    - Dst: brpc::policy::IsSupportedCommand
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:109,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:110,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:115,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:116,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:117,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:120,1
    - Dst: TestRpcPBMessageFactory::Get
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:122,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:123,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:130,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:133,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:135,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:136,1
    - Dst: MostCommonMessage*::meta::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:139,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:140,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:142,1
    - Dst: static_cast<MostCommonMessage*>
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:143,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:145,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:147,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 150
    functionName: brpc::policy::ParseCouchbaseMessage
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - CHECK_EQ
    - butil::IOBuf*::size
    - Socket*::release_parsing_context
    - butil::NetToHost32
    - MostCommonMessage*::meta::append
    - butil::NetToHost16
    - Socket*::reset_parsing_context
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - MakeParseError
    - MakeMessage
    - brpc::policy::IsSupportedCommand
    - butil::NetToHost64
    - TestRpcPBMessageFactory::Get
    - static_cast<MostCommonMessage*>
    - Socket*::PopPipelinedInfo
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseCouchbaseMessage(butil::IOBuf* source, Socket* socket,\n
      \                                 bool /*read_eof*/, const void* /*arg*/)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:153,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:159,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:161,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:162,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:167,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:168,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:169,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: DestroyingPtr::meta::length
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:170,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:171,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:173,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:174,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:175,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:176,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:177,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:178,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:181,1
    - Dst: DestroyingPtr::meta::movable
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:182,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:183,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:184,1
    - Dst: ControllerPrivateAccessor::pipelined_count
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:187,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:192,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:193,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 194
      start: 152
    functionDepth: 2
    functionLinenumber: 152
    functionLinenumberEnd: 194
    functionName: brpc::policy::ProcessCouchbaseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - rawBuffer
    - ControllerPrivateAccessor::span
    - DestroyingPtr::meta::length
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - DestroyingPtr::meta::movable
    - ControllerPrivateAccessor::pipelined_count
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessCouchbaseResponse(InputMessageBase* msg_base)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:199,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:201,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:202,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:203,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::rawBuffer
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:208,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,1
    - Dst: CouchbaseOperations::CouchbaseRequest*::pipelinedCount
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:209,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: 210
      start: 196
    functionDepth: 2
    functionLinenumber: 196
    functionLinenumberEnd: 210
    functionName: brpc::policy::SerializeCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - pbrpcframework::get_prototype_by_method_descriptor
    - CouchbaseOperations::CouchbaseRequest*::rawBuffer
    - CouchbaseOperations::CouchbaseRequest*::pipelinedCount
    - ControllerPrivateAccessor
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    linkageType: ''
    returnType: void
    signature: "void SerializeCouchbaseRequest(butil::IOBuf* buf, Controller* cntl,\n
      \                              const google::protobuf::Message* request)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:219,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:220,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:222,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:223,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:225,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/couchbase_protocol.cpp:228,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 230
    functionName: brpc::policy::PackCouchbaseRequest
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - Authenticator*::GenerateCredential
    - std::string::empty
    - butil::IOBuf*::append
    linkageType: ''
    returnType: void
    signature: "void PackCouchbaseRequest(butil::IOBuf* buf, SocketMessage**,\n                          uint64_t
      /*correlation_id*/,\n                          const google::protobuf::MethodDescriptor*,\n
      \                         Controller* cntl, 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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::policy::GetCouchbaseMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/couchbase_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetCouchbaseMethodName(\n    const google::protobuf::MethodDescriptor*,
      const Controller*)"
  - 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: 16
    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: 17
    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:
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append
    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
    - brpc::policy::LoadUint16
    - static_cast<H2SettingsIdentifier>
    - LOG
    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::SaveUint32
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    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::SerializeFrameHead
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    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_add
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    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: 7
    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:
    - clear
    - begin
    - end
    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:
    - brpc::policy::H2Context::Init
    - init
    - LOG
    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:
    - begin
    - StreamMap::end
    - end
    - stream_id
    - std::vector<H2StreamContext*>*::size
    - StreamMap::begin
    - erase
    - swap
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    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:
    - bytes_left
    - LoadUint32
    - static_cast<int>
    - MakeParseError
    - LOG
    - MakeMessage
    - copy_and_forward
    - LoadUint8
    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:
    - LOG
    - H2ParseResult::stream_id
    - SerializeH2SettingsFrameAndWU
    - H2ParseResult::error
    - H2ParseResult::message
    - SerializeFrameHead
    - SaveUint32
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - H2ErrorToStatusCode
    - copy_and_forward
    - FindFrameHandler
    - H2ParseResult::is_ok
    - MakeParseError
    - MakeMessage
    - memcmp
    - brpc::policy::H2Context::ConsumeFrameHead
    - ParseResult::is_ok
    - WriteAck
    - brpc::policy::H2Context::is_server_side
    - H2StreamContext*::header
    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:
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::FindStream
    - LoadUint32
    - is_read_progressive
    - H2StreamContext::H2StreamContext
    - H2StreamContext*::Init
    - LOG
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - H2StreamContext::Init
    - H2StreamContext::OnHeaders
    - H2StreamContext*::OnHeaders
    - brpc::policy::H2Context::TryToInsertStream
    - MakeH2Error
    - LoadUint8
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - forward
    - CHECK_EQ
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    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*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - LOG
    - H2StreamContext::Init
    - H2StreamContext::OnContinuation
    - MakeH2Error
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - pop_front
    - brpc::policy::H2StreamContext::OnEndStream
    - size
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:706,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:713,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:716,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:726,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:727,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 699
    functionDepth: 1
    functionLinenumber: 699
    functionLinenumberEnd: 730
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::OnData
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - LOG
    - H2StreamContext::OnData
    - H2StreamContext::Init
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - MakeH2Error
    - LoadUint8
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:740,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: body_too_large
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:742,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:753,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:754,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:757,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:758,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:759,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:773,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:774,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:775,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:777,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:783,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 732
    functionDepth: 1
    functionLinenumber: 732
    functionLinenumberEnd: 786
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - body_too_large
    - forward
    - local_settings
    - SerializeFrameHead
    - append_and_forward
    - butil::IOBuf::backing_block
    - SaveUint32
    - butil::IOBuf::backing_block_num
    - fetch_add
    - butil::StringPiece::data
    - butil::StringPiece::size
    - VolatilePendingStreamSize
    - OnBody
    - WriteAck
    - MakeH2Error
    - MakeH2Message
    - static_cast<int64_t>
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - exchange
    - brpc::policy::H2StreamContext::OnEndStream
    - brpc::policy::H2StreamContext::stream_id
    - butil::IOBuf::IOBuf
    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:791,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:792,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:795,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:798,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 801
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 801
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - static_cast<H2Error>
    - LOG
    - MakeH2Message
    - H2StreamContext*::OnResetStream
    - MakeH2Error
    - LoadUint32
    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:807,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:808,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:809,1
    - Dst: brpc::policy::H2StreamContext::SetState
      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: H2StreamState2Str
      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:813,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:814,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:820,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:822,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:824,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 803
    functionDepth: 1
    functionLinenumber: 803
    functionLinenumberEnd: 830
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamState2Str
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - H2StreamContext*::header
    - is_client_side
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - H2ErrorToStatusCode
    - MakeH2Error
    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:834,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:835,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:836,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:841,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:846,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:847,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:849,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:851,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:852,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 832
    functionDepth: 1
    functionLinenumber: 832
    functionLinenumberEnd: 853
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - H2StreamState2Str
    - OnMessageComplete
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - CHECK_EQ
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:864,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:868,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:870,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:873,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:884,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:885,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:886,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:894,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:895,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:896,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:900,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:908,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:909,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:917,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:918,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:919,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:922,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 923
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - begin
    - SerializeFrameHead
    - end
    - fetch_sub
    - AddWindowSize
    - LOG
    - MakeH2Message
    - static_cast<int64_t>
    - ParseH2Settings
    - WriteAck
    - MakeH2Error
    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:927,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:928,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 925
    functionDepth: 1
    functionLinenumber: 925
    functionLinenumberEnd: 929
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 931
    functionDepth: 1
    functionLinenumber: 931
    functionLinenumberEnd: 935
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:940,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:944,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:952,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:953,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:954,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:956,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:958,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 937
    functionDepth: 1
    functionLinenumber: 937
    functionLinenumberEnd: 959
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeFrameHead
    - LOG
    - MakeH2Message
    - WriteAck
    - MakeH2Error
    - copy_and_forward
    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:962,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 12
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessHttpResponse
    - static_cast<InputMessageBase*>
    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:969,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:973,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:977,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:978,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:993,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:994,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:995,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1006,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1008,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1010,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1013,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1015
      start: 966
    functionDepth: 4
    functionLinenumber: 966
    functionLinenumberEnd: 1015
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<H2Error>
    - static_cast<int>
    - keytable_pool
    - LOG
    - brpc::policy::H2Context::is_client_side
    - SetLogOff
    - MakeH2Message
    - H2StreamContext*::header
    - std::vector::size
    - forward
    - CHECK_EQ
    - std::vector::empty
    - static_cast<InputMessageBase*>
    - bthread_start_background
    - MakeH2Error
    - 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:1020,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1025,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1030,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1035,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1038,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1040,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1041,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1042,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1043,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1047
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - LOG
    - MakeH2Message
    - MakeH2Error
    - 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:1054,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1058,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1060,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1066,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1070,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1071,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1078
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 1
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - 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:1081,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1084,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1085
      start: 1080
    functionDepth: 0
    functionLinenumber: 1080
    functionLinenumberEnd: 1085
    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:1091,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1092,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1094,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1097,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1098,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1099,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1087
    functionDepth: 1
    functionLinenumber: 1087
    functionLinenumberEnd: 1104
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - local_settings
    - SerializeFrameHead
    - fetch_add
    - LOG
    - SaveUint32
    - exchange
    - WriteAck
    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:1117,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1122,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1132,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1136,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1137,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1144,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: 1147
      start: 1112
    functionDepth: 2
    functionLinenumber: 1112
    functionLinenumberEnd: 1147
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 16
    functionsReached:
    - butil::IOBufBytesIterator::bytes_left
    - H2Context*::ClearAbandonedStreams
    - static_cast<const Server*>
    - H2Context*::Consume
    - static_cast<H2Context*>
    - MakeParseError
    - LOG
    - ParseResult::is_ok
    - H2Context::H2Context
    - H2Context*::Init
    - Socket*::parsing_context
    - ParseResult::message
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    - Socket*::initialize_parsing_context
    - butil::IOBuf*::empty
    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:1151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1152
    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:1156,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1158,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1159,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1160,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1154
    functionDepth: 2
    functionLinenumber: 1154
    functionLinenumberEnd: 1166
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - empty
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - std::unique_lock::unlock
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1190
    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:1194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1196
    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:1202,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1203,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1205
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - H2StreamState2Str
    - brpc::policy::H2StreamContext::stream_id
    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:1215,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1218,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1224,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1228
      start: 1208
    functionDepth: 1
    functionLinenumber: 1208
    functionLinenumberEnd: 1228
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - fetch_sub
    - fetch_add
    - LOG
    - MinusWindowSize
    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:1231,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1232,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1235,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1242,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1249,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1253,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1257,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1260,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1267,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1271,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1274,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1279,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1289,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1300,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1302,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1303,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1304,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1305,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1307,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1315
      start: 1230
    functionDepth: 1
    functionLinenumber: 1230
    functionLinenumberEnd: 1315
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - header
    - strcmp
    - LOG
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - AppendHeader
    - set_status_code
    - set_method
    - strtol
    - HPacker::Header::name::c_str
    - hpacker
    - is_server_side
    - Decode
    - set_content_type
    - butil::my_ip
    - Str2HttpMethod
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - butil::IOBufBuilder::IOBufBuilder
    - uri
    - HPacker::Header::value::c_str
    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:1325,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1328,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1339,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1340,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1341,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1345,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1362,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1368,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1375,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1382,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,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: 1389
      start: 1319
    functionDepth: 1
    functionLinenumber: 1319
    functionLinenumberEnd: 1389
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::SerializeFrameHead
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBufBytesIterator::append_and_forward
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - brpc::policy::SaveUint32
    - cutn
    - empty
    - size
    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:1392,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1393,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1394,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1395,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1396,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1397,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1411,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1412,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1418,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1426,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1428,1
    - Dst: uri
      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:1431,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1432,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1433,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1438,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1446,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1457,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1458,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1461,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1391
    functionDepth: 1
    functionLinenumber: 1391
    functionLinenumberEnd: 1465
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - H2UnsentRequest::H2UnsentRequest
    - H2UnsentRequest*::push
    - Controller*::remote_side
    - empty
    - std::string*::empty
    - H2UnsentRequest*::_sctx::reset
    - malloc
    - butil::Base64Encode
    - Controller*::is_response_read_progressively
    - HttpMethod2Str
    - H2StreamContext::H2StreamContext
    - host
    - butil::endpoint2str
    - Controller*::http_request
    - HeaderCount
    - content_type
    - std::string*::reserve
    - port
    - get_common_strings
    - GetHeader
    - std::string*::append
    - uri
    - method
    - Controller*::is_ssl
    - butil::string_printf
    - 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:1469,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1471,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1473
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - ~Header
    - free
    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: 1476
      start: 1476
    functionDepth: 0
    functionLinenumber: 1476
    functionLinenumberEnd: 1476
    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:1477,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1477
    functionDepth: 0
    functionLinenumber: 1477
    functionLinenumberEnd: 1477
    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:1489,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1494,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1497
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - static_cast<H2Context*>
    - H2Context*::AddAbandonedStream
    - CHECK_EQ
    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:1512,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1519,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1520,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1522,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1524,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1527,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1532,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1534,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1539,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1546,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1549,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1556,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1562,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1564,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1572,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1576,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1578,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1588,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1595,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1598,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1600,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1602,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1603
      start: 1505
    functionDepth: 2
    functionLinenumber: 1505
    functionLinenumberEnd: 1603
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - request_attachment
    - H2Context*::remote_settings
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context::H2Context
    - Socket*::parsing_context
    - HeaderEnd
    - BuiltinServiceTest::TestStatus
    - H2Context*::AllocateClientStreamId
    - butil::IOBufAppender::IOBufAppender
    - SerializeH2SettingsFrameAndWU
    - CHECK
    - PackH2Message
    - get
    - http_request
    - Socket*::CreatedByConnect
    - Encode
    - Socket*::initialize_parsing_context
    - H2Context*::VolatilePendingStreamSize
    - butil::IOBuf*::append
    - stream_id
    - ConsumeWindowSize
    - Init
    - release
    - has_http_request
    - H2Context*::Init
    - HeaderBegin
    - butil::IOBuf::IOBuf
    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:1608,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1614,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1615,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1616,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1623
      start: 1605
    functionDepth: 0
    functionLinenumber: 1605
    functionLinenumberEnd: 1623
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - http_request
    - value::size
    - request_attachment
    - has_http_request
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    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:1626,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1634,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1635,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1637,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1641,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1642,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1625
    functionDepth: 1
    functionLinenumber: 1625
    functionLinenumberEnd: 1647
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - butil::my_ip
    - request_attachment
    - has_http_request
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - HeaderEnd
    - butil::IOBuf*::empty
    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:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1659
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorCode
    - Controller*::release_http_response
    - swap
    - PercentEncode
    - Controller*::response_attachment
    - Controller*::ErrorText
    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:1662,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1664,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1671,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1672,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1675,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1661
    functionDepth: 1
    functionLinenumber: 1661
    functionLinenumberEnd: 1681
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - malloc
    - H2UnsentResponse*::push
    - get_common_strings
    - H2UnsentResponse::H2UnsentResponse
    - butil::string_printf
    - Controller*::http_response
    - HttpHeader*::status_code
    - HttpHeader*::content_type
    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:1685,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1687,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1689
      start: 1683
    functionDepth: 0
    functionLinenumber: 1683
    functionLinenumberEnd: 1689
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - ~Header
    - free
    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:1704,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1717,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1718,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1720,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1723,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1737,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1742,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1750,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1752,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1754,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1757,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1697
    functionDepth: 1
    functionLinenumber: 1697
    functionLinenumberEnd: 1759
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - butil::IOBufAppender::move_to
    - H2Context*::remote_settings
    - empty
    - Socket*::parsing_context
    - HeaderEnd
    - butil::IOBufAppender::IOBufAppender
    - SerializeFrameHead
    - SaveUint32
    - PackH2Message
    - MinusWindowSize
    - size
    - Encode
    - butil::IOBuf*::append
    - HeaderBegin
    - butil::string_printf
    - butil::IOBuf::IOBuf
    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:1764,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1764,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1767,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1774
      start: 1761
    functionDepth: 0
    functionLinenumber: 1761
    functionLinenumberEnd: 1774
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - value::size
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    - 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:1777,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1782,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1783,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1787,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1776
    functionDepth: 1
    functionLinenumber: 1776
    functionLinenumberEnd: 1791
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::my_ip
    - HeaderBegin
    - empty
    - HeaderEnd
    - butil::ToPrintable::ToPrintable
    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:1802,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1806,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1808,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1812,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1813,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1818,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: 1820
      start: 1793
    functionDepth: 1
    functionLinenumber: 1793
    functionLinenumberEnd: 1820
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::SetHeader
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - LOG
    - Controller*::SetFailed
    - H2UnsentRequest*::_sctx::set_correlation_id
    - HttpHeader*::GetHeader
    - dynamic_cast<H2UnsentRequest*>
    - Controller*::http_request
    - ControllerPrivateAccessor::get_stream_user_data
    - Authenticator*::GenerateCredential
    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:1823,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1823,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1825
      start: 1822
    functionDepth: 0
    functionLinenumber: 1822
    functionLinenumberEnd: 1825
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    - Socket*::parsing_context
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1829,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1830,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1834,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1836,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1827
    functionDepth: 0
    functionLinenumber: 1827
    functionLinenumberEnd: 1840
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - GetAgentSocket
    - 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: 1845
      start: 1842
    functionDepth: 0
    functionLinenumber: 1842
    functionLinenumberEnd: 1845
    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:1848,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1849
      start: 1847
    functionDepth: 0
    functionLinenumber: 1847
    functionLinenumberEnd: 1849
    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: 19
    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: 20
    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:
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append
    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
    - brpc::policy::LoadUint16
    - static_cast<H2SettingsIdentifier>
    - LOG
    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::SaveUint32
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    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::SerializeFrameHead
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    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_add
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    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: 7
    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:
    - clear
    - begin
    - end
    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:
    - brpc::policy::H2Context::Init
    - init
    - LOG
    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:
    - begin
    - StreamMap::end
    - end
    - stream_id
    - std::vector<H2StreamContext*>*::size
    - StreamMap::begin
    - erase
    - swap
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    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:
    - bytes_left
    - LoadUint32
    - static_cast<int>
    - MakeParseError
    - LOG
    - MakeMessage
    - copy_and_forward
    - LoadUint8
    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:
    - LOG
    - H2ParseResult::stream_id
    - SerializeH2SettingsFrameAndWU
    - H2ParseResult::error
    - H2ParseResult::message
    - SerializeFrameHead
    - SaveUint32
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - H2ErrorToStatusCode
    - copy_and_forward
    - FindFrameHandler
    - H2ParseResult::is_ok
    - MakeParseError
    - MakeMessage
    - memcmp
    - brpc::policy::H2Context::ConsumeFrameHead
    - ParseResult::is_ok
    - WriteAck
    - brpc::policy::H2Context::is_server_side
    - H2StreamContext*::header
    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:
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::FindStream
    - LoadUint32
    - is_read_progressive
    - H2StreamContext::H2StreamContext
    - H2StreamContext*::Init
    - LOG
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - H2StreamContext::Init
    - H2StreamContext::OnHeaders
    - H2StreamContext*::OnHeaders
    - brpc::policy::H2Context::TryToInsertStream
    - MakeH2Error
    - LoadUint8
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - forward
    - CHECK_EQ
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    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*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - LOG
    - H2StreamContext::Init
    - H2StreamContext::OnContinuation
    - MakeH2Error
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - pop_front
    - brpc::policy::H2StreamContext::OnEndStream
    - size
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:706,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:713,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:716,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:726,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:727,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 730
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::OnData
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - LOG
    - H2StreamContext::OnData
    - H2StreamContext::Init
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - MakeH2Error
    - LoadUint8
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:740,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: body_too_large
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:742,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:753,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:754,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:757,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:758,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:759,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:773,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:774,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:775,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:777,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:783,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 732
    functionDepth: 2
    functionLinenumber: 732
    functionLinenumberEnd: 786
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - body_too_large
    - forward
    - local_settings
    - SerializeFrameHead
    - append_and_forward
    - butil::IOBuf::backing_block
    - SaveUint32
    - butil::IOBuf::backing_block_num
    - fetch_add
    - butil::StringPiece::data
    - butil::StringPiece::size
    - VolatilePendingStreamSize
    - OnBody
    - WriteAck
    - MakeH2Error
    - MakeH2Message
    - static_cast<int64_t>
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - exchange
    - brpc::policy::H2StreamContext::OnEndStream
    - brpc::policy::H2StreamContext::stream_id
    - butil::IOBuf::IOBuf
    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:791,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:792,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:795,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:798,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 801
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 801
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - static_cast<H2Error>
    - LOG
    - MakeH2Message
    - H2StreamContext*::OnResetStream
    - MakeH2Error
    - LoadUint32
    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:807,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:808,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:809,1
    - Dst: brpc::policy::H2StreamContext::SetState
      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: H2StreamState2Str
      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:813,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:814,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:820,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:822,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:824,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 803
    functionDepth: 2
    functionLinenumber: 803
    functionLinenumberEnd: 830
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamState2Str
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - H2StreamContext*::header
    - is_client_side
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - H2ErrorToStatusCode
    - MakeH2Error
    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:834,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:835,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:836,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:841,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:846,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:847,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:849,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:851,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:852,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 832
    functionDepth: 2
    functionLinenumber: 832
    functionLinenumberEnd: 853
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - H2StreamState2Str
    - OnMessageComplete
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - CHECK_EQ
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:864,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:868,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:870,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:873,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:884,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:885,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:886,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:894,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:895,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:896,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:900,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:908,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:909,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:917,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:918,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:919,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:922,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 923
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - begin
    - SerializeFrameHead
    - end
    - fetch_sub
    - AddWindowSize
    - LOG
    - MakeH2Message
    - static_cast<int64_t>
    - ParseH2Settings
    - WriteAck
    - MakeH2Error
    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:927,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:928,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 925
    functionDepth: 1
    functionLinenumber: 925
    functionLinenumberEnd: 929
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 931
    functionDepth: 1
    functionLinenumber: 931
    functionLinenumberEnd: 935
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:940,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:944,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:952,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:953,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:954,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:956,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:958,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 937
    functionDepth: 1
    functionLinenumber: 937
    functionLinenumberEnd: 959
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeFrameHead
    - LOG
    - MakeH2Message
    - WriteAck
    - MakeH2Error
    - copy_and_forward
    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:962,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 12
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessHttpResponse
    - static_cast<InputMessageBase*>
    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:969,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:973,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:977,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:978,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:993,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:994,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:995,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1006,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1008,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1010,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1013,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1015
      start: 966
    functionDepth: 4
    functionLinenumber: 966
    functionLinenumberEnd: 1015
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<H2Error>
    - static_cast<int>
    - keytable_pool
    - LOG
    - brpc::policy::H2Context::is_client_side
    - SetLogOff
    - MakeH2Message
    - H2StreamContext*::header
    - std::vector::size
    - forward
    - CHECK_EQ
    - std::vector::empty
    - static_cast<InputMessageBase*>
    - bthread_start_background
    - MakeH2Error
    - 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:1020,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1025,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1030,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1035,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1038,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1040,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1041,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1042,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1043,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1047
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - LOG
    - MakeH2Message
    - MakeH2Error
    - 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:1054,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1058,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1060,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1066,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1070,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1071,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1078
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 2
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - 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:1081,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1084,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1085
      start: 1080
    functionDepth: 0
    functionLinenumber: 1080
    functionLinenumberEnd: 1085
    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:1091,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1092,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1094,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1097,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1098,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1099,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1087
    functionDepth: 1
    functionLinenumber: 1087
    functionLinenumberEnd: 1104
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - local_settings
    - SerializeFrameHead
    - fetch_add
    - LOG
    - SaveUint32
    - exchange
    - WriteAck
    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:1117,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1122,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1132,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1136,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1137,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1144,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: 1147
      start: 1112
    functionDepth: 2
    functionLinenumber: 1112
    functionLinenumberEnd: 1147
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 16
    functionsReached:
    - butil::IOBufBytesIterator::bytes_left
    - H2Context*::ClearAbandonedStreams
    - static_cast<const Server*>
    - H2Context*::Consume
    - static_cast<H2Context*>
    - MakeParseError
    - LOG
    - ParseResult::is_ok
    - H2Context::H2Context
    - H2Context*::Init
    - Socket*::parsing_context
    - ParseResult::message
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    - Socket*::initialize_parsing_context
    - butil::IOBuf*::empty
    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:1151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1152
    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:1156,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1158,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1159,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1160,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1154
    functionDepth: 2
    functionLinenumber: 1154
    functionLinenumberEnd: 1166
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - empty
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - std::unique_lock::unlock
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1190
    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:1194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1196
    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:1202,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1203,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1205
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - H2StreamState2Str
    - brpc::policy::H2StreamContext::stream_id
    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:1215,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1218,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1224,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1228
      start: 1208
    functionDepth: 1
    functionLinenumber: 1208
    functionLinenumberEnd: 1228
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - fetch_sub
    - fetch_add
    - LOG
    - MinusWindowSize
    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:1231,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1232,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1235,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1242,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1249,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1253,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1257,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1260,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1267,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1271,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1274,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1279,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1289,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1300,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1302,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1303,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1304,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1305,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1307,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1315
      start: 1230
    functionDepth: 1
    functionLinenumber: 1230
    functionLinenumberEnd: 1315
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - header
    - strcmp
    - LOG
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - AppendHeader
    - set_status_code
    - set_method
    - strtol
    - HPacker::Header::name::c_str
    - hpacker
    - is_server_side
    - Decode
    - set_content_type
    - butil::my_ip
    - Str2HttpMethod
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - butil::IOBufBuilder::IOBufBuilder
    - uri
    - HPacker::Header::value::c_str
    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:1325,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1328,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1339,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1340,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1341,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1345,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1362,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1368,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1375,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1382,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,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: 1389
      start: 1319
    functionDepth: 1
    functionLinenumber: 1319
    functionLinenumberEnd: 1389
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::SerializeFrameHead
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBufBytesIterator::append_and_forward
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - brpc::policy::SaveUint32
    - cutn
    - empty
    - size
    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:1392,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1393,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1394,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1395,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1396,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1397,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1411,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1412,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1418,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1426,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1428,1
    - Dst: uri
      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:1431,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1432,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1433,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1438,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1446,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1457,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1458,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1461,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1391
    functionDepth: 1
    functionLinenumber: 1391
    functionLinenumberEnd: 1465
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - H2UnsentRequest::H2UnsentRequest
    - H2UnsentRequest*::push
    - Controller*::remote_side
    - empty
    - std::string*::empty
    - H2UnsentRequest*::_sctx::reset
    - malloc
    - butil::Base64Encode
    - Controller*::is_response_read_progressively
    - HttpMethod2Str
    - H2StreamContext::H2StreamContext
    - host
    - butil::endpoint2str
    - Controller*::http_request
    - HeaderCount
    - content_type
    - std::string*::reserve
    - port
    - get_common_strings
    - GetHeader
    - std::string*::append
    - uri
    - method
    - Controller*::is_ssl
    - butil::string_printf
    - 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:1469,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1471,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1473
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - ~Header
    - free
    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: 1476
      start: 1476
    functionDepth: 0
    functionLinenumber: 1476
    functionLinenumberEnd: 1476
    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:1477,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1477
    functionDepth: 0
    functionLinenumber: 1477
    functionLinenumberEnd: 1477
    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:1489,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1494,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1497
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - static_cast<H2Context*>
    - H2Context*::AddAbandonedStream
    - CHECK_EQ
    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:1512,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1519,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1520,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1522,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1524,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1527,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1532,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1534,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1539,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1546,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1549,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1556,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1562,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1564,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1572,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1576,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1578,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1588,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1595,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1598,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1600,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1602,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1603
      start: 1505
    functionDepth: 2
    functionLinenumber: 1505
    functionLinenumberEnd: 1603
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - request_attachment
    - H2Context*::remote_settings
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context::H2Context
    - Socket*::parsing_context
    - HeaderEnd
    - BuiltinServiceTest::TestStatus
    - H2Context*::AllocateClientStreamId
    - butil::IOBufAppender::IOBufAppender
    - SerializeH2SettingsFrameAndWU
    - CHECK
    - PackH2Message
    - get
    - http_request
    - Socket*::CreatedByConnect
    - Encode
    - Socket*::initialize_parsing_context
    - H2Context*::VolatilePendingStreamSize
    - butil::IOBuf*::append
    - stream_id
    - ConsumeWindowSize
    - Init
    - release
    - has_http_request
    - H2Context*::Init
    - HeaderBegin
    - butil::IOBuf::IOBuf
    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:1608,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1614,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1615,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1616,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1623
      start: 1605
    functionDepth: 0
    functionLinenumber: 1605
    functionLinenumberEnd: 1623
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - http_request
    - value::size
    - request_attachment
    - has_http_request
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    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:1626,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1634,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1635,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1637,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1641,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1642,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1625
    functionDepth: 1
    functionLinenumber: 1625
    functionLinenumberEnd: 1647
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - butil::my_ip
    - request_attachment
    - has_http_request
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - HeaderEnd
    - butil::IOBuf*::empty
    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:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1659
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorCode
    - Controller*::release_http_response
    - swap
    - PercentEncode
    - Controller*::response_attachment
    - Controller*::ErrorText
    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:1662,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1664,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1671,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1672,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1675,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1661
    functionDepth: 1
    functionLinenumber: 1661
    functionLinenumberEnd: 1681
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - malloc
    - H2UnsentResponse*::push
    - get_common_strings
    - H2UnsentResponse::H2UnsentResponse
    - butil::string_printf
    - Controller*::http_response
    - HttpHeader*::status_code
    - HttpHeader*::content_type
    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:1685,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1687,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1689
      start: 1683
    functionDepth: 0
    functionLinenumber: 1683
    functionLinenumberEnd: 1689
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - ~Header
    - free
    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:1704,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1717,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1718,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1720,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1723,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1737,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1742,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1750,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1752,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1754,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1757,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1697
    functionDepth: 1
    functionLinenumber: 1697
    functionLinenumberEnd: 1759
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - butil::IOBufAppender::move_to
    - H2Context*::remote_settings
    - empty
    - Socket*::parsing_context
    - HeaderEnd
    - butil::IOBufAppender::IOBufAppender
    - SerializeFrameHead
    - SaveUint32
    - PackH2Message
    - MinusWindowSize
    - size
    - Encode
    - butil::IOBuf*::append
    - HeaderBegin
    - butil::string_printf
    - butil::IOBuf::IOBuf
    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:1764,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1764,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1767,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1774
      start: 1761
    functionDepth: 0
    functionLinenumber: 1761
    functionLinenumberEnd: 1774
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - value::size
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    - 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:1777,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1782,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1783,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1787,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1776
    functionDepth: 1
    functionLinenumber: 1776
    functionLinenumberEnd: 1791
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::my_ip
    - HeaderBegin
    - empty
    - HeaderEnd
    - butil::ToPrintable::ToPrintable
    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:1802,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1806,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1808,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1812,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1813,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1818,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: 1820
      start: 1793
    functionDepth: 1
    functionLinenumber: 1793
    functionLinenumberEnd: 1820
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::SetHeader
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - LOG
    - Controller*::SetFailed
    - H2UnsentRequest*::_sctx::set_correlation_id
    - HttpHeader*::GetHeader
    - dynamic_cast<H2UnsentRequest*>
    - Controller*::http_request
    - ControllerPrivateAccessor::get_stream_user_data
    - Authenticator*::GenerateCredential
    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:1823,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1823,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1825
      start: 1822
    functionDepth: 0
    functionLinenumber: 1822
    functionLinenumberEnd: 1825
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    - Socket*::parsing_context
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1829,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1830,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1834,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1836,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1827
    functionDepth: 0
    functionLinenumber: 1827
    functionLinenumberEnd: 1840
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - GetAgentSocket
    - 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: 1845
      start: 1842
    functionDepth: 0
    functionLinenumber: 1842
    functionLinenumberEnd: 1845
    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:1848,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1849
      start: 1847
    functionDepth: 0
    functionLinenumber: 1847
    functionLinenumberEnd: 1849
    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: 22
    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: 23
    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:
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append
    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
    - brpc::policy::LoadUint16
    - static_cast<H2SettingsIdentifier>
    - LOG
    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::SaveUint32
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    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::SerializeFrameHead
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    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_add
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    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: 7
    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:
    - clear
    - begin
    - end
    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:
    - brpc::policy::H2Context::Init
    - init
    - LOG
    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:
    - begin
    - StreamMap::end
    - end
    - stream_id
    - std::vector<H2StreamContext*>*::size
    - StreamMap::begin
    - erase
    - swap
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    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:
    - bytes_left
    - LoadUint32
    - static_cast<int>
    - MakeParseError
    - LOG
    - MakeMessage
    - copy_and_forward
    - LoadUint8
    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:
    - LOG
    - H2ParseResult::stream_id
    - SerializeH2SettingsFrameAndWU
    - H2ParseResult::error
    - H2ParseResult::message
    - SerializeFrameHead
    - SaveUint32
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - H2ErrorToStatusCode
    - copy_and_forward
    - FindFrameHandler
    - H2ParseResult::is_ok
    - MakeParseError
    - MakeMessage
    - memcmp
    - brpc::policy::H2Context::ConsumeFrameHead
    - ParseResult::is_ok
    - WriteAck
    - brpc::policy::H2Context::is_server_side
    - H2StreamContext*::header
    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:
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::FindStream
    - LoadUint32
    - is_read_progressive
    - H2StreamContext::H2StreamContext
    - H2StreamContext*::Init
    - LOG
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - H2StreamContext::Init
    - H2StreamContext::OnHeaders
    - H2StreamContext*::OnHeaders
    - brpc::policy::H2Context::TryToInsertStream
    - MakeH2Error
    - LoadUint8
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - forward
    - CHECK_EQ
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    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*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - LOG
    - H2StreamContext::Init
    - H2StreamContext::OnContinuation
    - MakeH2Error
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - pop_front
    - brpc::policy::H2StreamContext::OnEndStream
    - size
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:706,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:713,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:716,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:726,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:727,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 730
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::OnData
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - LOG
    - H2StreamContext::OnData
    - H2StreamContext::Init
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - MakeH2Error
    - LoadUint8
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:740,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: body_too_large
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:742,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:753,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:754,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:757,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:758,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:759,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:773,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:774,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:775,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:777,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:783,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 732
    functionDepth: 2
    functionLinenumber: 732
    functionLinenumberEnd: 786
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - body_too_large
    - forward
    - local_settings
    - SerializeFrameHead
    - append_and_forward
    - butil::IOBuf::backing_block
    - SaveUint32
    - butil::IOBuf::backing_block_num
    - fetch_add
    - butil::StringPiece::data
    - butil::StringPiece::size
    - VolatilePendingStreamSize
    - OnBody
    - WriteAck
    - MakeH2Error
    - MakeH2Message
    - static_cast<int64_t>
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - exchange
    - brpc::policy::H2StreamContext::OnEndStream
    - brpc::policy::H2StreamContext::stream_id
    - butil::IOBuf::IOBuf
    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:791,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:792,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:795,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:798,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 801
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 801
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - static_cast<H2Error>
    - LOG
    - MakeH2Message
    - H2StreamContext*::OnResetStream
    - MakeH2Error
    - LoadUint32
    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:807,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:808,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:809,1
    - Dst: brpc::policy::H2StreamContext::SetState
      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: H2StreamState2Str
      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:813,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:814,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:820,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:822,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:824,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 803
    functionDepth: 2
    functionLinenumber: 803
    functionLinenumberEnd: 830
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamState2Str
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - H2StreamContext*::header
    - is_client_side
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - H2ErrorToStatusCode
    - MakeH2Error
    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:834,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:835,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:836,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:841,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:846,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:847,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:849,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:851,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:852,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 832
    functionDepth: 2
    functionLinenumber: 832
    functionLinenumberEnd: 853
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - H2StreamState2Str
    - OnMessageComplete
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - CHECK_EQ
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:864,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:868,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:870,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:873,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:884,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:885,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:886,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:894,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:895,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:896,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:900,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:908,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:909,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:917,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:918,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:919,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:922,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 923
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - begin
    - SerializeFrameHead
    - end
    - fetch_sub
    - AddWindowSize
    - LOG
    - MakeH2Message
    - static_cast<int64_t>
    - ParseH2Settings
    - WriteAck
    - MakeH2Error
    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:927,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:928,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 925
    functionDepth: 1
    functionLinenumber: 925
    functionLinenumberEnd: 929
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 931
    functionDepth: 1
    functionLinenumber: 931
    functionLinenumberEnd: 935
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:940,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:944,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:952,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:953,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:954,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:956,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:958,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 937
    functionDepth: 1
    functionLinenumber: 937
    functionLinenumberEnd: 959
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeFrameHead
    - LOG
    - MakeH2Message
    - WriteAck
    - MakeH2Error
    - copy_and_forward
    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:962,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 12
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessHttpResponse
    - static_cast<InputMessageBase*>
    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:969,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:973,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:977,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:978,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:993,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:994,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:995,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1006,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1008,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1010,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1013,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1015
      start: 966
    functionDepth: 4
    functionLinenumber: 966
    functionLinenumberEnd: 1015
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<H2Error>
    - static_cast<int>
    - keytable_pool
    - LOG
    - brpc::policy::H2Context::is_client_side
    - SetLogOff
    - MakeH2Message
    - H2StreamContext*::header
    - std::vector::size
    - forward
    - CHECK_EQ
    - std::vector::empty
    - static_cast<InputMessageBase*>
    - bthread_start_background
    - MakeH2Error
    - 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:1020,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1025,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1030,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1035,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1038,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1040,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1041,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1042,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1043,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1047
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - LOG
    - MakeH2Message
    - MakeH2Error
    - 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:1054,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1058,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1060,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1066,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1070,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1071,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1078
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 3
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - 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:1081,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1084,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1085
      start: 1080
    functionDepth: 0
    functionLinenumber: 1080
    functionLinenumberEnd: 1085
    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:1091,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1092,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1094,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1097,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1098,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1099,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1087
    functionDepth: 1
    functionLinenumber: 1087
    functionLinenumberEnd: 1104
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - local_settings
    - SerializeFrameHead
    - fetch_add
    - LOG
    - SaveUint32
    - exchange
    - WriteAck
    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:1117,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1122,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1132,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1136,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1137,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1144,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: 1147
      start: 1112
    functionDepth: 2
    functionLinenumber: 1112
    functionLinenumberEnd: 1147
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 16
    functionsReached:
    - butil::IOBufBytesIterator::bytes_left
    - H2Context*::ClearAbandonedStreams
    - static_cast<const Server*>
    - H2Context*::Consume
    - static_cast<H2Context*>
    - MakeParseError
    - LOG
    - ParseResult::is_ok
    - H2Context::H2Context
    - H2Context*::Init
    - Socket*::parsing_context
    - ParseResult::message
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    - Socket*::initialize_parsing_context
    - butil::IOBuf*::empty
    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:1151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1152
    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:1156,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1158,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1159,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1160,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1154
    functionDepth: 2
    functionLinenumber: 1154
    functionLinenumberEnd: 1166
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - empty
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - std::unique_lock::unlock
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1190
    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:1194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1196
    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:1202,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1203,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1205
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - H2StreamState2Str
    - brpc::policy::H2StreamContext::stream_id
    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:1215,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1218,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1224,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1228
      start: 1208
    functionDepth: 1
    functionLinenumber: 1208
    functionLinenumberEnd: 1228
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - fetch_sub
    - fetch_add
    - LOG
    - MinusWindowSize
    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:1231,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1232,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1235,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1242,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1249,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1253,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1257,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1260,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1267,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1271,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1274,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1279,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1289,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1300,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1302,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1303,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1304,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1305,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1307,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1315
      start: 1230
    functionDepth: 1
    functionLinenumber: 1230
    functionLinenumberEnd: 1315
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - header
    - strcmp
    - LOG
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - AppendHeader
    - set_status_code
    - set_method
    - strtol
    - HPacker::Header::name::c_str
    - hpacker
    - is_server_side
    - Decode
    - set_content_type
    - butil::my_ip
    - Str2HttpMethod
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - butil::IOBufBuilder::IOBufBuilder
    - uri
    - HPacker::Header::value::c_str
    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:1325,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1328,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1339,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1340,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1341,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1345,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1362,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1368,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1375,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1382,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,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: 1389
      start: 1319
    functionDepth: 1
    functionLinenumber: 1319
    functionLinenumberEnd: 1389
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::SerializeFrameHead
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBufBytesIterator::append_and_forward
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - brpc::policy::SaveUint32
    - cutn
    - empty
    - size
    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:1392,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1393,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1394,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1395,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1396,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1397,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1411,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1412,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1418,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1426,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1428,1
    - Dst: uri
      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:1431,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1432,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1433,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1438,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1446,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1457,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1458,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1461,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1391
    functionDepth: 1
    functionLinenumber: 1391
    functionLinenumberEnd: 1465
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 9
    functionsReached:
    - H2UnsentRequest::H2UnsentRequest
    - H2UnsentRequest*::push
    - Controller*::remote_side
    - empty
    - std::string*::empty
    - H2UnsentRequest*::_sctx::reset
    - malloc
    - butil::Base64Encode
    - Controller*::is_response_read_progressively
    - HttpMethod2Str
    - H2StreamContext::H2StreamContext
    - host
    - butil::endpoint2str
    - Controller*::http_request
    - HeaderCount
    - content_type
    - std::string*::reserve
    - port
    - get_common_strings
    - GetHeader
    - std::string*::append
    - uri
    - method
    - Controller*::is_ssl
    - butil::string_printf
    - 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:1469,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1471,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1473
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - ~Header
    - free
    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: 1476
      start: 1476
    functionDepth: 0
    functionLinenumber: 1476
    functionLinenumberEnd: 1476
    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:1477,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1477
    functionDepth: 0
    functionLinenumber: 1477
    functionLinenumberEnd: 1477
    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:1489,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1494,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1497
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - static_cast<H2Context*>
    - H2Context*::AddAbandonedStream
    - CHECK_EQ
    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:1512,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1519,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1520,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1522,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1524,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1527,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1532,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1534,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1539,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1546,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1549,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1556,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1562,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1564,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1572,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1576,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1578,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1588,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1595,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1598,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1600,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1602,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1603
      start: 1505
    functionDepth: 2
    functionLinenumber: 1505
    functionLinenumberEnd: 1603
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - request_attachment
    - H2Context*::remote_settings
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context::H2Context
    - Socket*::parsing_context
    - HeaderEnd
    - BuiltinServiceTest::TestStatus
    - H2Context*::AllocateClientStreamId
    - butil::IOBufAppender::IOBufAppender
    - SerializeH2SettingsFrameAndWU
    - CHECK
    - PackH2Message
    - get
    - http_request
    - Socket*::CreatedByConnect
    - Encode
    - Socket*::initialize_parsing_context
    - H2Context*::VolatilePendingStreamSize
    - butil::IOBuf*::append
    - stream_id
    - ConsumeWindowSize
    - Init
    - release
    - has_http_request
    - H2Context*::Init
    - HeaderBegin
    - butil::IOBuf::IOBuf
    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:1608,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1614,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1615,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1616,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1623
      start: 1605
    functionDepth: 0
    functionLinenumber: 1605
    functionLinenumberEnd: 1623
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - http_request
    - value::size
    - request_attachment
    - has_http_request
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    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:1626,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1634,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1635,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1637,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1641,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1642,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1625
    functionDepth: 1
    functionLinenumber: 1625
    functionLinenumberEnd: 1647
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - butil::my_ip
    - request_attachment
    - has_http_request
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - HeaderEnd
    - butil::IOBuf*::empty
    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:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1659
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorCode
    - Controller*::release_http_response
    - swap
    - PercentEncode
    - Controller*::response_attachment
    - Controller*::ErrorText
    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:1662,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1664,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1671,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1672,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1675,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1661
    functionDepth: 1
    functionLinenumber: 1661
    functionLinenumberEnd: 1681
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - malloc
    - H2UnsentResponse*::push
    - get_common_strings
    - H2UnsentResponse::H2UnsentResponse
    - butil::string_printf
    - Controller*::http_response
    - HttpHeader*::status_code
    - HttpHeader*::content_type
    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:1685,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1687,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1689
      start: 1683
    functionDepth: 0
    functionLinenumber: 1683
    functionLinenumberEnd: 1689
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - ~Header
    - free
    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:1704,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1717,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1718,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1720,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1723,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1737,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1742,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1750,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1752,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1754,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1757,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1697
    functionDepth: 1
    functionLinenumber: 1697
    functionLinenumberEnd: 1759
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - butil::IOBufAppender::move_to
    - H2Context*::remote_settings
    - empty
    - Socket*::parsing_context
    - HeaderEnd
    - butil::IOBufAppender::IOBufAppender
    - SerializeFrameHead
    - SaveUint32
    - PackH2Message
    - MinusWindowSize
    - size
    - Encode
    - butil::IOBuf*::append
    - HeaderBegin
    - butil::string_printf
    - butil::IOBuf::IOBuf
    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:1764,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1764,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1767,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1774
      start: 1761
    functionDepth: 0
    functionLinenumber: 1761
    functionLinenumberEnd: 1774
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - value::size
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    - 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:1777,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1782,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1783,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1787,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1776
    functionDepth: 1
    functionLinenumber: 1776
    functionLinenumberEnd: 1791
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::my_ip
    - HeaderBegin
    - empty
    - HeaderEnd
    - butil::ToPrintable::ToPrintable
    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:1802,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1806,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1808,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1812,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1813,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1818,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: 1820
      start: 1793
    functionDepth: 1
    functionLinenumber: 1793
    functionLinenumberEnd: 1820
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::SetHeader
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - LOG
    - Controller*::SetFailed
    - H2UnsentRequest*::_sctx::set_correlation_id
    - HttpHeader*::GetHeader
    - dynamic_cast<H2UnsentRequest*>
    - Controller*::http_request
    - ControllerPrivateAccessor::get_stream_user_data
    - Authenticator*::GenerateCredential
    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:1823,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1823,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1825
      start: 1822
    functionDepth: 0
    functionLinenumber: 1822
    functionLinenumberEnd: 1825
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    - Socket*::parsing_context
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1829,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1830,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1834,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1836,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1827
    functionDepth: 0
    functionLinenumber: 1827
    functionLinenumberEnd: 1840
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - GetAgentSocket
    - 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: 1845
      start: 1842
    functionDepth: 0
    functionLinenumber: 1842
    functionLinenumberEnd: 1845
    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:1848,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1849
      start: 1847
    functionDepth: 0
    functionLinenumber: 1847
    functionLinenumberEnd: 1849
    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: 25
    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: 26
    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:
    - Socket*::Write
    - butil::IOBuf::IOBuf
    - butil::IOBuf::append
    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
    - brpc::policy::LoadUint16
    - static_cast<H2SettingsIdentifier>
    - LOG
    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::SaveUint32
    - brpc::policy::SaveUint16
    - static_cast<size_t>
    - butil::BaseIteratorRangeToNumberTraits::max
    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::SerializeFrameHead
    - brpc::policy::SaveUint32
    - brpc::policy::SerializeH2Settings
    - static_cast<size_t>
    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_add
    - butil::atomic<int64_t>*::fetch_sub
    - butil::atomic<int64_t>*::load
    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: 7
    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:
    - clear
    - begin
    - end
    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:
    - brpc::policy::H2Context::Init
    - init
    - LOG
    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:
    - begin
    - StreamMap::end
    - end
    - stream_id
    - std::vector<H2StreamContext*>*::size
    - StreamMap::begin
    - erase
    - swap
    - std::vector<H2StreamContext*>*::clear
    - std::vector<H2StreamContext*>*::push_back
    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:
    - bytes_left
    - LoadUint32
    - static_cast<int>
    - MakeParseError
    - LOG
    - MakeMessage
    - copy_and_forward
    - LoadUint8
    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:
    - LOG
    - H2ParseResult::stream_id
    - SerializeH2SettingsFrameAndWU
    - H2ParseResult::error
    - H2ParseResult::message
    - SerializeFrameHead
    - SaveUint32
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - H2ErrorToStatusCode
    - copy_and_forward
    - FindFrameHandler
    - H2ParseResult::is_ok
    - MakeParseError
    - MakeMessage
    - memcmp
    - brpc::policy::H2Context::ConsumeFrameHead
    - ParseResult::is_ok
    - WriteAck
    - brpc::policy::H2Context::is_server_side
    - H2StreamContext*::header
    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:
    - brpc::policy::H2Context::is_server_side
    - brpc::policy::H2Context::FindStream
    - LoadUint32
    - is_read_progressive
    - H2StreamContext::H2StreamContext
    - H2StreamContext*::Init
    - LOG
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - H2StreamContext::Init
    - H2StreamContext::OnHeaders
    - H2StreamContext*::OnHeaders
    - brpc::policy::H2Context::TryToInsertStream
    - MakeH2Error
    - LoadUint8
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - forward
    - CHECK_EQ
    - brpc::policy::H2StreamContext::OnEndStream
    - MakeH2Error
    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*::OnContinuation
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::is_client_side
    - MakeH2Message
    - LOG
    - H2StreamContext::Init
    - H2StreamContext::OnContinuation
    - MakeH2Error
    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:
    - butil::IOBufBytesIterator::bytes_left
    - brpc::policy::H2StreamContext::ConsumeHeaders
    - LOG
    - append_and_forward
    - MakeH2Message
    - pop_front
    - brpc::policy::H2StreamContext::OnEndStream
    - size
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2StreamContext::OnContinuation(\n    butil::IOBufBytesIterator&
      it, const H2FrameHead& frame_head)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:705,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:706,1
    - Dst: LoadUint8
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:709,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:712,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:713,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:716,1
    - Dst: H2StreamContext::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:722,1
    - Dst: H2StreamContext::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:723,1
    - Dst: brpc::policy::H2Context::DeferWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:724,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:726,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:727,1
    - Dst: H2StreamContext*::OnData
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:729,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 730
      start: 699
    functionDepth: 2
    functionLinenumber: 699
    functionLinenumberEnd: 730
    functionName: brpc::policy::H2Context::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::OnData
    - brpc::policy::H2Context::FindStream
    - brpc::policy::H2Context::DeferWindowUpdate
    - LOG
    - H2StreamContext::OnData
    - H2StreamContext::Init
    - H2StreamContext::ReleaseDeferredWindowUpdate
    - MakeH2Error
    - LoadUint8
    linkageType: ''
    returnType: H2ParseResult
    signature: "H2ParseResult H2Context::OnData(\n    butil::IOBufBytesIterator& it,
      const H2FrameHead& frame_head)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:736,1
    - Dst: append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:737,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:738,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:739,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:740,1
    - Dst: OnBody
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:741,1
    - Dst: body_too_large
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:742,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:743,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:745,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:746,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:751,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:752,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:753,1
    - Dst: VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:754,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:757,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:758,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:759,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:763,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:769,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:770,1
    - Dst: brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:773,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:774,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:775,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:776,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:777,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:778,1
    - Dst: brpc::policy::H2StreamContext::OnEndStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:783,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:785,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 4
    argNames:
    - ' it'
    - ' frame_head'
    - frag_size
    - pad_length
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    - uint32_t
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 786
      start: 732
    functionDepth: 2
    functionLinenumber: 732
    functionLinenumberEnd: 786
    functionName: brpc::policy::H2StreamContext::OnData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - body_too_large
    - forward
    - local_settings
    - SerializeFrameHead
    - append_and_forward
    - butil::IOBuf::backing_block
    - SaveUint32
    - butil::IOBuf::backing_block_num
    - fetch_add
    - butil::StringPiece::data
    - butil::StringPiece::size
    - VolatilePendingStreamSize
    - OnBody
    - WriteAck
    - MakeH2Error
    - MakeH2Message
    - static_cast<int64_t>
    - brpc::policy::H2StreamContext::ReleaseDeferredWindowUpdate
    - exchange
    - brpc::policy::H2StreamContext::OnEndStream
    - brpc::policy::H2StreamContext::stream_id
    - butil::IOBuf::IOBuf
    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:791,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:792,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:794,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:795,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:798,1
    - Dst: H2StreamContext*::OnResetStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:800,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 801
      start: 788
    functionDepth: 1
    functionLinenumber: 788
    functionLinenumberEnd: 801
    functionName: brpc::policy::H2Context::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::FindStream
    - static_cast<H2Error>
    - LOG
    - MakeH2Message
    - H2StreamContext*::OnResetStream
    - MakeH2Error
    - LoadUint32
    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:807,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:808,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:809,1
    - Dst: brpc::policy::H2StreamContext::SetState
      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: H2StreamState2Str
      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:813,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:814,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:817,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:819,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:820,1
    - Dst: is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:822,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: H2ErrorToStatusCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:823,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:824,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:828,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - h2_error
    - ' frame_head'
    argTypes:
    - H2Error
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 803
    functionDepth: 2
    functionLinenumber: 803
    functionLinenumberEnd: 830
    functionName: brpc::policy::H2StreamContext::OnResetStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamState2Str
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - H2StreamContext*::header
    - is_client_side
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - H2ErrorToStatusCode
    - MakeH2Error
    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:834,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:835,1
    - Dst: brpc::policy::H2StreamContext::state
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:836,1
    - Dst: brpc::policy::H2StreamContext::SetState
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:837,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:839,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:840,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:841,1
    - Dst: RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:844,1
    - Dst: brpc::policy::H2StreamContext::stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:846,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:847,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:849,1
    - Dst: OnMessageComplete
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:851,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:852,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 853
      start: 832
    functionDepth: 2
    functionLinenumber: 832
    functionLinenumberEnd: 853
    functionName: brpc::policy::H2StreamContext::OnEndStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - H2StreamState2Str
    - OnMessageComplete
    - LOG
    - MakeH2Message
    - brpc::policy::H2StreamContext::SetState
    - RemoveStreamAndDeferWU
    - CHECK_EQ
    - brpc::policy::H2StreamContext::stream_id
    - brpc::policy::H2StreamContext::state
    - MakeH2Error
    linkageType: ''
    returnType: H2ParseResult
    signature: H2ParseResult H2StreamContext::OnEndStream()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:863,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:864,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:868,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:870,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:873,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:884,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:885,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:886,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:889,1
    - Dst: ParseH2Settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:894,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:895,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:896,1
    - Dst: static_cast<int64_t>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:900,1
    - Dst: begin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:908,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:909,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:910,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:911,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:917,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:918,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:919,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:920,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:922,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 40
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 923
      start: 855
    functionDepth: 1
    functionLinenumber: 855
    functionLinenumberEnd: 923
    functionName: brpc::policy::H2Context::OnSettings
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - begin
    - SerializeFrameHead
    - end
    - fetch_sub
    - AddWindowSize
    - LOG
    - MakeH2Message
    - static_cast<int64_t>
    - ParseH2Settings
    - WriteAck
    - MakeH2Error
    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:927,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:928,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 925
    functionDepth: 1
    functionLinenumber: 925
    functionLinenumberEnd: 929
    functionName: brpc::policy::H2Context::OnPriority
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:933,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:934,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 935
      start: 931
    functionDepth: 1
    functionLinenumber: 931
    functionLinenumberEnd: 935
    functionName: brpc::policy::H2Context::OnPushPromise
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - MakeH2Error
    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:940,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:941,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:944,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:945,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:948,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:952,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:953,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:954,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:955,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:956,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:958,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 959
      start: 937
    functionDepth: 1
    functionLinenumber: 937
    functionLinenumberEnd: 959
    functionName: brpc::policy::H2Context::OnPing
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeFrameHead
    - LOG
    - MakeH2Message
    - WriteAck
    - MakeH2Error
    - copy_and_forward
    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:962,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:962,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - void_arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 964
      start: 961
    functionDepth: 12
    functionLinenumber: 961
    functionLinenumberEnd: 964
    functionName: brpc::policy::ProcessHttpResponseWrapper
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ProcessHttpResponse
    - static_cast<InputMessageBase*>
    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:969,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:970,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:973,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:977,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:978,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:982,1
    - Dst: static_cast<H2Error>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:983,1
    - Dst: forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:985,1
    - Dst: brpc::policy::H2Context::is_client_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:988,1
    - Dst: SetLogOff
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:990,1
    - Dst: brpc::policy::H2Context::RemoveGoAwayStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:993,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:994,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:995,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:997,1
    - Dst: H2StreamContext*::header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:999,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1001,1
    - Dst: keytable_pool
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1006,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1007,1
    - Dst: static_cast<InputMessageBase*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1008,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1010,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1013,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 2
    argNames:
    - ' it'
    - ' h'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1015
      start: 966
    functionDepth: 4
    functionLinenumber: 966
    functionLinenumberEnd: 1015
    functionName: brpc::policy::H2Context::OnGoAway
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2Context::RemoveGoAwayStreams
    - static_cast<H2Error>
    - static_cast<int>
    - keytable_pool
    - LOG
    - brpc::policy::H2Context::is_client_side
    - SetLogOff
    - MakeH2Message
    - H2StreamContext*::header
    - std::vector::size
    - forward
    - CHECK_EQ
    - std::vector::empty
    - static_cast<InputMessageBase*>
    - bthread_start_background
    - MakeH2Error
    - 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:1020,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1021,1
    - Dst: LoadUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1025,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1026,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1029,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1030,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1031,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1033,1
    - Dst: brpc::policy::H2Context::FindStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1035,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1038,1
    - Dst: AddWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1040,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1041,1
    - Dst: H2StreamContext*::_remote_window_left::load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1042,1
    - Dst: MakeH2Error
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1043,1
    - Dst: MakeH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1045,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 2
    argNames:
    - ' it'
    - ' frame_head'
    argTypes:
    - butil::IOBufBytesIterator
    - H2FrameHead
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1047
      start: 1017
    functionDepth: 1
    functionLinenumber: 1017
    functionLinenumberEnd: 1047
    functionName: brpc::policy::H2Context::OnWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2StreamContext*::_remote_window_left::load
    - brpc::policy::H2Context::FindStream
    - AddWindowSize
    - LOG
    - MakeH2Message
    - MakeH2Error
    - 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:1054,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1058,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1060,1
    - Dst: brpc::policy::H2Context::Describe
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1066,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1070,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1071,1
    - Dst: brpc::policy::H2Context::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1074,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1049
    functionDepth: 1
    functionLinenumber: 1049
    functionLinenumberEnd: 1078
    functionName: brpc::policy::H2Context::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - load
    - BAIDU_SCOPED_LOCK
    - H2ConnectionState2Str
    - brpc::policy::H2Context::Describe
    - brpc::policy::H2Context::VolatilePendingStreamSize
    - 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:1081,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1084,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1085
      start: 1080
    functionDepth: 0
    functionLinenumber: 1080
    functionLinenumberEnd: 1085
    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:1091,1
    - Dst: local_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1092,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1094,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1097,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1098,1
    - Dst: WriteAck
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1099,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1100,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1104
      start: 1087
    functionDepth: 1
    functionLinenumber: 1087
    functionLinenumberEnd: 1104
    functionName: brpc::policy::H2Context::DeferWindowUpdate
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - local_settings
    - SerializeFrameHead
    - fetch_add
    - LOG
    - SaveUint32
    - exchange
    - WriteAck
    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:1117,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1117,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1119,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1120,1
    - Dst: static_cast<const Server*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1122,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1123,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1124,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1126,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1127,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1129,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1132,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1133,1
    - Dst: H2Context*::Consume
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1135,1
    - Dst: ParseResult::is_ok
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1136,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1137,1
    - Dst: ParseResult::message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1138,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1143,1
    - Dst: H2Context*::ClearAbandonedStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1144,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: 1147
      start: 1112
    functionDepth: 2
    functionLinenumber: 1112
    functionLinenumberEnd: 1147
    functionName: brpc::policy::ParseH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 16
    functionsReached:
    - butil::IOBufBytesIterator::bytes_left
    - H2Context*::ClearAbandonedStreams
    - static_cast<const Server*>
    - H2Context*::Consume
    - static_cast<H2Context*>
    - MakeParseError
    - LOG
    - ParseResult::is_ok
    - H2Context::H2Context
    - H2Context*::Init
    - Socket*::parsing_context
    - ParseResult::message
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    - Socket*::initialize_parsing_context
    - butil::IOBuf*::empty
    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:1151,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - stream_id
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1152
      start: 1149
    functionDepth: 0
    functionLinenumber: 1149
    functionLinenumberEnd: 1152
    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:1156,1
    - Dst: back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1158,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1159,1
    - Dst: brpc::policy::H2Context::RemoveStreamAndDeferWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1160,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1164,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1166
      start: 1154
    functionDepth: 2
    functionLinenumber: 1154
    functionLinenumberEnd: 1166
    functionName: brpc::policy::H2Context::ClearAbandonedStreams
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - back
    - empty
    - brpc::policy::H2Context::RemoveStreamAndDeferWU
    - std::unique_lock::unlock
    - std::unique_lock::lock
    linkageType: ''
    returnType: void
    signature: void H2Context::ClearAbandonedStreams()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1188,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - conn_ctx
    - stream_id
    argTypes:
    - H2Context*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1190
      start: 1185
    functionDepth: 0
    functionLinenumber: 1185
    functionLinenumberEnd: 1190
    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:1194,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1196
      start: 1192
    functionDepth: 0
    functionLinenumber: 1192
    functionLinenumberEnd: 1196
    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:1202,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1203,1
    - Dst: H2StreamState2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1204,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - state
    argTypes:
    - H2StreamState
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1205
      start: 1199
    functionDepth: 1
    functionLinenumber: 1199
    functionLinenumberEnd: 1205
    functionName: brpc::policy::H2StreamContext::SetState
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 12
    functionsReached:
    - H2StreamState2Str
    - brpc::policy::H2StreamContext::stream_id
    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:1215,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1218,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1221,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1223,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1224,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - size
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1228
      start: 1208
    functionDepth: 1
    functionLinenumber: 1208
    functionLinenumberEnd: 1228
    functionName: brpc::policy::H2StreamContext::ConsumeWindowSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - load
    - fetch_sub
    - fetch_add
    - LOG
    - MinusWindowSize
    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:1231,1
    - Dst: header
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1232,1
    - Dst: Decode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1235,1
    - Dst: HPacker::Header::name::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1242,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1247,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1249,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1253,1
    - Dst: Str2HttpMethod
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1257,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1260,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1264,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1267,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1271,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1273,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1274,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: HPacker::Header::value::c_str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1279,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1289,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1293,1
    - Dst: set_content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1294,1
    - Dst: AppendHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1296,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1300,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1302,1
    - Dst: brpc::policy::H2StreamContext::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1303,1
    - Dst: is_server_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1304,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1305,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1307,1
    CyclomaticComplexity: 24
    EdgeCount: 24
    ICount: 73
    argCount: 1
    argNames:
    - ' it'
    argTypes:
    - butil::IOBufBytesIterator
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1315
      start: 1230
    functionDepth: 1
    functionLinenumber: 1230
    functionLinenumberEnd: 1315
    functionName: brpc::policy::H2StreamContext::ConsumeHeaders
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 8
    functionsReached:
    - header
    - strcmp
    - LOG
    - brpc::policy::H2StreamContext::_vmsgbuilder::get
    - AppendHeader
    - set_status_code
    - set_method
    - strtol
    - HPacker::Header::name::c_str
    - hpacker
    - is_server_side
    - Decode
    - set_content_type
    - butil::my_ip
    - Str2HttpMethod
    - brpc::policy::H2StreamContext::_vmsgbuilder::reset
    - butil::IOBufBuilder::IOBufBuilder
    - uri
    - HPacker::Header::value::c_str
    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:1325,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1328,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1329,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1334,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1335,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1336,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1339,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1340,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1341,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1344,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1345,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1347,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1351,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1352,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1353,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1356,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1359,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1360,1
    - Dst: butil::IOBufBytesIterator::bytes_left
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1361,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1362,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1368,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1369,1
    - Dst: butil::IOBufBytesIterator::append_and_forward
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1370,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1373,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1375,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1378,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1379,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1380,1
    - Dst: H2Context*::ReleaseDeferredWindowUpdate
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1382,1
    - Dst: brpc::policy::SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1385,1
    - Dst: brpc::policy::SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1386,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1387,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: 1389
      start: 1319
    functionDepth: 1
    functionLinenumber: 1319
    functionLinenumberEnd: 1389
    functionName: brpc::policy::PackH2Message
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::policy::SerializeFrameHead
    - butil::IOBufBytesIterator::bytes_left
    - butil::IOBufBytesIterator::append_and_forward
    - H2Context*::remote_settings
    - H2Context*::ReleaseDeferredWindowUpdate
    - butil::IOBuf::Movable
    - brpc::policy::SaveUint32
    - cutn
    - empty
    - size
    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:1392,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1393,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1394,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1395,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1396,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1397,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1399,1
    - Dst: HeaderCount
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1400,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: H2UnsentRequest::H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1407,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1409,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1410,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1411,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1412,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: method
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1414,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1417,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1418,1
    - Dst: Controller*::is_ssl
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1419,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1422,1
    - Dst: uri
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1424,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1426,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1428,1
    - Dst: uri
      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:1431,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1432,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1433,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1434,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: host
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: port
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1436,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1438,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: Controller*::remote_side
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1439,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1443,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1446,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1449,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1457,1
    - Dst: H2UnsentRequest*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1458,1
    - Dst: std::string*::reserve
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1459,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1460,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1461,1
    - Dst: H2UnsentRequest*::_sctx::reset
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: Controller*::is_response_read_progressively
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    - Dst: H2StreamContext::H2StreamContext
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1463,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 45
    argCount: 1
    argNames:
    - c
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1465
      start: 1391
    functionDepth: 1
    functionLinenumber: 1391
    functionLinenumberEnd: 1465
    functionName: brpc::policy::H2UnsentRequest::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 10
    functionsReached:
    - H2UnsentRequest::H2UnsentRequest
    - H2UnsentRequest*::push
    - Controller*::remote_side
    - empty
    - std::string*::empty
    - H2UnsentRequest*::_sctx::reset
    - malloc
    - butil::Base64Encode
    - Controller*::is_response_read_progressively
    - HttpMethod2Str
    - H2StreamContext::H2StreamContext
    - host
    - butil::endpoint2str
    - Controller*::http_request
    - HeaderCount
    - content_type
    - std::string*::reserve
    - port
    - get_common_strings
    - GetHeader
    - std::string*::append
    - uri
    - method
    - Controller*::is_ssl
    - butil::string_printf
    - 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:1469,1
    - Dst: brpc::policy::H2UnsentRequest::~H2UnsentRequest
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1471,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1473
      start: 1467
    functionDepth: 0
    functionLinenumber: 1467
    functionLinenumberEnd: 1473
    functionName: brpc::policy::H2UnsentRequest::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::H2UnsentRequest::~H2UnsentRequest
    - ~Header
    - free
    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: 1476
      start: 1476
    functionDepth: 0
    functionLinenumber: 1476
    functionLinenumberEnd: 1476
    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:1477,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1477
      start: 1477
    functionDepth: 0
    functionLinenumber: 1477
    functionLinenumberEnd: 1477
    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:1489,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1493,1
    - Dst: H2Context*::AddAbandonedStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1494,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 3
    argNames:
    - ' sending_sock'
    - cntl
    - error_code
    argTypes:
    - SocketUniquePtr
    - Controller*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1497
      start: 1483
    functionDepth: 0
    functionLinenumber: 1483
    functionLinenumberEnd: 1497
    functionName: brpc::policy::H2UnsentRequest::DestroyStreamUserData
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - parsing_context
    - static_cast<H2Context*>
    - H2Context*::AddAbandonedStream
    - CHECK_EQ
    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:1512,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1514,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1518,1
    - Dst: H2Context::H2Context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1519,1
    - Dst: H2Context*::Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1520,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1522,1
    - Dst: Socket*::initialize_parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1524,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1527,1
    - Dst: SerializeH2SettingsFrameAndWU
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1532,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1534,1
    - Dst: H2Context*::VolatilePendingStreamSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1538,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1539,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1546,1
    - Dst: H2Context*::AllocateClientStreamId
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1549,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1556,1
    - Dst: Init
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1559,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1561,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1562,1
    - Dst: ConsumeWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1563,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1564,1
    - Dst: H2Context*::TryToInsertStream
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: get
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1568,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1570,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1572,1
    - Dst: stream_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1574,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1576,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1578,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1579,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1583,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1588,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1590,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1591,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1592,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1593,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1595,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1598,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1599,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1600,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1601,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1602,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 55
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1603
      start: 1505
    functionDepth: 2
    functionLinenumber: 1505
    functionLinenumberEnd: 1603
    functionName: brpc::policy::H2UnsentRequest::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - request_attachment
    - H2Context*::remote_settings
    - H2Context*::TryToInsertStream
    - butil::IOBufAppender::move_to
    - H2Context::H2Context
    - Socket*::parsing_context
    - HeaderEnd
    - BuiltinServiceTest::TestStatus
    - H2Context*::AllocateClientStreamId
    - butil::IOBufAppender::IOBufAppender
    - SerializeH2SettingsFrameAndWU
    - CHECK
    - PackH2Message
    - get
    - http_request
    - Socket*::CreatedByConnect
    - Encode
    - Socket*::initialize_parsing_context
    - H2Context*::VolatilePendingStreamSize
    - butil::IOBuf*::append
    - stream_id
    - ConsumeWindowSize
    - Init
    - release
    - has_http_request
    - H2Context*::Init
    - HeaderBegin
    - butil::IOBuf::IOBuf
    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:1608,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1608,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1614,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1615,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1616,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1617,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1618,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1621,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1623
      start: 1605
    functionDepth: 0
    functionLinenumber: 1605
    functionLinenumberEnd: 1623
    functionName: brpc::policy::H2UnsentRequest::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - http_request
    - value::size
    - request_attachment
    - has_http_request
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    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:1626,1
    - Dst: has_http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1634,1
    - Dst: http_request
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1635,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1636,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1637,1
    - Dst: request_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1641,1
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1642,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1645,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 17
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1647
      start: 1625
    functionDepth: 1
    functionLinenumber: 1625
    functionLinenumberEnd: 1647
    functionName: brpc::policy::H2UnsentRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - http_request
    - butil::my_ip
    - request_attachment
    - has_http_request
    - HeaderBegin
    - butil::ToPrintable::ToPrintable
    - HeaderEnd
    - butil::IOBuf*::empty
    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:1652,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1654,1
    - Dst: ErrorCodeToGrpcStatus
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1656,1
    - Dst: PercentEncode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1657,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1659
      start: 1649
    functionDepth: 1
    functionLinenumber: 1649
    functionLinenumberEnd: 1659
    functionName: brpc::policy::H2UnsentResponse::H2UnsentResponse
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - ErrorCodeToGrpcStatus
    - Controller*::ErrorCode
    - Controller*::release_http_response
    - swap
    - PercentEncode
    - Controller*::response_attachment
    - Controller*::ErrorText
    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:1662,1
    - Dst: get_common_strings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1663,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1664,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: H2UnsentResponse::H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1669,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1671,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1672,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1674,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1675,1
    - Dst: H2UnsentResponse*::push
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1678,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 3
    argNames:
    - c
    - stream_id
    - is_grpc
    argTypes:
    - Controller*
    - int
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1681
      start: 1661
    functionDepth: 1
    functionLinenumber: 1661
    functionLinenumberEnd: 1681
    functionName: brpc::policy::H2UnsentResponse::New
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 7
    functionsReached:
    - malloc
    - H2UnsentResponse*::push
    - get_common_strings
    - H2UnsentResponse::H2UnsentResponse
    - butil::string_printf
    - Controller*::http_response
    - HttpHeader*::status_code
    - HttpHeader*::content_type
    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:1685,1
    - Dst: brpc::policy::H2UnsentResponse::~H2UnsentResponse
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1687,1
    - Dst: free
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1688,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1689
      start: 1683
    functionDepth: 0
    functionLinenumber: 1683
    functionLinenumberEnd: 1689
    functionName: brpc::policy::H2UnsentResponse::Destroy
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::H2UnsentResponse::~H2UnsentResponse
    - ~Header
    - free
    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:1704,1
    - Dst: static_cast<H2Context*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1706,1
    - Dst: MinusWindowSize
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1715,1
    - Dst: SerializeFrameHead
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1717,1
    - Dst: SaveUint32
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1718,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1719,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1720,1
    - Dst: H2Context*::hpacker
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1723,1
    - Dst: butil::IOBufAppender::IOBufAppender
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1724,1
    - Dst: H2Context*::remote_settings
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1728,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1733,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1736,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1737,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1739,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1742,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1743,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1745,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1748,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1749,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1750,1
    - Dst: Encode
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1752,1
    - Dst: butil::IOBufAppender::move_to
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1754,1
    - Dst: PackH2Message
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1757,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1758,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 2
    argNames:
    - out
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1759
      start: 1697
    functionDepth: 1
    functionLinenumber: 1697
    functionLinenumberEnd: 1759
    functionName: brpc::policy::H2UnsentResponse::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::hpacker
    - butil::Status::OK
    - static_cast<H2Context*>
    - butil::IOBufAppender::move_to
    - H2Context*::remote_settings
    - empty
    - Socket*::parsing_context
    - HeaderEnd
    - butil::IOBufAppender::IOBufAppender
    - SerializeFrameHead
    - SaveUint32
    - PackH2Message
    - MinusWindowSize
    - size
    - Encode
    - butil::IOBuf*::append
    - HeaderBegin
    - butil::string_printf
    - butil::IOBuf::IOBuf
    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:1764,1
    - Dst: value::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1764,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1767,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1768,1
    - Dst: HttpHeader::HeaderIterator::first::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: HttpHeader::HeaderIterator::second::size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1769,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1772,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1774
      start: 1761
    functionDepth: 0
    functionLinenumber: 1761
    functionLinenumberEnd: 1774
    functionName: brpc::policy::H2UnsentResponse::EstimatedByteSize
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader::HeaderIterator::first::size
    - value::size
    - HeaderEnd
    - HeaderBegin
    - HttpHeader::HeaderIterator::second::size
    - name::size
    - 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:1777,1
    - Dst: HeaderBegin
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1782,1
    - Dst: HeaderEnd
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1783,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1787,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1790,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1791
      start: 1776
    functionDepth: 1
    functionLinenumber: 1776
    functionLinenumberEnd: 1791
    functionName: brpc::policy::H2UnsentResponse::Print
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::my_ip
    - HeaderBegin
    - empty
    - HeaderEnd
    - butil::ToPrintable::ToPrintable
    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:1802,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1803,1
    - Dst: Authenticator*::GenerateCredential
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1805,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1806,1
    - Dst: HttpHeader*::SetHeader
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1808,1
    - Dst: dynamic_cast<H2UnsentRequest*>
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: ControllerPrivateAccessor::get_stream_user_data
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1811,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1812,1
    - Dst: H2UnsentRequest*::AddRefManually
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1813,1
    - Dst: H2UnsentRequest*::_sctx::set_correlation_id
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1818,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: 1820
      start: 1793
    functionDepth: 1
    functionLinenumber: 1793
    functionLinenumberEnd: 1820
    functionName: brpc::policy::PackH2Request
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 6
    functionsReached:
    - HttpHeader*::SetHeader
    - H2UnsentRequest*::AddRefManually
    - CHECK
    - LOG
    - Controller*::SetFailed
    - H2UnsentRequest*::_sctx::set_correlation_id
    - HttpHeader*::GetHeader
    - dynamic_cast<H2UnsentRequest*>
    - Controller*::http_request
    - ControllerPrivateAccessor::get_stream_user_data
    - Authenticator*::GenerateCredential
    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:1823,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1823,1
    - Dst: H2Context*::RunOutStreams
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1824,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1825
      start: 1822
    functionDepth: 0
    functionLinenumber: 1822
    functionLinenumberEnd: 1825
    functionName: brpc::policy::IsH2SocketValid
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - H2Context*::RunOutStreams
    - static_cast<H2Context*>
    - Socket*::parsing_context
    linkageType: ''
    returnType: bool
    signature: bool IsH2SocketValid(Socket* s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: GetAgentSocket
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1829,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1830,1
    - Dst: brpc::policy::H2UnsentRequest::New
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1834,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp:1836,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - inout
    - cntl
    argTypes:
    - SocketUniquePtr*
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1840
      start: 1827
    functionDepth: 0
    functionLinenumber: 1827
    functionLinenumberEnd: 1840
    functionName: brpc::policy::H2GlobalStreamCreator::OnCreatingStream
    functionSourceFile: /src/brpc/src/brpc/policy/http2_rpc_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::SetFailed
    - GetAgentSocket
    - 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: 1845
      start: 1842
    functionDepth: 0
    functionLinenumber: 1842
    functionLinenumberEnd: 1845
    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:1848,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1849
      start: 1847
    functionDepth: 0
    functionLinenumber: 1847
    functionLinenumberEnd: 1849
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyCompress
    - SerializeToZeroCopyStream
    - GetDescriptor
    - LOG
    - butil::IOBuf::size
    - SerializeTo
    - butil::IOBuf::IOBuf
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::GetDescriptor
    - size
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyCompress
    - SerializeToZeroCopyStream
    - GetDescriptor
    - LOG
    - butil::IOBuf::size
    - SerializeTo
    - butil::IOBuf::IOBuf
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::GetDescriptor
    - size
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyCompress
    - SerializeToZeroCopyStream
    - GetDescriptor
    - LOG
    - butil::IOBuf::size
    - SerializeTo
    - butil::IOBuf::IOBuf
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::GetDescriptor
    - size
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyCompress
    - SerializeToZeroCopyStream
    - GetDescriptor
    - LOG
    - butil::IOBuf::size
    - SerializeTo
    - butil::IOBuf::IOBuf
    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:
    - pbrpcframework::get_prototype_by_method_descriptor
    - brpc::policy::SnappyDecompress
    - google::protobuf::Message*::ParseFromZeroCopyStream
    - LOG
    - DeserializeFrom
    - butil::IOBuf::IOBuf
    - google::protobuf::Message*::GetDescriptor
    - size
    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:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:59,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 3
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - reinterpret_cast<char*>
    - ControllerPrivateAccessor
    - brpc::policy::ComputeCrc32c
    - butil::HostToNet32
    - butil::crc32c::Mask
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:64,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 63
    functionDepth: 3
    functionLinenumber: 63
    functionLinenumberEnd: 72
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - butil::NetToHost32
    - butil::crc32c::Unmask
    - const_cast<Controller*>
    - ControllerPrivateAccessor
    - reinterpret_cast<const uint32_t*>
    - brpc::policy::ComputeCrc32c
    - data
    - CHECK_EQ
    - size
    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:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:59,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 3
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - reinterpret_cast<char*>
    - ControllerPrivateAccessor
    - brpc::policy::ComputeCrc32c
    - butil::HostToNet32
    - butil::crc32c::Mask
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:64,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 63
    functionDepth: 3
    functionLinenumber: 63
    functionLinenumberEnd: 72
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - butil::NetToHost32
    - butil::crc32c::Unmask
    - const_cast<Controller*>
    - ControllerPrivateAccessor
    - reinterpret_cast<const uint32_t*>
    - brpc::policy::ComputeCrc32c
    - data
    - CHECK_EQ
    - size
    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:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 4
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 5
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 4
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:59,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 3
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - reinterpret_cast<char*>
    - ControllerPrivateAccessor
    - brpc::policy::ComputeCrc32c
    - butil::HostToNet32
    - butil::crc32c::Mask
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:64,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 63
    functionDepth: 3
    functionLinenumber: 63
    functionLinenumberEnd: 72
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - butil::NetToHost32
    - butil::crc32c::Unmask
    - const_cast<Controller*>
    - ControllerPrivateAccessor
    - reinterpret_cast<const uint32_t*>
    - brpc::policy::ComputeCrc32c
    - data
    - CHECK_EQ
    - size
    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:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 6
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBufAsZeroCopyInputStream::Next
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:37,1
    - Dst: butil::crc32c::Extend
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:38,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - crc
    - ' buf'
    argTypes:
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 41
    functionName: brpc::policy::ExtendCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 7
    functionsReached:
    - butil::IOBufAsZeroCopyInputStream::Next
    - static_cast<const char*>
    - butil::crc32c::Extend
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ExtendCrc32c(uint32_t crc, const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:46,1
    - Dst: brpc::policy::ExtendCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:48,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 45
    functionDepth: 2
    functionLinenumber: 45
    functionLinenumberEnd: 51
    functionName: brpc::policy::ComputeCrc32c
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 6
    functionsReached:
    - brpc::policy::ExtendCrc32c
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t ComputeCrc32c(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:56,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: butil::crc32c::Mask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:58,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:59,1
    - Dst: reinterpret_cast<char*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:60,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 3
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: brpc::policy::Crc32cCompute
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - reinterpret_cast<char*>
    - ControllerPrivateAccessor
    - brpc::policy::ComputeCrc32c
    - butil::HostToNet32
    - butil::crc32c::Mask
    linkageType: ''
    returnType: void
    signature: void Crc32cCompute(const ChecksumIn& in)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::ComputeCrc32c
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:64,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: const_cast<Controller*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:65,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:67,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:68,1
    - Dst: butil::crc32c::Unmask
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/policy/crc32c_checksum.cpp:69,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 1
    argNames:
    - ' in'
    argTypes:
    - ChecksumIn
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 63
    functionDepth: 3
    functionLinenumber: 63
    functionLinenumberEnd: 72
    functionName: brpc::policy::Crc32cVerify
    functionSourceFile: /src/brpc/src/brpc/policy/crc32c_checksum.cpp
    functionUses: 10
    functionsReached:
    - butil::NetToHost32
    - butil::crc32c::Unmask
    - const_cast<Controller*>
    - ControllerPrivateAccessor
    - reinterpret_cast<const uint32_t*>
    - brpc::policy::ComputeCrc32c
    - data
    - CHECK_EQ
    - size
    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:52,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:53,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:65,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:69,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:76,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:86,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:94,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:109,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,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:120,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:123,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:124,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      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:128,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:129,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:133,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:138,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:139,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:147,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      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: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:167,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:168,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 47
    functionDepth: 2
    functionLinenumber: 47
    functionLinenumberEnd: 169
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::is_integral
    - pop_back
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - std::string::append
    - pop_front
    - mcpack2pb::InputStream::popn
    - body::size
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - NsheadMeta*::set_correlation_id
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::type
    - size
    - const_cast<butil::IOBuf&>
    - NsheadMeta*::set_full_method_name
    - mcpack2pb::unbox
    - Controller*::SetFailed
    - mcpack2pb::ObjectIterator::field_count
    - std::string::reserve
    - 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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:178,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,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: 185
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 185
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - body::size
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_body
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:192,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:194,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:203,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:206,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 208
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::add_int64
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::Serializer::add_string
    - Controller*::ErrorCode
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::end_object
    - correlation_id
    - Controller*::ErrorText
    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:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:215,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:220,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:223,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:236,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:237,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:245,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:249,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:255,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::Serializer::begin_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:259,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      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_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:266,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:273,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:274,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: 276
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 276
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - AppendError
    - LOG
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::begin_object
    - Controller*::idl_result
    - NsheadMessage*::body::clear
    - Controller*::response_compress_type
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - correlation_id
    - mcpack2pb::Serializer::end_array
    - Controller*::Failed
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:288,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:292,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:305,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:309,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:315,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:324,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:336,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:337,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:345,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:350,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:351,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:357,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:361,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:365,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:366,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:382,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,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:390,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:392,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:403,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:408,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:409,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:413,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:419,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:427,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:428,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:436,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:437,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: 440
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 440
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::is_integral
    - mcpack2pb::ObjectIterator::value::as_string
    - butil::EnsureString
    - pop_back
    - mcpack2pb::MessageHandler::parse_body
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - pop_front
    - mcpack2pb::InputStream::popn
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::ObjectIterator::value::type
    - size
    - std::string::c_str
    - mcpack2pb::unbox
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - Controller*::SetFailed
    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:443,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:445,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:453,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:462,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 442
    functionDepth: 3
    functionLinenumber: 442
    functionLinenumberEnd: 471
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - brpc::policy::ParseResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:476,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:478,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:482,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:485,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:488,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:494,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:499,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:502,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:508,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:512,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:514,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:516,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:519,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:525,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: 527
      start: 473
    functionDepth: 2
    functionLinenumber: 473
    functionLinenumberEnd: 527
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - Controller*::call_id
    - google::protobuf::Message*::GetDescriptor
    - Controller*::method
    - mcpack2pb::Serializer::begin_object
    - Controller*::request_compress_type
    - Controller*::connection_type
    - mcpack2pb::Serializer::add_bool
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::end_array
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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:531,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: 532
      start: 529
    functionDepth: 3
    functionLinenumber: 529
    functionLinenumberEnd: 532
    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:536,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: 537
      start: 534
    functionDepth: 3
    functionLinenumber: 534
    functionLinenumberEnd: 537
    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:547,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:548,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:553,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:557,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:559,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:561,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:569,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: 570
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 570
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:52,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:53,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:65,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:69,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:76,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:86,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:94,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:109,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,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:120,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:123,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:124,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      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:128,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:129,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:133,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:138,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:139,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:147,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      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: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:167,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:168,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 47
    functionDepth: 2
    functionLinenumber: 47
    functionLinenumberEnd: 169
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::is_integral
    - pop_back
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - std::string::append
    - pop_front
    - mcpack2pb::InputStream::popn
    - body::size
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - NsheadMeta*::set_correlation_id
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::type
    - size
    - const_cast<butil::IOBuf&>
    - NsheadMeta*::set_full_method_name
    - mcpack2pb::unbox
    - Controller*::SetFailed
    - mcpack2pb::ObjectIterator::field_count
    - std::string::reserve
    - 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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:178,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,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: 185
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 185
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - body::size
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_body
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:192,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:194,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:203,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:206,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 208
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::add_int64
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::Serializer::add_string
    - Controller*::ErrorCode
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::end_object
    - correlation_id
    - Controller*::ErrorText
    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:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:215,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:220,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:223,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:236,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:237,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:245,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:249,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:255,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::Serializer::begin_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:259,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      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_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:266,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:273,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:274,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: 276
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 276
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - AppendError
    - LOG
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::begin_object
    - Controller*::idl_result
    - NsheadMessage*::body::clear
    - Controller*::response_compress_type
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - correlation_id
    - mcpack2pb::Serializer::end_array
    - Controller*::Failed
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:288,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:292,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:305,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:309,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:315,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:324,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:336,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:337,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:345,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:350,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:351,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:357,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:361,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:365,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:366,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:382,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,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:390,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:392,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:403,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:408,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:409,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:413,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:419,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:427,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:428,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:436,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:437,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: 440
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 440
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 1
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::is_integral
    - mcpack2pb::ObjectIterator::value::as_string
    - butil::EnsureString
    - pop_back
    - mcpack2pb::MessageHandler::parse_body
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - pop_front
    - mcpack2pb::InputStream::popn
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::ObjectIterator::value::type
    - size
    - std::string::c_str
    - mcpack2pb::unbox
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - Controller*::SetFailed
    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:443,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:445,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:453,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:462,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 442
    functionDepth: 3
    functionLinenumber: 442
    functionLinenumberEnd: 471
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - brpc::policy::ParseResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:476,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:478,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:482,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:485,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:488,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:494,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:499,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:502,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:508,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:512,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:514,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:516,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:519,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:525,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: 527
      start: 473
    functionDepth: 2
    functionLinenumber: 473
    functionLinenumberEnd: 527
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::EnsureString
    - Controller*::call_id
    - google::protobuf::Message*::GetDescriptor
    - Controller*::method
    - mcpack2pb::Serializer::begin_object
    - Controller*::request_compress_type
    - Controller*::connection_type
    - mcpack2pb::Serializer::add_bool
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::end_array
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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:531,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: 532
      start: 529
    functionDepth: 3
    functionLinenumber: 529
    functionLinenumberEnd: 532
    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:536,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: 537
      start: 534
    functionDepth: 3
    functionLinenumber: 534
    functionLinenumberEnd: 537
    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:547,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:548,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:553,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:557,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:559,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:561,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:569,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: 570
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 570
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:52,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:53,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:65,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:69,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:76,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:86,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:94,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:109,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,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:120,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:123,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:124,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      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:128,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:129,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:133,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:138,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:139,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:147,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      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: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:167,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:168,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 47
    functionDepth: 2
    functionLinenumber: 47
    functionLinenumberEnd: 169
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::is_integral
    - pop_back
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - std::string::append
    - pop_front
    - mcpack2pb::InputStream::popn
    - body::size
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - NsheadMeta*::set_correlation_id
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::type
    - size
    - const_cast<butil::IOBuf&>
    - NsheadMeta*::set_full_method_name
    - mcpack2pb::unbox
    - Controller*::SetFailed
    - mcpack2pb::ObjectIterator::field_count
    - std::string::reserve
    - 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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:178,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,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: 185
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 185
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - body::size
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_body
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:192,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:194,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:203,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:206,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 208
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::add_int64
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::Serializer::add_string
    - Controller*::ErrorCode
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::end_object
    - correlation_id
    - Controller*::ErrorText
    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:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:215,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:220,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:223,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:236,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:237,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:245,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:249,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:255,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::Serializer::begin_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:259,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      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_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:266,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:273,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:274,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: 276
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 276
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - AppendError
    - LOG
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::begin_object
    - Controller*::idl_result
    - NsheadMessage*::body::clear
    - Controller*::response_compress_type
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - correlation_id
    - mcpack2pb::Serializer::end_array
    - Controller*::Failed
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:288,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:292,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:305,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:309,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:315,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:324,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:336,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:337,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:345,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:350,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:351,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:357,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:361,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:365,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:366,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:382,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,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:390,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:392,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:403,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:408,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:409,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:413,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:419,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:427,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:428,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:436,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:437,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: 440
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 440
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 2
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::is_integral
    - mcpack2pb::ObjectIterator::value::as_string
    - butil::EnsureString
    - pop_back
    - mcpack2pb::MessageHandler::parse_body
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - pop_front
    - mcpack2pb::InputStream::popn
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::ObjectIterator::value::type
    - size
    - std::string::c_str
    - mcpack2pb::unbox
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - Controller*::SetFailed
    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:443,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:445,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:453,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:462,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 442
    functionDepth: 3
    functionLinenumber: 442
    functionLinenumberEnd: 471
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - brpc::policy::ParseResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:476,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:478,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:482,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:485,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:488,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:494,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:499,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:502,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:508,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:512,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:514,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:516,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:519,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:525,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: 527
      start: 473
    functionDepth: 2
    functionLinenumber: 473
    functionLinenumberEnd: 527
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::EnsureString
    - Controller*::call_id
    - google::protobuf::Message*::GetDescriptor
    - Controller*::method
    - mcpack2pb::Serializer::begin_object
    - Controller*::request_compress_type
    - Controller*::connection_type
    - mcpack2pb::Serializer::add_bool
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::end_array
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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:531,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: 532
      start: 529
    functionDepth: 3
    functionLinenumber: 529
    functionLinenumberEnd: 532
    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:536,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: 537
      start: 534
    functionDepth: 3
    functionLinenumber: 534
    functionLinenumberEnd: 537
    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:547,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:548,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:553,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:557,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:559,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:561,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:569,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: 570
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 570
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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:52,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:53,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:56,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:65,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:69,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:70,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:76,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:86,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:87,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:89,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:92,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:94,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:95,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:97,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:100,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:102,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:103,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:104,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:106,1
    - Dst: NsheadMeta*::set_correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:109,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:110,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:112,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:113,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:115,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:120,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:121,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:123,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:124,1
    - Dst: mcpack2pb::ObjectIterator::field_count
      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:128,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:129,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:133,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:134,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:138,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:139,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:142,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:143,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:147,1
    - Dst: const_cast<butil::IOBuf&>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:152,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:153,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:156,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:157,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:161,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:164,1
    - Dst: std::string::size
      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: std::string::push_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:166,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:167,1
    - Dst: NsheadMeta*::set_full_method_name
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:168,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 91
    argCount: 3
    argNames:
    - ' request'
    - cntl
    - out_meta
    argTypes:
    - NsheadMessage
    - Controller*
    - NsheadMeta*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 47
    functionDepth: 2
    functionLinenumber: 47
    functionLinenumberEnd: 169
    functionName: brpc::policy::UbrpcAdaptor::ParseNsheadMeta
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::ObjectIterator::value::as_string
    - mcpack2pb::is_integral
    - pop_back
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - std::string::append
    - pop_front
    - mcpack2pb::InputStream::popn
    - body::size
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - NsheadMeta*::set_correlation_id
    - std::string::push_back
    - mcpack2pb::ObjectIterator::value::type
    - size
    - const_cast<butil::IOBuf&>
    - NsheadMeta*::set_full_method_name
    - mcpack2pb::unbox
    - Controller*::SetFailed
    - mcpack2pb::ObjectIterator::field_count
    - std::string::reserve
    - 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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:174,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:175,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:177,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:178,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: body::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:181,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:182,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: 185
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 185
    functionName: brpc::policy::UbrpcAdaptor::ParseRequestFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - std::string::c_str
    - butil::EnsureString
    - body::size
    - mcpack2pb::find_message_handler
    - mcpack2pb::MessageHandler::parse_body
    - Controller*::SetFailed
    - google::protobuf::Message*::GetDescriptor
    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:192,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:194,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:195,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:197,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:198,1
    - Dst: mcpack2pb::Serializer::add_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:199,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: Controller*::ErrorText
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:200,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:201,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:203,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:204,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:206,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:207,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 15
    argCount: 3
    argNames:
    - ' meta'
    - cntl
    - ' buf'
    argTypes:
    - NsheadMeta
    - Controller*
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 208
    functionName: brpc::policy::AppendError
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - mcpack2pb::Serializer::add_int64
    - mcpack2pb::Serializer::end_array
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::Serializer::begin_object
    - mcpack2pb::Serializer::add_int32
    - mcpack2pb::Serializer::add_string
    - Controller*::ErrorCode
    - mcpack2pb::OutputStream::done
    - mcpack2pb::Serializer::end_object
    - correlation_id
    - Controller*::ErrorText
    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:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:215,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:219,1
    - Dst: Controller*::Failed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:220,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:221,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:223,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:232,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:233,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:235,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:236,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:237,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:243,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:245,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:246,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:248,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:249,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: Controller*::idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:253,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:255,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:256,1
    - Dst: mcpack2pb::Serializer::begin_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:259,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:260,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      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_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:266,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:267,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:269,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:270,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:271,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:272,1
    - Dst: NsheadMessage*::body::clear
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:273,1
    - Dst: AppendError
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:274,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: 276
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 276
    functionName: brpc::policy::UbrpcAdaptor::SerializeResponseToIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::EnsureString
    - AppendError
    - LOG
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::Serializer::begin_object
    - Controller*::idl_result
    - NsheadMessage*::body::clear
    - Controller*::response_compress_type
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - correlation_id
    - mcpack2pb::Serializer::end_array
    - Controller*::Failed
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:284,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:285,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:287,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:288,1
    - Dst: mcpack2pb::unbox
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:292,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:296,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:305,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:309,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:310,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:315,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:324,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:325,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:327,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:334,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:335,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:336,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:337,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:340,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int32
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:343,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:345,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:350,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:351,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:354,1
    - Dst: mcpack2pb::ObjectIterator::value::as_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:357,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:361,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:365,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:366,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:370,1
    - Dst: mcpack2pb::is_primitive
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:373,1
    - Dst: mcpack2pb::is_integral
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:374,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:375,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:377,1
    - Dst: Controller*::set_idl_result
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::as_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:380,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:382,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:383,1
    - Dst: mcpack2pb::type2str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,1
    - Dst: mcpack2pb::ObjectIterator::value::type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:385,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:390,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:391,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:392,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:403,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:408,1
    - Dst: mcpack2pb::ObjectIterator::value::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:409,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:413,1
    - Dst: mcpack2pb::InputStream::popn
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: mcpack2pb::InputStream::popped_bytes
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:414,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:419,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:424,1
    - Dst: size
      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: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:427,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:428,1
    - Dst: pop_back
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:432,1
    - Dst: mcpack2pb::MessageHandler::parse_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:435,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:436,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:437,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: 440
      start: 278
    functionDepth: 2
    functionLinenumber: 278
    functionLinenumberEnd: 440
    functionName: brpc::policy::ParseResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 3
    functionsReached:
    - mcpack2pb::is_primitive
    - mcpack2pb::is_integral
    - mcpack2pb::ObjectIterator::value::as_string
    - butil::EnsureString
    - pop_back
    - mcpack2pb::MessageHandler::parse_body
    - mcpack2pb::InputStream::popped_bytes
    - mcpack2pb::type2str
    - pop_front
    - mcpack2pb::InputStream::popn
    - google::protobuf::Message*::GetDescriptor
    - mcpack2pb::ObjectIterator::value::as_int64
    - std::string::empty
    - mcpack2pb::ObjectIterator::value::size
    - mcpack2pb::ObjectIterator::value::as_int32
    - mcpack2pb::ObjectIterator::value::type
    - size
    - std::string::c_str
    - mcpack2pb::unbox
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - Controller*::set_idl_result
    - Controller*::SetFailed
    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:443,1
    - Dst: DestroyingPtr::socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:445,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: Socket*::correlation_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:448,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:450,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:453,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:458,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:459,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:460,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::meta::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: DestroyingPtr::payload::size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:461,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:462,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:464,1
    - Dst: brpc::policy::ParseResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:465,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:469,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:470,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 442
    functionDepth: 3
    functionLinenumber: 442
    functionLinenumberEnd: 471
    functionName: brpc::policy::ProcessUbrpcResponse
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - DestroyingPtr::meta::size
    - Controller*::response
    - ControllerPrivateAccessor::span
    - LOG_IF
    - DestroyingPtr::payload::size
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - brpc::policy::ParseResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - DestroyingPtr::socket
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - static_cast<uint64_t>
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - Socket*::correlation_id
    - auto::set_received_us
    - berror
    - bthread_id_lock
    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:476,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:478,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:481,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:482,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:484,1
    - Dst: mcpack2pb::find_message_handler
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:485,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:487,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:488,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:494,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:496,1
    - Dst: mcpack2pb::Serializer::add_bool
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:497,1
    - Dst: Controller*::connection_type
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:498,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:499,1
    - Dst: mcpack2pb::Serializer::begin_mcpack_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:501,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:502,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:504,1
    - Dst: mcpack2pb::Serializer::add_int64
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:505,1
    - Dst: mcpack2pb::Serializer::add_string
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: Controller*::method
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:506,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:507,1
    - Dst: Controller*::idl_names
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:508,1
    - Dst: mcpack2pb::Serializer::begin_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:510,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:511,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:512,1
    - Dst: mcpack2pb::MessageHandler::serialize_body
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:514,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:516,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:518,1
    - Dst: mcpack2pb::Serializer::end_array
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:519,1
    - Dst: mcpack2pb::Serializer::end_object
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:521,1
    - Dst: mcpack2pb::OutputStream::done
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:522,1
    - Dst: mcpack2pb::Serializer::good
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:523,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:524,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:525,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: 527
      start: 473
    functionDepth: 2
    functionLinenumber: 473
    functionLinenumberEnd: 527
    functionName: brpc::policy::SerializeUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::EnsureString
    - Controller*::call_id
    - google::protobuf::Message*::GetDescriptor
    - Controller*::method
    - mcpack2pb::Serializer::begin_object
    - Controller*::request_compress_type
    - Controller*::connection_type
    - mcpack2pb::Serializer::add_bool
    - mcpack2pb::Serializer::add_string
    - mcpack2pb::Serializer::end_object
    - mcpack2pb::Serializer::add_int64
    - std::string::c_str
    - mcpack2pb::Serializer::begin_mcpack_array
    - mcpack2pb::MessageHandler::serialize_body
    - mcpack2pb::Serializer::good
    - mcpack2pb::Serializer::end_array
    - Controller*::idl_names
    - mcpack2pb::find_message_handler
    - mcpack2pb::OutputStream::done
    - Controller*::SetFailed
    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:531,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: 532
      start: 529
    functionDepth: 3
    functionLinenumber: 529
    functionLinenumberEnd: 532
    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:536,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: 537
      start: 534
    functionDepth: 3
    functionLinenumber: 534
    functionLinenumberEnd: 537
    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:547,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:548,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:553,1
    - Dst: memset
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:556,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:557,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:559,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:561,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp:569,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: 570
      start: 539
    functionDepth: 1
    functionLinenumber: 539
    functionLinenumberEnd: 570
    functionName: brpc::policy::PackUbrpcRequest
    functionSourceFile: /src/brpc/src/brpc/policy/ubrpc2pb_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::get_sending_socket
    - butil::IOBuf*::append
    - Controller*::connection_type
    - Controller*::log_id
    - memset
    - Controller*::SetFailed
    - size
    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*::append
    - butil::HostToNet16
    - std::string*::clear
    - length
    - butil::HostToNet32
    - 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*::append
    - butil::HostToNet16
    - std::string*::clear
    - length
    - butil::HostToNet32
    - 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*::append
    - butil::HostToNet16
    - std::string*::clear
    - length
    - butil::HostToNet32
    - 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*::append
    - butil::HostToNet16
    - std::string*::clear
    - length
    - butil::HostToNet32
    - 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:
    - c_str
    - Init
    - LOG
    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:
    - Controller::http_request
    - CallMethod
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::IsInt
    - Controller::request_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::append
    - auto::value::IsString
    - LOG
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    - time
    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:
    - Controller::http_request
    - auto::value::IsInt
    - auto::End
    - auto::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetBool
    - LOG
    - std::vector<ServerNode>*::assign
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::GetInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetInt64
    - auto::value::IsInt64
    - auto::value::IsBool
    - std::to_string
    - std::set::size
    - std::vector<ServerNode>*::size
    - std::set::end
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - auto::Begin
    - auto::value::IsNumber
    - std::vector<ServerNode>*::reserve
    - Controller::response_attachment
    - auto::GetString
    - static_cast<long>
    - auto::value::IsString
    - std::set::insert
    - auto::IsObject
    - butil::EndPoint::EndPoint
    - auto::IsArray
    - auto::FindMember
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::MemberEnd
    - auto::value::GetDouble
    - std::set::begin
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::GetUint
    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
    - brpc::policy::NacosNamingService::Connect
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - std::vector<ServerNode>*::clear
    - empty
    - time
    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:
    - c_str
    - Init
    - LOG
    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:
    - Controller::http_request
    - CallMethod
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::IsInt
    - Controller::request_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::append
    - auto::value::IsString
    - LOG
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    - time
    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:
    - Controller::http_request
    - auto::value::IsInt
    - auto::End
    - auto::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetBool
    - LOG
    - std::vector<ServerNode>*::assign
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::GetInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetInt64
    - auto::value::IsInt64
    - auto::value::IsBool
    - std::to_string
    - std::set::size
    - std::vector<ServerNode>*::size
    - std::set::end
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - auto::Begin
    - auto::value::IsNumber
    - std::vector<ServerNode>*::reserve
    - Controller::response_attachment
    - auto::GetString
    - static_cast<long>
    - auto::value::IsString
    - std::set::insert
    - auto::IsObject
    - butil::EndPoint::EndPoint
    - auto::IsArray
    - auto::FindMember
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::MemberEnd
    - auto::value::GetDouble
    - std::set::begin
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::GetUint
    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
    - brpc::policy::NacosNamingService::Connect
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - std::vector<ServerNode>*::clear
    - empty
    - time
    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:
    - c_str
    - Init
    - LOG
    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:
    - Controller::http_request
    - CallMethod
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::IsInt
    - Controller::request_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::append
    - auto::value::IsString
    - LOG
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    - time
    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:
    - Controller::http_request
    - auto::value::IsInt
    - auto::End
    - auto::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetBool
    - LOG
    - std::vector<ServerNode>*::assign
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::GetInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetInt64
    - auto::value::IsInt64
    - auto::value::IsBool
    - std::to_string
    - std::set::size
    - std::vector<ServerNode>*::size
    - std::set::end
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - auto::Begin
    - auto::value::IsNumber
    - std::vector<ServerNode>*::reserve
    - Controller::response_attachment
    - auto::GetString
    - static_cast<long>
    - auto::value::IsString
    - std::set::insert
    - auto::IsObject
    - butil::EndPoint::EndPoint
    - auto::IsArray
    - auto::FindMember
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::MemberEnd
    - auto::value::GetDouble
    - std::set::begin
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::GetUint
    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
    - brpc::policy::NacosNamingService::Connect
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - std::vector<ServerNode>*::clear
    - empty
    - time
    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:
    - c_str
    - Init
    - LOG
    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:
    - Controller::http_request
    - CallMethod
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::value::IsInt
    - Controller::request_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::append
    - auto::value::IsString
    - LOG
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    - time
    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:
    - Controller::http_request
    - auto::value::IsInt
    - auto::End
    - auto::Size
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - auto::value::GetBool
    - LOG
    - std::vector<ServerNode>*::assign
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - auto::GetInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetInt64
    - auto::value::IsInt64
    - auto::value::IsBool
    - std::to_string
    - std::set::size
    - std::vector<ServerNode>*::size
    - std::set::end
    - str2endpoint
    - Controller::http_response
    - CallMethod
    - auto::Begin
    - auto::value::IsNumber
    - std::vector<ServerNode>*::reserve
    - Controller::response_attachment
    - auto::GetString
    - static_cast<long>
    - auto::value::IsString
    - std::set::insert
    - auto::IsObject
    - butil::EndPoint::EndPoint
    - auto::IsArray
    - auto::FindMember
    - std::vector<ServerNode>*::empty
    - Controller::ErrorText
    - auto::MemberEnd
    - auto::value::GetDouble
    - std::set::begin
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::GetUint
    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
    - brpc::policy::NacosNamingService::Connect
    - brpc::policy::NacosNamingService::RefreshAccessToken
    - std::vector<ServerNode>*::clear
    - empty
    - time
    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: 0
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight_tree::empty
    - server_map::seek
    - weight_tree::size
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::reserve
    - ServerInfo::weight::volatile_value
    - Weight::Weight
    - UpdateParentWeights
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    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*::Disable
    - server_map::seek
    - weight_tree::size
    - weight_tree::back
    - Weight*::MarkOld
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::PopLeft
    - UpdateParentWeights
    - weight_tree::pop_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - server_map::erase
    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
    - weight_tree::size
    - server_map::clear
    - 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: 1
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Add
    - size
    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:
    - ModifyWithForeground
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    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:
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    - Modify
    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:
    - AddServers
    - ModifyWithForeground
    - size
    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:
    - RemoveServers
    - Modify
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:308,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:313,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:315,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:328,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:330,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:338,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:352,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 357
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight::volatile_value
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - brpc::ExcludedServers::IsExcluded
    - left::load
    - butil::fast_rand_less_than
    - fetch_add
    - IsServerAvailable
    - LOG
    - weight::AddInflight
    - Read
    - weight::MarkFailed
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:361,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:364,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:370,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:372,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 375
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - fetch_add
    - Weight*::Update
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:381,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:398,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:401,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:418,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:424,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:426,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:437,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:441,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:448,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:456,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:459,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:470,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 471
    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:
    - size
    - capacity
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - std::max
    - ResetWeight
    - Disabled
    - controller::timeout_ms
    - top
    - elim_push
    - controller::retried_count
    - empty
    - push
    - bottom
    - controller::max_retry
    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:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 476
    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: 480
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 480
    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:488,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:494,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:497,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:499,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 513
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - top
    - capacity
    - size
    - std::unique_lock::unlock
    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:522,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:524,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:527,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:535,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:540,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 515
    functionDepth: 3
    functionLinenumber: 515
    functionLinenumberEnd: 547
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - butil::gettimeofday_us
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - weight::Describe
    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: 559
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 559
    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: 562
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 562
    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:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 564
    functionDepth: 1
    functionLinenumber: 564
    functionLinenumberEnd: 570
    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:573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 579
    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:582,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 581
    functionDepth: 1
    functionLinenumber: 581
    functionLinenumberEnd: 589
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - std::make_pair
    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: 0
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 1
    functionsReached:
    - weight_tree::empty
    - server_map::seek
    - weight_tree::size
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::reserve
    - ServerInfo::weight::volatile_value
    - Weight::Weight
    - UpdateParentWeights
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    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*::Disable
    - server_map::seek
    - weight_tree::size
    - weight_tree::back
    - Weight*::MarkOld
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::PopLeft
    - UpdateParentWeights
    - weight_tree::pop_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - server_map::erase
    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
    - weight_tree::size
    - server_map::clear
    - 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: 1
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Add
    - size
    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:
    - ModifyWithForeground
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    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:
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    - Modify
    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:
    - AddServers
    - ModifyWithForeground
    - size
    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:
    - RemoveServers
    - Modify
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:308,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:313,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:315,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:328,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:330,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:338,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:352,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 357
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight::volatile_value
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - brpc::ExcludedServers::IsExcluded
    - left::load
    - butil::fast_rand_less_than
    - fetch_add
    - IsServerAvailable
    - LOG
    - weight::AddInflight
    - Read
    - weight::MarkFailed
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:361,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:364,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:370,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:372,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 375
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - fetch_add
    - Weight*::Update
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:381,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:398,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:401,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:418,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:424,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:426,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:437,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:441,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:448,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:456,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:459,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:470,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 471
    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:
    - size
    - capacity
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - std::max
    - ResetWeight
    - Disabled
    - controller::timeout_ms
    - top
    - elim_push
    - controller::retried_count
    - empty
    - push
    - bottom
    - controller::max_retry
    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:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 476
    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: 480
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 480
    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:488,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:494,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:497,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:499,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 513
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - top
    - capacity
    - size
    - std::unique_lock::unlock
    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:522,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:524,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:527,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:535,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:540,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 515
    functionDepth: 3
    functionLinenumber: 515
    functionLinenumberEnd: 547
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - butil::gettimeofday_us
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - weight::Describe
    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: 559
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 559
    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: 562
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 562
    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:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 564
    functionDepth: 1
    functionLinenumber: 564
    functionLinenumberEnd: 570
    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:573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 579
    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:582,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 581
    functionDepth: 1
    functionLinenumber: 581
    functionLinenumberEnd: 589
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - std::make_pair
    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: 0
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 2
    functionsReached:
    - weight_tree::empty
    - server_map::seek
    - weight_tree::size
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::reserve
    - ServerInfo::weight::volatile_value
    - Weight::Weight
    - UpdateParentWeights
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    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*::Disable
    - server_map::seek
    - weight_tree::size
    - weight_tree::back
    - Weight*::MarkOld
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::PopLeft
    - UpdateParentWeights
    - weight_tree::pop_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - server_map::erase
    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
    - weight_tree::size
    - server_map::clear
    - 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: 1
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Add
    - size
    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:
    - ModifyWithForeground
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    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:
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    - Modify
    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:
    - AddServers
    - ModifyWithForeground
    - size
    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:
    - RemoveServers
    - Modify
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:308,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:313,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:315,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:328,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:330,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:338,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:352,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 357
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight::volatile_value
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - brpc::ExcludedServers::IsExcluded
    - left::load
    - butil::fast_rand_less_than
    - fetch_add
    - IsServerAvailable
    - LOG
    - weight::AddInflight
    - Read
    - weight::MarkFailed
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:361,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:364,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:370,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:372,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 375
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - fetch_add
    - Weight*::Update
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:381,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:398,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:401,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:418,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:424,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:426,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:437,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:441,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:448,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:456,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:459,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:470,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 471
    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:
    - size
    - capacity
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - std::max
    - ResetWeight
    - Disabled
    - controller::timeout_ms
    - top
    - elim_push
    - controller::retried_count
    - empty
    - push
    - bottom
    - controller::max_retry
    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:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 476
    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: 480
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 480
    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:488,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:494,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:497,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:499,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 513
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - top
    - capacity
    - size
    - std::unique_lock::unlock
    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:522,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:524,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:527,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:535,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:540,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 515
    functionDepth: 3
    functionLinenumber: 515
    functionLinenumberEnd: 547
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - butil::gettimeofday_us
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - weight::Describe
    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: 559
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 559
    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: 562
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 562
    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:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 564
    functionDepth: 1
    functionLinenumber: 564
    functionLinenumberEnd: 570
    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:573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 579
    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:582,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 581
    functionDepth: 1
    functionLinenumber: 581
    functionLinenumberEnd: 589
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - std::make_pair
    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: 0
    functionLinenumber: 52
    functionLinenumberEnd: 104
    functionName: brpc::policy::LocalityAwareLoadBalancer::Add
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 3
    functionsReached:
    - weight_tree::empty
    - server_map::seek
    - weight_tree::size
    - weight_tree::capacity
    - LocalityAwareLoadBalancer*::PushLeft
    - weight_tree::reserve
    - ServerInfo::weight::volatile_value
    - Weight::Weight
    - UpdateParentWeights
    - LocalityAwareLoadBalancer*::_total::load
    - weight_tree::push_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    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*::Disable
    - server_map::seek
    - weight_tree::size
    - weight_tree::back
    - Weight*::MarkOld
    - Weight*::ClearOld
    - LocalityAwareLoadBalancer*::PopLeft
    - UpdateParentWeights
    - weight_tree::pop_back
    - LocalityAwareLoadBalancer*::_total::fetch_add
    - server_map::erase
    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
    - weight_tree::size
    - server_map::clear
    - 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: 1
    functionLinenumber: 205
    functionLinenumberEnd: 213
    functionName: brpc::policy::LocalityAwareLoadBalancer::BatchAdd
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::LocalityAwareLoadBalancer::Add
    - size
    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:
    - ModifyWithForeground
    - brpc::policy::LocalityAwareLoadBalancer::AddServer
    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:
    - brpc::policy::LocalityAwareLoadBalancer::RemoveServer
    - Modify
    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:
    - AddServers
    - ModifyWithForeground
    - size
    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:
    - RemoveServers
    - Modify
    - size
    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: IsServerAvailable
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:305,1
    - Dst: brpc::ExcludedServers::IsExcluded
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:308,1
    - Dst: weight::AddInflight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:313,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:315,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:316,1
    - Dst: weight::MarkFailed
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:328,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:330,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:331,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:338,1
    - Dst: load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:352,1
    - Dst: butil::fast_rand_less_than
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:353,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 71
    argCount: 2
    argNames:
    - ' in'
    - out
    argTypes:
    - SelectIn
    - SelectOut*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 357
      start: 265
    functionDepth: 1
    functionLinenumber: 265
    functionLinenumberEnd: 357
    functionName: brpc::policy::LocalityAwareLoadBalancer::SelectServer
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - weight::volatile_value
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - brpc::ExcludedServers::IsExcluded
    - left::load
    - butil::fast_rand_less_than
    - fetch_add
    - IsServerAvailable
    - LOG
    - weight::AddInflight
    - Read
    - weight::MarkFailed
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:361,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:364,1
    - Dst: Weight*::Update
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:370,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:372,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:373,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - ' info'
    argTypes:
    - CallInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 359
    functionDepth: 1
    functionLinenumber: 359
    functionLinenumberEnd: 375
    functionName: brpc::policy::LocalityAwareLoadBalancer::Feedback
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_map::seek
    - fetch_add
    - Weight*::Update
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::UpdateParentWeights
    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:379,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:381,1
    - Dst: Disabled
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:382,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:398,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:399,1
    - Dst: elim_push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:401,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:418,1
    - Dst: controller::retried_count
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:419,1
    - Dst: controller::max_retry
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:420,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:424,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:426,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:427,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: controller::timeout_ms
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:434,1
    - Dst: push
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:437,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:441,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:442,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:448,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:456,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:457,1
    - Dst: bottom
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:459,1
    - Dst: ResetWeight
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:470,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 46
    argCount: 2
    argNames:
    - ' ci'
    - index
    argTypes:
    - CallInfo
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 471
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 471
    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:
    - size
    - capacity
    - BAIDU_SCOPED_LOCK
    - butil::gettimeofday_us
    - std::max
    - ResetWeight
    - Disabled
    - controller::timeout_ms
    - top
    - elim_push
    - controller::retried_count
    - empty
    - push
    - bottom
    - controller::max_retry
    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:475,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 476
      start: 473
    functionDepth: 0
    functionLinenumber: 473
    functionLinenumberEnd: 476
    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: 480
      start: 478
    functionDepth: 0
    functionLinenumber: 478
    functionLinenumberEnd: 480
    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:488,1
    - Dst: capacity
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:494,1
    - Dst: top
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:497,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:499,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 2
    argNames:
    - ' os'
    - now
    argTypes:
    - std::ostream
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 513
      start: 482
    functionDepth: 1
    functionLinenumber: 482
    functionLinenumberEnd: 513
    functionName: LocalityAwareLoadBalancer::Weight::Describe(std::ostream& os, int64_t
      now)
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - top
    - capacity
    - size
    - std::unique_lock::unlock
    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:522,1
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:524,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:527,1
    - Dst: butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:528,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:535,1
    - Dst: left::load
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:540,1
    - Dst: weight::Describe
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:541,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 23
    argCount: 2
    argNames:
    - ' os'
    - ' options'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 547
      start: 515
    functionDepth: 3
    functionLinenumber: 515
    functionLinenumberEnd: 547
    functionName: brpc::policy::LocalityAwareLoadBalancer::Describe
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - load
    - butil::DoublyBufferedData<Servers>::ScopedPtr::weight_tree::size
    - butil::gettimeofday_us
    - left::load
    - brpc::SetTrackMeAddress
    - Read
    - weight::Describe
    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: 559
      start: 549
    functionDepth: 0
    functionLinenumber: 549
    functionLinenumberEnd: 559
    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: 562
      start: 561
    functionDepth: 0
    functionLinenumber: 561
    functionLinenumberEnd: 562
    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:565,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 564
    functionDepth: 1
    functionLinenumber: 564
    functionLinenumberEnd: 570
    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:573,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 579
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 579
    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:582,1
    - Dst: std::make_pair
      Src: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp:588,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 589
      start: 581
    functionDepth: 1
    functionLinenumber: 581
    functionLinenumberEnd: 589
    functionName: LocalityAwareLoadBalancer::Weight::ClearOld()
    functionSourceFile: /src/brpc/src/brpc/policy/locality_aware_load_balancer.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - std::make_pair
    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::http_request
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - std::string*::assign
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetUint
    - MemberEnd
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - auto::value::IsString
    - auto::value::GetStringLength
    - IsArray
    - std::string*::append
    - auto::value::IsUint
    - Channel::CallMethod
    - std::string*::push_back
    - Channel::Init
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    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
    - LOG
    - c_str
    - Channel::Channel
    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: 0
    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:
    - bthread_stop
    - load
    - bthread_join
    - DoCancel
    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:
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string::c_str
    - auto::value::IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::IsString
    - LOG
    - to_string
    - std::string*::assign
    - auto::value::GetStringLength
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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_usleep
    - bthread_stopped
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - DiscoveryClient*::DoRegister
    - LOG
    - static_cast<DiscoveryClient*>
    - bthread_self
    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:
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - LOG
    - IsValid
    - exchange
    - bthread_start_background
    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:
    - Controller::http_request
    - Controller::Failed
    - Channel*::CallMethod
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::SplitString
    - butil::IOBufBuilder::move_to
    - LOG
    - Controller::ErrorText
    - std::vector::size
    - empty
    - Controller::remote_side
    - GetOrNewDiscoveryChannel
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - std::string::append
    - LOG
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - auto::value::Accept
    - auto::value::IsArray
    - MemberEnd
    - GetString
    - LOG_ONCE
    - std::string::assign
    - c_str
    - IsString
    - str2endpoint
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - butil::StringPiece::data
    - std::vector<ServerNode>*::clear
    - IsArray
    - GetOrNewDiscoveryChannel
    - Channel*::CallMethod
    - std::vector<ServerNode>*::push_back
    - GetStringLength
    - Controller::ErrorText
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - butil::string_printf
    - butil::StringPiece::find
    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::http_request
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - std::string*::assign
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetUint
    - MemberEnd
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - auto::value::IsString
    - auto::value::GetStringLength
    - IsArray
    - std::string*::append
    - auto::value::IsUint
    - Channel::CallMethod
    - std::string*::push_back
    - Channel::Init
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    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
    - LOG
    - c_str
    - Channel::Channel
    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: 0
    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:
    - bthread_stop
    - load
    - bthread_join
    - DoCancel
    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:
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string::c_str
    - auto::value::IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::IsString
    - LOG
    - to_string
    - std::string*::assign
    - auto::value::GetStringLength
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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_usleep
    - bthread_stopped
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - DiscoveryClient*::DoRegister
    - LOG
    - static_cast<DiscoveryClient*>
    - bthread_self
    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:
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - LOG
    - IsValid
    - exchange
    - bthread_start_background
    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:
    - Controller::http_request
    - Controller::Failed
    - Channel*::CallMethod
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::SplitString
    - butil::IOBufBuilder::move_to
    - LOG
    - Controller::ErrorText
    - std::vector::size
    - empty
    - Controller::remote_side
    - GetOrNewDiscoveryChannel
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - std::string::append
    - LOG
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - auto::value::Accept
    - auto::value::IsArray
    - MemberEnd
    - GetString
    - LOG_ONCE
    - std::string::assign
    - c_str
    - IsString
    - str2endpoint
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - butil::StringPiece::data
    - std::vector<ServerNode>*::clear
    - IsArray
    - GetOrNewDiscoveryChannel
    - Channel*::CallMethod
    - std::vector<ServerNode>*::push_back
    - GetStringLength
    - Controller::ErrorText
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - butil::string_printf
    - butil::StringPiece::find
    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::http_request
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - std::string*::assign
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetUint
    - MemberEnd
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - auto::value::IsString
    - auto::value::GetStringLength
    - IsArray
    - std::string*::append
    - auto::value::IsUint
    - Channel::CallMethod
    - std::string*::push_back
    - Channel::Init
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    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
    - LOG
    - c_str
    - Channel::Channel
    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: 0
    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:
    - bthread_stop
    - load
    - bthread_join
    - DoCancel
    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:
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string::c_str
    - auto::value::IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::IsString
    - LOG
    - to_string
    - std::string*::assign
    - auto::value::GetStringLength
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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_usleep
    - bthread_stopped
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - DiscoveryClient*::DoRegister
    - LOG
    - static_cast<DiscoveryClient*>
    - bthread_self
    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:
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - LOG
    - IsValid
    - exchange
    - bthread_start_background
    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:
    - Controller::http_request
    - Controller::Failed
    - Channel*::CallMethod
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::SplitString
    - butil::IOBufBuilder::move_to
    - LOG
    - Controller::ErrorText
    - std::vector::size
    - empty
    - Controller::remote_side
    - GetOrNewDiscoveryChannel
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - std::string::append
    - LOG
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - auto::value::Accept
    - auto::value::IsArray
    - MemberEnd
    - GetString
    - LOG_ONCE
    - std::string::assign
    - c_str
    - IsString
    - str2endpoint
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - butil::StringPiece::data
    - std::vector<ServerNode>*::clear
    - IsArray
    - GetOrNewDiscoveryChannel
    - Channel*::CallMethod
    - std::vector<ServerNode>*::push_back
    - GetStringLength
    - Controller::ErrorText
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - butil::string_printf
    - butil::StringPiece::find
    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::http_request
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - LOG
    - std::string*::assign
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::GetUint
    - MemberEnd
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - auto::value::IsString
    - auto::value::GetStringLength
    - IsArray
    - std::string*::append
    - auto::value::IsUint
    - Channel::CallMethod
    - std::string*::push_back
    - Channel::Init
    - Controller::ErrorText
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    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
    - LOG
    - c_str
    - Channel::Channel
    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: 0
    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:
    - bthread_stop
    - load
    - bthread_join
    - DoCancel
    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:
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - std::string::c_str
    - auto::value::IsInt
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - auto::value::IsString
    - LOG
    - to_string
    - std::string*::assign
    - auto::value::GetStringLength
    - auto::value::GetString
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - auto::value::GetInt
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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_usleep
    - bthread_stopped
    - butil::fast_rand_less_than
    - DiscoveryClient*::DoRenew
    - DiscoveryClient*::DoRegister
    - LOG
    - static_cast<DiscoveryClient*>
    - bthread_self
    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:
    - load
    - brpc::policy::DiscoveryClient::DoRegister
    - LOG
    - IsValid
    - exchange
    - bthread_start_background
    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:
    - Controller::http_request
    - Controller::Failed
    - Channel*::CallMethod
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::SplitString
    - butil::IOBufBuilder::move_to
    - LOG
    - Controller::ErrorText
    - std::vector::size
    - empty
    - Controller::remote_side
    - GetOrNewDiscoveryChannel
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - Controller::Failed
    - Controller::request_attachment
    - Controller::response_attachment
    - butil::IOBufBuilder::move_to
    - LOG
    - Channel::CallMethod
    - Channel::Init
    - Controller::ErrorText
    - butil::IOBufBuilder::IOBufBuilder
    - ParseCommonResult
    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:
    - Controller::http_request
    - butil::StringPiece::remove_prefix
    - BUTIL_RAPIDJSON_NAMESPACE::Document::Parse
    - std::string::append
    - LOG
    - empty
    - Controller::Failed
    - BUTIL_RAPIDJSON_NAMESPACE::Document::IsObject
    - BUTIL_RAPIDJSON_NAMESPACE::Document::MemberEnd
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetBuffer
    - auto::value::Accept
    - auto::value::IsArray
    - MemberEnd
    - GetString
    - LOG_ONCE
    - std::string::assign
    - c_str
    - IsString
    - str2endpoint
    - FindMember
    - std::string::c_str
    - Size
    - Controller::response_attachment
    - BUTIL_RAPIDJSON_NAMESPACE::MemoryBuffer::GetSize
    - butil::StringPiece::data
    - std::vector<ServerNode>*::clear
    - IsArray
    - GetOrNewDiscoveryChannel
    - Channel*::CallMethod
    - std::vector<ServerNode>*::push_back
    - GetStringLength
    - Controller::ErrorText
    - strncmp
    - BUTIL_RAPIDJSON_NAMESPACE::Document::FindMember
    - butil::string_printf
    - butil::StringPiece::find
    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:
    - LOG
    - gethostbyname
    - freeaddrinfo
    - getaddrinfo
    - std::string
    - bcopy
    - gethostbyname_r
    - butil::sockaddr2endpoint
    - strtol
    - char::char
    - snprintf
    - get
    - butil::EndPoint::EndPoint
    - memset
    - std::vector<ServerNode>*::clear
    - reset
    - arraysize
    - std::vector<ServerNode>*::push_back
    - berror
    - ServerNode
    - 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:
    - LOG
    - gethostbyname
    - freeaddrinfo
    - getaddrinfo
    - std::string
    - bcopy
    - gethostbyname_r
    - butil::sockaddr2endpoint
    - strtol
    - char::char
    - snprintf
    - get
    - butil::EndPoint::EndPoint
    - memset
    - std::vector<ServerNode>*::clear
    - reset
    - arraysize
    - std::vector<ServerNode>*::push_back
    - berror
    - ServerNode
    - 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:
    - LOG
    - gethostbyname
    - freeaddrinfo
    - getaddrinfo
    - std::string
    - bcopy
    - gethostbyname_r
    - butil::sockaddr2endpoint
    - strtol
    - char::char
    - snprintf
    - get
    - butil::EndPoint::EndPoint
    - memset
    - std::vector<ServerNode>*::clear
    - reset
    - arraysize
    - std::vector<ServerNode>*::push_back
    - berror
    - ServerNode
    - 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:
    - LOG
    - gethostbyname
    - freeaddrinfo
    - getaddrinfo
    - std::string
    - bcopy
    - gethostbyname_r
    - butil::sockaddr2endpoint
    - strtol
    - char::char
    - snprintf
    - get
    - butil::EndPoint::EndPoint
    - memset
    - std::vector<ServerNode>*::clear
    - reset
    - arraysize
    - std::vector<ServerNode>*::push_back
    - berror
    - ServerNode
    - 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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::DynPartLoadBalancer::Add
    - size
    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:
    - RELEASE_ASSERT_VERBOSE
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - butil::fast_rand_less_than
    - brpc::SetTrackMeAddress
    - first::user
    - first::release
    - Read
    - SelectOut*::ptr::reset
    - CHECK_EQ
    - brpc::schan::GetSubChannelWeight
    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:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::DynPartLoadBalancer::Add
    - size
    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:
    - RELEASE_ASSERT_VERBOSE
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - butil::fast_rand_less_than
    - brpc::SetTrackMeAddress
    - first::user
    - first::release
    - Read
    - SelectOut*::ptr::reset
    - CHECK_EQ
    - brpc::schan::GetSubChannelWeight
    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:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::DynPartLoadBalancer::Add
    - size
    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:
    - RELEASE_ASSERT_VERBOSE
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - butil::fast_rand_less_than
    - brpc::SetTrackMeAddress
    - first::user
    - first::release
    - Read
    - SelectOut*::ptr::reset
    - CHECK_EQ
    - brpc::schan::GetSubChannelWeight
    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:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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_map::end
    - server_list::reserve
    - server_list::push_back
    - server_map::find
    - server_list::capacity
    - server_list::size
    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::pop_back
    - server_map::end
    - server_map::find
    - server_list::back
    - server_map::erase
    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:
    - brpc::policy::DynPartLoadBalancer::Add
    - size
    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:
    - RELEASE_ASSERT_VERBOSE
    - brpc::ExcludedServers::IsExcluded
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    - butil::fast_rand_less_than
    - brpc::SetTrackMeAddress
    - first::user
    - first::release
    - Read
    - SelectOut*::ptr::reset
    - CHECK_EQ
    - brpc::schan::GetSubChannelWeight
    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:
    - Read
    - butil::DoublyBufferedData<Servers>::ScopedPtr::server_list::size
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - bthread_usleep
    - butil::IOBuf*::cut_into_file_descriptor
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    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::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - brpc::policy::WriteBigEndian4Bytes
    - LOG
    - butil::IOBuf::append
    - adobe_hs::C1::Save
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Generate
    - butil::IOBuf::IOBuf
    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:
    - reserve
    - init
    - static_cast<void*>
    - LOG
    - memset
    - Server*::options
    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:
    - begin
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - load
    - end
    - clear
    - store
    - LOG
    - free
    - empty
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    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:
    - Socket*::SetFailed
    - butil::Status::OK
    - release
    - std::unique_ptr::reset
    - RtmpChunkStream*::SerializeMessage
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - Socket*::parsing_context
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    - static_cast<RtmpContext*>
    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:
    - load
    - store
    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
    - RtmpChunkStream::RtmpChunkStream
    - compare_exchange_strong
    - 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: 0
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - pop_back
    - empty
    - back
    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
    - empty
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    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: 1
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - stream::reset
    - LOG
    - std::unique_lock::unlock
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpStreamBase*::stream_id
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - LOG
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - erase
    - std::unique_lock::unlock
    - seek
    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:
    - RtmpConnectRequest::set_app
    - RtmpConnectRequest::set_swfurl
    - LOG
    - RtmpConnectRequest::mutable_tcurl
    - RtmpConnectRequest::set_videofunction
    - RtmpConnectRequest::set_objectencoding
    - RtmpConnectRequest::set_pageurl
    - butil::IOBuf::size
    - WriteAMFUint32
    - WriteAMFString
    - memcpy
    - RtmpConnectRequest::set_tcurl
    - app::empty
    - butil::endpoint2str
    - RtmpConnectRequest::set_audiocodecs
    - pageUrl::empty
    - swfUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - WriteAMFObject
    - WriteBigEndian4Bytes
    - std::string*::reserve
    - RtmpConnectRequest::set_flashver
    - RtmpConnectRequest::set_videocodecs
    - WriteAll
    - butil::IOBuf::append
    - RtmpConnectRequest::set_capabilities
    - tcUrl::empty
    - brpc::policy::RtmpContext::GetChunkStream
    - AMFOutputStream::good
    - flashVer::empty
    - std::string*::append
    - std::string*::push_back
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_fpad
    - app::size
    - butil::IOBuf::IOBuf
    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:
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - brpc::policy::RtmpContext::WaitForS0S1
    - MakeParseError
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForC2
    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:
    - adobe_hs::S1::Save
    - LOG
    - GetRtmpHandshakeServerRandom
    - malloc
    - brpc::policy::RtmpContext::OnChunks
    - memcpy
    - adobe_hs::C1::schema
    - butil::IOBuf::push_back
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - adobe_hs::S2::Save
    - adobe_hs::S1::Generate
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::WaitForC2
    - WriteBigEndian4Bytes
    - butil::IOBuf*::fetch
    - WriteAll
    - adobe_hs::C1::Load
    - MakeParseError
    - butil::IOBuf::append
    - GetRtmpTimestamp
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C1::digest_blk::digest
    - adobe_hs::S2::Generate
    - memcmp
    - brpc::policy::RtmpContext::SetState
    - Socket*::remote_side
    - Socket*::fd
    - butil::IOBuf::IOBuf
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::SetState
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - butil::IOBuf*::length
    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:
    - butil::IOBuf*::cutn
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpContext::SetState
    - adobe_hs::C2::Save
    - adobe_hs::C2::Generate
    - WriteAll
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - butil::IOBuf::append
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    - Socket*::fd
    - brpc::policy::RtmpContext::WaitForS2
    - butil::IOBuf*::length
    - butil::IOBuf::IOBuf
    - adobe_hs::S1::Load
    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
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - Socket*::fd
    - brpc::policy::RtmpContext::SendConnectRequest
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    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:
    - RtmpChunkStream*::Feed
    - butil::IOBuf*::fetch
    - MakeParseError
    - LOG
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::size
    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
    - brpc::policy::MakeUnsentControlMessage
    - butil::HostToNet32
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - butil::Timer::u_elapsed
    - AddChunk
    - std::min
    - LOG
    - MethodStatus*::OnResponded
    - ReadBigEndian4Bytes
    - RtmpContext*::service
    - butil::Timer::start
    - butil::IOBuf*::size
    - brpc::policy::RtmpChunkStream::OnMessage
    - butil::Timer::stop
    - msg_body::clear
    - CHECK
    - butil::IOBuf*::pop_front
    - butil::Timer::Timer
    - RtmpContext*::AddReceivedBytes
    - pthread_once
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - MakeParseError
    - MakeMessage
    - MethodStatus*::OnRequested
    - last_msg_header::is_valid
    - Socket*::remote_side
    - ReadBigEndian3Bytes
    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*::cutn
    - CHECK_LE
    - WriteBigEndian4Bytes
    - butil::IOBuf*::append
    - brpc::policy::RtmpChunkStream::connection_context
    - GetBasicHeaderLength
    - CHECK
    - std::min
    - WriteBasicHeader
    - WriteBigEndian3Bytes
    - butil::IOBuf*::size
    - WriteLittleEndian4Bytes
    - last_msg_header::is_valid
    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:
    - CommandHandlerMap::CommandHandlerMap
    - init
    - LOG
    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:
    - messagetype2str
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - CHECK_EQ
    - butil::IOBuf*::size
    - arraysize
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - Socket*::remote_side
    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: 3
    EdgeCount: 3
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - brpc::policy::RtmpChunkStream::OnPingRequest
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - ReadBigEndian4Bytes
    - data
    - size
    - 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:
    - WriteBigEndian4Bytes
    - PLOG
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::Write
    - WriteBigEndian2Bytes
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RtmpService*::OnPingResponse
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - Socket*::remote_side
    - VLOG
    - butil::intrusive_ptr::CallOnAudioMessage
    - 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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - is_video_frame_type_valid
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - is_video_codec_valid
    - VLOG
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnVideoMessage
    - 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
    - AMFInputStream::check_emptiness
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::CallOnMetaData
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnCuePoint
    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:
    - LOG_EVERY_SECOND
    - Socket*::remote_side
    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:
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    - pthread_once
    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:
    - RtmpConnectResponse::has_mode
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - RtmpConnectResponse::set_mode
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFNull
    - RtmpInfo::ShortDebugString
    - RtmpConnectResponse::has_capabilities
    - WriteAMFUint32
    - ReadAMFUint32
    - TemporaryArrayBuilder::size
    - next::reset
    - MakeUnsentControlMessage
    - RtmpConnectResponse::ShortDebugString
    - PLOG
    - std::string::empty
    - WriteAMFString
    - RtmpConnectRequest*::objectencoding
    - TemporaryArrayBuilder::push
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - RtmpConnectResponse::has_fmsver
    - RtmpConnectResponse::set_capabilities
    - WriteAMFObject
    - Socket*::SetFailed
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::IOBuf::clear
    - AMFOutputStream::good
    - ReadAMFObject
    - RtmpInfo::set_objectencoding
    - release
    - Socket*::Write
    - Socket*::remote_side
    - RtmpConnectResponse::set_fmsver
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    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:
    - ReadAMFUint32
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - ReadAMFObject
    - RtmpContext*::RemoveTransaction
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - CHECK
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - RtmpInfo::ShortDebugString
    - butil::intrusive_ptr::get
    - static_cast<RtmpClientStream*>
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::OnPublish
    - AMFObject::Find
    - bthread_id_error
    - RtmpInfo::set_description
    - brpc::policy::RtmpChunkStream::OnPlay
    - LOG
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - Socket*::NotifyOnFailed
    - PLOG
    - std::string::empty
    - WriteAMFString
    - Str2RtmpPublishType
    - CHECK
    - WriteAMFNumber
    - stream_multiplexing
    - butil::intrusive_ptr<RtmpServerStream>
    - RtmpService*::NewStream
    - ReadAMFNumber
    - butil::intrusive_ptr::stream_id
    - RtmpPublishType2Str
    - WriteAMFObject
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFObject::SetBool
    - butil::intrusive_ptr::OnStopInternal
    - AMFOutputStream::good
    - bthread_id_create
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - Socket*::ReAddress
    - AMFField*::IsString
    - berror
    - AMFField*::AsString
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - butil::IOBuf::IOBuf
    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:
    - error_cstr
    - remote_side
    - PLOG
    - stream_id
    - ok
    - LOG
    - SendStopMessage
    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:
    - RtmpInfo::set_level
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_description
    - ReadAMFBool
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPause
    - AMFInputStream*::check_emptiness
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - TemporaryArrayBuilder::size
    - MakeUnsentControlMessage
    - next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - TemporaryArrayBuilder::push
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - OnPlayContinuation::OnPlayContinuation
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - OnPlayContinuation*::player_stream::OnPlay
    - butil::IOBuf::clear
    - ReadAMFString
    - release
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - ReadAMFNull
    - RTMP_WARNING
    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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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:
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - LOG
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - error_cstr
    - remote_side
    - PLOG
    - WriteAMFString
    - CHECK
    - ok
    - socket
    - SendStopMessage
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - AMFOutputStream::good
    - stream_id
    - WriteWithoutOvercrowded
    - chunk_stream_id
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - OnPublishContinuation::OnPublishContinuation
    - ReadAMFString
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPublish
    - ReadAMFNull
    - RtmpPublishType2Str
    - RTMP_WARNING
    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:
    - PLOG
    - WriteAMFString
    - WriteAMFUndefined
    - Socket*::Write
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - Socket*::remote_side
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - ReadAMFBool
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - MakeUnsentControlMessage
    - SocketMessagePtr::next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - WriteWithoutOvercrowded
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - MakeMessage
    - MakeParseError
    - butil::IOBuf*::fetch1
    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:
    - brpc::policy::IsPossiblyRtmp
    - static_cast<const Server*>
    - MakeParseError
    - LOG
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - RtmpContext::RtmpContext
    - Server*::options
    - RtmpContext*::Feed
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3544,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3553,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3554
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3554
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::Find
    - butil::gettimeofday_us
    - AMFInputStream*::popped_bytes
    - RtmpInfo::code
    - ControllerPrivateAccessor::span
    - LOG
    - Socket*::parsing_context
    - LOG_IF
    - ReadAMFUint32
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - get
    - static_cast<RtmpContext*>
    - butil::cpuwide_time_us
    - AMFField*::IsBool
    - RtmpInfo::description
    - auto::set_received_us
    - AMFField*::AsBool
    - ReadAMFObject
    - RtmpContext*::AddClientStream
    - berror
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - Controller*::SetFailed
    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: 3558
      start: 3556
    functionDepth: 0
    functionLinenumber: 3556
    functionLinenumberEnd: 3558
    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:3564,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3569,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3572,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3576,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3588,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3590,1
    - Dst: AMFObject::SetString
      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: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: AMFObject::SetString
      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: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3601,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3604,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3608,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3610,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3612,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3616,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3619,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3623,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3624
      start: 3560
    functionDepth: 2
    functionLinenumber: 3560
    functionLinenumberEnd: 3624
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - AMFObject::SetString
    - WriteAMFNull
    - description
    - play_name::empty
    - butil::IOBuf::size
    - WriteAMFUint32
    - BuiltinServiceTest::TestStatus
    - SetFailed
    - WriteAMFString
    - CHECK
    - RtmpPublishType2Str
    - static_cast<RtmpContext*>
    - WriteAMFObject
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - parsing_context
    - RtmpContext*::GetChunkStream
    - AMFOutputStream::good
    - RtmpChunkStream*::SerializeMessage
    - butil::IOBuf::IOBuf
    - publish_name::empty
    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:3635,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3638,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3643,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3652,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3654,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3663,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3667,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3669
      start: 3626
    functionDepth: 1
    functionLinenumber: 3626
    functionLinenumberEnd: 3669
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpClientStream*::options
    - ControllerPrivateAccessor::get_sending_socket
    - RtmpContext*::RemoveTransaction
    - Controller*::set_log_id
    - Controller*::call_id
    - Controller*::response
    - CHECK_LT
    - RtmpTransactionHandler*::Cancel
    - butil::BaseIteratorRangeToNumberTraits::max
    - OnServerStreamCreated::OnServerStreamCreated
    - RtmpContext*::AddTransaction
    - Controller*::log_id
    - Socket*::parsing_context
    - Controller*::SetFailed
    - Socket*::description
    - static_cast<RtmpContext*>
    - 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: 3674
      start: 3671
    functionDepth: 0
    functionLinenumber: 3671
    functionLinenumberEnd: 3674
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 4
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - bthread_usleep
    - butil::IOBuf*::cut_into_file_descriptor
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    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::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - brpc::policy::WriteBigEndian4Bytes
    - LOG
    - butil::IOBuf::append
    - adobe_hs::C1::Save
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Generate
    - butil::IOBuf::IOBuf
    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:
    - reserve
    - init
    - static_cast<void*>
    - LOG
    - memset
    - Server*::options
    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:
    - begin
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - load
    - end
    - clear
    - store
    - LOG
    - free
    - empty
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    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:
    - Socket*::SetFailed
    - butil::Status::OK
    - release
    - std::unique_ptr::reset
    - RtmpChunkStream*::SerializeMessage
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - Socket*::parsing_context
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    - static_cast<RtmpContext*>
    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:
    - load
    - store
    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
    - RtmpChunkStream::RtmpChunkStream
    - compare_exchange_strong
    - 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: 0
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 1
    functionsReached:
    - pop_back
    - empty
    - back
    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
    - empty
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    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: 1
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - stream::reset
    - LOG
    - std::unique_lock::unlock
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpStreamBase*::stream_id
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - LOG
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - erase
    - std::unique_lock::unlock
    - seek
    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:
    - RtmpConnectRequest::set_app
    - RtmpConnectRequest::set_swfurl
    - LOG
    - RtmpConnectRequest::mutable_tcurl
    - RtmpConnectRequest::set_videofunction
    - RtmpConnectRequest::set_objectencoding
    - RtmpConnectRequest::set_pageurl
    - butil::IOBuf::size
    - WriteAMFUint32
    - WriteAMFString
    - memcpy
    - RtmpConnectRequest::set_tcurl
    - app::empty
    - butil::endpoint2str
    - RtmpConnectRequest::set_audiocodecs
    - pageUrl::empty
    - swfUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - WriteAMFObject
    - WriteBigEndian4Bytes
    - std::string*::reserve
    - RtmpConnectRequest::set_flashver
    - RtmpConnectRequest::set_videocodecs
    - WriteAll
    - butil::IOBuf::append
    - RtmpConnectRequest::set_capabilities
    - tcUrl::empty
    - brpc::policy::RtmpContext::GetChunkStream
    - AMFOutputStream::good
    - flashVer::empty
    - std::string*::append
    - std::string*::push_back
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_fpad
    - app::size
    - butil::IOBuf::IOBuf
    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:
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - brpc::policy::RtmpContext::WaitForS0S1
    - MakeParseError
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForC2
    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:
    - adobe_hs::S1::Save
    - LOG
    - GetRtmpHandshakeServerRandom
    - malloc
    - brpc::policy::RtmpContext::OnChunks
    - memcpy
    - adobe_hs::C1::schema
    - butil::IOBuf::push_back
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - adobe_hs::S2::Save
    - adobe_hs::S1::Generate
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::WaitForC2
    - WriteBigEndian4Bytes
    - butil::IOBuf*::fetch
    - WriteAll
    - adobe_hs::C1::Load
    - MakeParseError
    - butil::IOBuf::append
    - GetRtmpTimestamp
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C1::digest_blk::digest
    - adobe_hs::S2::Generate
    - memcmp
    - brpc::policy::RtmpContext::SetState
    - Socket*::remote_side
    - Socket*::fd
    - butil::IOBuf::IOBuf
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::SetState
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - butil::IOBuf*::length
    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:
    - butil::IOBuf*::cutn
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpContext::SetState
    - adobe_hs::C2::Save
    - adobe_hs::C2::Generate
    - WriteAll
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - butil::IOBuf::append
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    - Socket*::fd
    - brpc::policy::RtmpContext::WaitForS2
    - butil::IOBuf*::length
    - butil::IOBuf::IOBuf
    - adobe_hs::S1::Load
    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
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - Socket*::fd
    - brpc::policy::RtmpContext::SendConnectRequest
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    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:
    - RtmpChunkStream*::Feed
    - butil::IOBuf*::fetch
    - MakeParseError
    - LOG
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::size
    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
    - brpc::policy::MakeUnsentControlMessage
    - butil::HostToNet32
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - butil::Timer::u_elapsed
    - AddChunk
    - std::min
    - LOG
    - MethodStatus*::OnResponded
    - ReadBigEndian4Bytes
    - RtmpContext*::service
    - butil::Timer::start
    - butil::IOBuf*::size
    - brpc::policy::RtmpChunkStream::OnMessage
    - butil::Timer::stop
    - msg_body::clear
    - CHECK
    - butil::IOBuf*::pop_front
    - butil::Timer::Timer
    - RtmpContext*::AddReceivedBytes
    - pthread_once
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - MakeParseError
    - MakeMessage
    - MethodStatus*::OnRequested
    - last_msg_header::is_valid
    - Socket*::remote_side
    - ReadBigEndian3Bytes
    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*::cutn
    - CHECK_LE
    - WriteBigEndian4Bytes
    - butil::IOBuf*::append
    - brpc::policy::RtmpChunkStream::connection_context
    - GetBasicHeaderLength
    - CHECK
    - std::min
    - WriteBasicHeader
    - WriteBigEndian3Bytes
    - butil::IOBuf*::size
    - WriteLittleEndian4Bytes
    - last_msg_header::is_valid
    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:
    - CommandHandlerMap::CommandHandlerMap
    - init
    - LOG
    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:
    - messagetype2str
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - CHECK_EQ
    - butil::IOBuf*::size
    - arraysize
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - Socket*::remote_side
    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: 3
    EdgeCount: 3
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - brpc::policy::RtmpChunkStream::OnPingRequest
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - ReadBigEndian4Bytes
    - data
    - size
    - 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:
    - WriteBigEndian4Bytes
    - PLOG
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::Write
    - WriteBigEndian2Bytes
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RtmpService*::OnPingResponse
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - Socket*::remote_side
    - VLOG
    - butil::intrusive_ptr::CallOnAudioMessage
    - 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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - is_video_frame_type_valid
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - is_video_codec_valid
    - VLOG
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnVideoMessage
    - 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
    - AMFInputStream::check_emptiness
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::CallOnMetaData
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnCuePoint
    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:
    - LOG_EVERY_SECOND
    - Socket*::remote_side
    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:
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    - pthread_once
    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:
    - RtmpConnectResponse::has_mode
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - RtmpConnectResponse::set_mode
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFNull
    - RtmpInfo::ShortDebugString
    - RtmpConnectResponse::has_capabilities
    - WriteAMFUint32
    - ReadAMFUint32
    - TemporaryArrayBuilder::size
    - next::reset
    - MakeUnsentControlMessage
    - RtmpConnectResponse::ShortDebugString
    - PLOG
    - std::string::empty
    - WriteAMFString
    - RtmpConnectRequest*::objectencoding
    - TemporaryArrayBuilder::push
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - RtmpConnectResponse::has_fmsver
    - RtmpConnectResponse::set_capabilities
    - WriteAMFObject
    - Socket*::SetFailed
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::IOBuf::clear
    - AMFOutputStream::good
    - ReadAMFObject
    - RtmpInfo::set_objectencoding
    - release
    - Socket*::Write
    - Socket*::remote_side
    - RtmpConnectResponse::set_fmsver
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    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:
    - ReadAMFUint32
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - ReadAMFObject
    - RtmpContext*::RemoveTransaction
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - CHECK
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - RtmpInfo::ShortDebugString
    - butil::intrusive_ptr::get
    - static_cast<RtmpClientStream*>
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::OnPublish
    - AMFObject::Find
    - bthread_id_error
    - RtmpInfo::set_description
    - brpc::policy::RtmpChunkStream::OnPlay
    - LOG
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - Socket*::NotifyOnFailed
    - PLOG
    - std::string::empty
    - WriteAMFString
    - Str2RtmpPublishType
    - CHECK
    - WriteAMFNumber
    - stream_multiplexing
    - butil::intrusive_ptr<RtmpServerStream>
    - RtmpService*::NewStream
    - ReadAMFNumber
    - butil::intrusive_ptr::stream_id
    - RtmpPublishType2Str
    - WriteAMFObject
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFObject::SetBool
    - butil::intrusive_ptr::OnStopInternal
    - AMFOutputStream::good
    - bthread_id_create
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - Socket*::ReAddress
    - AMFField*::IsString
    - berror
    - AMFField*::AsString
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - butil::IOBuf::IOBuf
    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:
    - error_cstr
    - remote_side
    - PLOG
    - stream_id
    - ok
    - LOG
    - SendStopMessage
    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:
    - RtmpInfo::set_level
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_description
    - ReadAMFBool
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPause
    - AMFInputStream*::check_emptiness
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - TemporaryArrayBuilder::size
    - MakeUnsentControlMessage
    - next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - TemporaryArrayBuilder::push
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - OnPlayContinuation::OnPlayContinuation
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - OnPlayContinuation*::player_stream::OnPlay
    - butil::IOBuf::clear
    - ReadAMFString
    - release
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - ReadAMFNull
    - RTMP_WARNING
    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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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:
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - LOG
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - error_cstr
    - remote_side
    - PLOG
    - WriteAMFString
    - CHECK
    - ok
    - socket
    - SendStopMessage
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - AMFOutputStream::good
    - stream_id
    - WriteWithoutOvercrowded
    - chunk_stream_id
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - OnPublishContinuation::OnPublishContinuation
    - ReadAMFString
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPublish
    - ReadAMFNull
    - RtmpPublishType2Str
    - RTMP_WARNING
    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:
    - PLOG
    - WriteAMFString
    - WriteAMFUndefined
    - Socket*::Write
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - Socket*::remote_side
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - ReadAMFBool
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - MakeUnsentControlMessage
    - SocketMessagePtr::next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - WriteWithoutOvercrowded
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - MakeMessage
    - MakeParseError
    - butil::IOBuf*::fetch1
    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:
    - brpc::policy::IsPossiblyRtmp
    - static_cast<const Server*>
    - MakeParseError
    - LOG
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - RtmpContext::RtmpContext
    - Server*::options
    - RtmpContext*::Feed
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3544,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3553,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3554
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3554
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::Find
    - butil::gettimeofday_us
    - AMFInputStream*::popped_bytes
    - RtmpInfo::code
    - ControllerPrivateAccessor::span
    - LOG
    - Socket*::parsing_context
    - LOG_IF
    - ReadAMFUint32
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - get
    - static_cast<RtmpContext*>
    - butil::cpuwide_time_us
    - AMFField*::IsBool
    - RtmpInfo::description
    - auto::set_received_us
    - AMFField*::AsBool
    - ReadAMFObject
    - RtmpContext*::AddClientStream
    - berror
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - Controller*::SetFailed
    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: 3558
      start: 3556
    functionDepth: 0
    functionLinenumber: 3556
    functionLinenumberEnd: 3558
    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:3564,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3569,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3572,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3576,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3588,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3590,1
    - Dst: AMFObject::SetString
      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: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: AMFObject::SetString
      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: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3601,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3604,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3608,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3610,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3612,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3616,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3619,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3623,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3624
      start: 3560
    functionDepth: 2
    functionLinenumber: 3560
    functionLinenumberEnd: 3624
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - AMFObject::SetString
    - WriteAMFNull
    - description
    - play_name::empty
    - butil::IOBuf::size
    - WriteAMFUint32
    - BuiltinServiceTest::TestStatus
    - SetFailed
    - WriteAMFString
    - CHECK
    - RtmpPublishType2Str
    - static_cast<RtmpContext*>
    - WriteAMFObject
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - parsing_context
    - RtmpContext*::GetChunkStream
    - AMFOutputStream::good
    - RtmpChunkStream*::SerializeMessage
    - butil::IOBuf::IOBuf
    - publish_name::empty
    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:3635,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3638,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3643,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3652,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3654,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3663,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3667,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3669
      start: 3626
    functionDepth: 1
    functionLinenumber: 3626
    functionLinenumberEnd: 3669
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpClientStream*::options
    - ControllerPrivateAccessor::get_sending_socket
    - RtmpContext*::RemoveTransaction
    - Controller*::set_log_id
    - Controller*::call_id
    - Controller*::response
    - CHECK_LT
    - RtmpTransactionHandler*::Cancel
    - butil::BaseIteratorRangeToNumberTraits::max
    - OnServerStreamCreated::OnServerStreamCreated
    - RtmpContext*::AddTransaction
    - Controller*::log_id
    - Socket*::parsing_context
    - Controller*::SetFailed
    - Socket*::description
    - static_cast<RtmpContext*>
    - 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: 3674
      start: 3671
    functionDepth: 0
    functionLinenumber: 3671
    functionLinenumberEnd: 3674
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 5
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 6
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - bthread_usleep
    - butil::IOBuf*::cut_into_file_descriptor
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    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::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - brpc::policy::WriteBigEndian4Bytes
    - LOG
    - butil::IOBuf::append
    - adobe_hs::C1::Save
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Generate
    - butil::IOBuf::IOBuf
    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:
    - reserve
    - init
    - static_cast<void*>
    - LOG
    - memset
    - Server*::options
    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:
    - begin
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - load
    - end
    - clear
    - store
    - LOG
    - free
    - empty
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    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:
    - Socket*::SetFailed
    - butil::Status::OK
    - release
    - std::unique_ptr::reset
    - RtmpChunkStream*::SerializeMessage
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - Socket*::parsing_context
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    - static_cast<RtmpContext*>
    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:
    - load
    - store
    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
    - RtmpChunkStream::RtmpChunkStream
    - compare_exchange_strong
    - 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: 0
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 2
    functionsReached:
    - pop_back
    - empty
    - back
    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
    - empty
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    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: 1
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - stream::reset
    - LOG
    - std::unique_lock::unlock
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpStreamBase*::stream_id
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - LOG
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - erase
    - std::unique_lock::unlock
    - seek
    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:
    - RtmpConnectRequest::set_app
    - RtmpConnectRequest::set_swfurl
    - LOG
    - RtmpConnectRequest::mutable_tcurl
    - RtmpConnectRequest::set_videofunction
    - RtmpConnectRequest::set_objectencoding
    - RtmpConnectRequest::set_pageurl
    - butil::IOBuf::size
    - WriteAMFUint32
    - WriteAMFString
    - memcpy
    - RtmpConnectRequest::set_tcurl
    - app::empty
    - butil::endpoint2str
    - RtmpConnectRequest::set_audiocodecs
    - pageUrl::empty
    - swfUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - WriteAMFObject
    - WriteBigEndian4Bytes
    - std::string*::reserve
    - RtmpConnectRequest::set_flashver
    - RtmpConnectRequest::set_videocodecs
    - WriteAll
    - butil::IOBuf::append
    - RtmpConnectRequest::set_capabilities
    - tcUrl::empty
    - brpc::policy::RtmpContext::GetChunkStream
    - AMFOutputStream::good
    - flashVer::empty
    - std::string*::append
    - std::string*::push_back
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_fpad
    - app::size
    - butil::IOBuf::IOBuf
    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:
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - brpc::policy::RtmpContext::WaitForS0S1
    - MakeParseError
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForC2
    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:
    - adobe_hs::S1::Save
    - LOG
    - GetRtmpHandshakeServerRandom
    - malloc
    - brpc::policy::RtmpContext::OnChunks
    - memcpy
    - adobe_hs::C1::schema
    - butil::IOBuf::push_back
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - adobe_hs::S2::Save
    - adobe_hs::S1::Generate
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::WaitForC2
    - WriteBigEndian4Bytes
    - butil::IOBuf*::fetch
    - WriteAll
    - adobe_hs::C1::Load
    - MakeParseError
    - butil::IOBuf::append
    - GetRtmpTimestamp
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C1::digest_blk::digest
    - adobe_hs::S2::Generate
    - memcmp
    - brpc::policy::RtmpContext::SetState
    - Socket*::remote_side
    - Socket*::fd
    - butil::IOBuf::IOBuf
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::SetState
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - butil::IOBuf*::length
    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:
    - butil::IOBuf*::cutn
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpContext::SetState
    - adobe_hs::C2::Save
    - adobe_hs::C2::Generate
    - WriteAll
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - butil::IOBuf::append
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    - Socket*::fd
    - brpc::policy::RtmpContext::WaitForS2
    - butil::IOBuf*::length
    - butil::IOBuf::IOBuf
    - adobe_hs::S1::Load
    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
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - Socket*::fd
    - brpc::policy::RtmpContext::SendConnectRequest
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    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:
    - RtmpChunkStream*::Feed
    - butil::IOBuf*::fetch
    - MakeParseError
    - LOG
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::size
    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
    - brpc::policy::MakeUnsentControlMessage
    - butil::HostToNet32
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - butil::Timer::u_elapsed
    - AddChunk
    - std::min
    - LOG
    - MethodStatus*::OnResponded
    - ReadBigEndian4Bytes
    - RtmpContext*::service
    - butil::Timer::start
    - butil::IOBuf*::size
    - brpc::policy::RtmpChunkStream::OnMessage
    - butil::Timer::stop
    - msg_body::clear
    - CHECK
    - butil::IOBuf*::pop_front
    - butil::Timer::Timer
    - RtmpContext*::AddReceivedBytes
    - pthread_once
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - MakeParseError
    - MakeMessage
    - MethodStatus*::OnRequested
    - last_msg_header::is_valid
    - Socket*::remote_side
    - ReadBigEndian3Bytes
    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*::cutn
    - CHECK_LE
    - WriteBigEndian4Bytes
    - butil::IOBuf*::append
    - brpc::policy::RtmpChunkStream::connection_context
    - GetBasicHeaderLength
    - CHECK
    - std::min
    - WriteBasicHeader
    - WriteBigEndian3Bytes
    - butil::IOBuf*::size
    - WriteLittleEndian4Bytes
    - last_msg_header::is_valid
    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:
    - CommandHandlerMap::CommandHandlerMap
    - init
    - LOG
    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:
    - messagetype2str
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - CHECK_EQ
    - butil::IOBuf*::size
    - arraysize
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - Socket*::remote_side
    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: 3
    EdgeCount: 3
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - brpc::policy::RtmpChunkStream::OnPingRequest
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - ReadBigEndian4Bytes
    - data
    - size
    - 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:
    - WriteBigEndian4Bytes
    - PLOG
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::Write
    - WriteBigEndian2Bytes
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RtmpService*::OnPingResponse
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - Socket*::remote_side
    - VLOG
    - butil::intrusive_ptr::CallOnAudioMessage
    - 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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - is_video_frame_type_valid
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - is_video_codec_valid
    - VLOG
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnVideoMessage
    - 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
    - AMFInputStream::check_emptiness
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::CallOnMetaData
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnCuePoint
    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:
    - LOG_EVERY_SECOND
    - Socket*::remote_side
    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:
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    - pthread_once
    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:
    - RtmpConnectResponse::has_mode
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - RtmpConnectResponse::set_mode
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFNull
    - RtmpInfo::ShortDebugString
    - RtmpConnectResponse::has_capabilities
    - WriteAMFUint32
    - ReadAMFUint32
    - TemporaryArrayBuilder::size
    - next::reset
    - MakeUnsentControlMessage
    - RtmpConnectResponse::ShortDebugString
    - PLOG
    - std::string::empty
    - WriteAMFString
    - RtmpConnectRequest*::objectencoding
    - TemporaryArrayBuilder::push
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - RtmpConnectResponse::has_fmsver
    - RtmpConnectResponse::set_capabilities
    - WriteAMFObject
    - Socket*::SetFailed
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::IOBuf::clear
    - AMFOutputStream::good
    - ReadAMFObject
    - RtmpInfo::set_objectencoding
    - release
    - Socket*::Write
    - Socket*::remote_side
    - RtmpConnectResponse::set_fmsver
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    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:
    - ReadAMFUint32
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - ReadAMFObject
    - RtmpContext*::RemoveTransaction
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - CHECK
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - RtmpInfo::ShortDebugString
    - butil::intrusive_ptr::get
    - static_cast<RtmpClientStream*>
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::OnPublish
    - AMFObject::Find
    - bthread_id_error
    - RtmpInfo::set_description
    - brpc::policy::RtmpChunkStream::OnPlay
    - LOG
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - Socket*::NotifyOnFailed
    - PLOG
    - std::string::empty
    - WriteAMFString
    - Str2RtmpPublishType
    - CHECK
    - WriteAMFNumber
    - stream_multiplexing
    - butil::intrusive_ptr<RtmpServerStream>
    - RtmpService*::NewStream
    - ReadAMFNumber
    - butil::intrusive_ptr::stream_id
    - RtmpPublishType2Str
    - WriteAMFObject
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFObject::SetBool
    - butil::intrusive_ptr::OnStopInternal
    - AMFOutputStream::good
    - bthread_id_create
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - Socket*::ReAddress
    - AMFField*::IsString
    - berror
    - AMFField*::AsString
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - butil::IOBuf::IOBuf
    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:
    - error_cstr
    - remote_side
    - PLOG
    - stream_id
    - ok
    - LOG
    - SendStopMessage
    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:
    - RtmpInfo::set_level
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_description
    - ReadAMFBool
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPause
    - AMFInputStream*::check_emptiness
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - TemporaryArrayBuilder::size
    - MakeUnsentControlMessage
    - next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - TemporaryArrayBuilder::push
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - OnPlayContinuation::OnPlayContinuation
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - OnPlayContinuation*::player_stream::OnPlay
    - butil::IOBuf::clear
    - ReadAMFString
    - release
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - ReadAMFNull
    - RTMP_WARNING
    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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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:
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - LOG
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - error_cstr
    - remote_side
    - PLOG
    - WriteAMFString
    - CHECK
    - ok
    - socket
    - SendStopMessage
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - AMFOutputStream::good
    - stream_id
    - WriteWithoutOvercrowded
    - chunk_stream_id
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - OnPublishContinuation::OnPublishContinuation
    - ReadAMFString
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPublish
    - ReadAMFNull
    - RtmpPublishType2Str
    - RTMP_WARNING
    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:
    - PLOG
    - WriteAMFString
    - WriteAMFUndefined
    - Socket*::Write
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - Socket*::remote_side
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - ReadAMFBool
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - MakeUnsentControlMessage
    - SocketMessagePtr::next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - WriteWithoutOvercrowded
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - MakeMessage
    - MakeParseError
    - butil::IOBuf*::fetch1
    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:
    - brpc::policy::IsPossiblyRtmp
    - static_cast<const Server*>
    - MakeParseError
    - LOG
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - RtmpContext::RtmpContext
    - Server*::options
    - RtmpContext*::Feed
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3544,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3553,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3554
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3554
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::Find
    - butil::gettimeofday_us
    - AMFInputStream*::popped_bytes
    - RtmpInfo::code
    - ControllerPrivateAccessor::span
    - LOG
    - Socket*::parsing_context
    - LOG_IF
    - ReadAMFUint32
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - get
    - static_cast<RtmpContext*>
    - butil::cpuwide_time_us
    - AMFField*::IsBool
    - RtmpInfo::description
    - auto::set_received_us
    - AMFField*::AsBool
    - ReadAMFObject
    - RtmpContext*::AddClientStream
    - berror
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - Controller*::SetFailed
    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: 3558
      start: 3556
    functionDepth: 0
    functionLinenumber: 3556
    functionLinenumberEnd: 3558
    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:3564,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3569,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3572,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3576,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3588,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3590,1
    - Dst: AMFObject::SetString
      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: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: AMFObject::SetString
      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: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3601,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3604,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3608,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3610,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3612,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3616,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3619,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3623,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3624
      start: 3560
    functionDepth: 2
    functionLinenumber: 3560
    functionLinenumberEnd: 3624
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - AMFObject::SetString
    - WriteAMFNull
    - description
    - play_name::empty
    - butil::IOBuf::size
    - WriteAMFUint32
    - BuiltinServiceTest::TestStatus
    - SetFailed
    - WriteAMFString
    - CHECK
    - RtmpPublishType2Str
    - static_cast<RtmpContext*>
    - WriteAMFObject
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - parsing_context
    - RtmpContext*::GetChunkStream
    - AMFOutputStream::good
    - RtmpChunkStream*::SerializeMessage
    - butil::IOBuf::IOBuf
    - publish_name::empty
    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:3635,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3638,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3643,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3652,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3654,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3663,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3667,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3669
      start: 3626
    functionDepth: 1
    functionLinenumber: 3626
    functionLinenumberEnd: 3669
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpClientStream*::options
    - ControllerPrivateAccessor::get_sending_socket
    - RtmpContext*::RemoveTransaction
    - Controller*::set_log_id
    - Controller*::call_id
    - Controller*::response
    - CHECK_LT
    - RtmpTransactionHandler*::Cancel
    - butil::BaseIteratorRangeToNumberTraits::max
    - OnServerStreamCreated::OnServerStreamCreated
    - RtmpContext*::AddTransaction
    - Controller*::log_id
    - Socket*::parsing_context
    - Controller*::SetFailed
    - Socket*::description
    - static_cast<RtmpContext*>
    - 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: 3674
      start: 3671
    functionDepth: 0
    functionLinenumber: 3671
    functionLinenumberEnd: 3674
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - butil::IOBuf::IOBuf
    - butil::fast_rand
    - append
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 7
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - const_cast<void*>
    - LOG
    - EVP_sha256
    - LOG_ONCE
    - EVP_Digest
    - HMAC
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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:
    - memcpy
    - ReadBigEndian4Bytes
    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::random1_size
    - WriteBigEndian4Bytes
    - brpc::policy::adobe_hs::DigestBlock::random0
    - static_cast<char*>
    - brpc::policy::adobe_hs::DigestBlock::random1
    - memcpy
    - brpc::policy::adobe_hs::DigestBlock::random0_size
    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:
    - WriteBigEndian4Bytes
    - static_cast<char*>
    - brpc::policy::adobe_hs::C1S1Base::Save
    - CHECK
    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:
    - SaveWithoutDigest
    - WriteBigEndian4Bytes
    - memcpy
    - LOG
    - openssl_HMACsha256
    - brpc::policy::adobe_hs::C1S1Base::Save
    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: 2
    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::Generate
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - bvar::get_uptime
    - digest
    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:
    - brpc::policy::adobe_hs::C1::ComputeDigest
    - static_cast<const uint8_t*>
    - LOG
    - brpc::policy::adobe_hs::C1::Load
    - ReadBigEndian4Bytes
    - digest
    - memcmp
    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: 2
    functionLinenumber: 474
    functionLinenumberEnd: 492
    functionName: brpc::policy::adobe_hs::S1::Generate
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 8
    functionsReached:
    - DHWrapper::initialize
    - schema
    - LOG
    - key
    - brpc::policy::adobe_hs::S1::Generate
    - bvar::get_uptime
    - DHWrapper::copy_shared_key
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - key_blk::key
    - digest
    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:
    - digest
    - static_cast<const uint8_t*>
    - LOG
    - ReadBigEndian4Bytes
    - brpc::policy::adobe_hs::S1::ComputeDigest
    - brpc::policy::adobe_hs::S1::Load
    - memcmp
    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:
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - butil::fast_rand
    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:
    - memcpy
    - memcmp
    - brpc::policy::adobe_hs::C2S2Base::ComputeDigest
    - LOG
    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:
    - bthread_usleep
    - butil::IOBuf*::cut_into_file_descriptor
    - LOG_EVERY_SECOND
    - butil::IOBuf*::empty
    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::WriteAll
    - brpc::policy::GetRtmpHandshakeClientRandom
    - brpc::policy::WriteBigEndian4Bytes
    - LOG
    - butil::IOBuf::append
    - adobe_hs::C1::Save
    - brpc::policy::GetRtmpTimestamp
    - adobe_hs::C1::Generate
    - butil::IOBuf::IOBuf
    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:
    - reserve
    - init
    - static_cast<void*>
    - LOG
    - memset
    - Server*::options
    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:
    - begin
    - butil::FlatMap<uint32_t, RtmpTransactionHandler*>::iterator::second::Cancel
    - load
    - end
    - clear
    - store
    - LOG
    - free
    - empty
    - butil::FlatMap<uint32_t, MessageStreamInfo>::iterator::second::stream::is_server_stream
    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:
    - Socket*::SetFailed
    - butil::Status::OK
    - release
    - std::unique_ptr::reset
    - RtmpChunkStream*::SerializeMessage
    - RtmpUnsentMessage*::AppendAndDestroySelf
    - Socket*::parsing_context
    - RtmpContext*::GetChunkStream
    - BuiltinServiceTest::TestStatus
    - static_cast<RtmpContext*>
    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:
    - load
    - store
    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
    - RtmpChunkStream::RtmpChunkStream
    - compare_exchange_strong
    - 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: 0
    functionLinenumber: 886
    functionLinenumberEnd: 896
    functionName: brpc::policy::RtmpContext::AllocateChunkStreamId
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 3
    functionsReached:
    - pop_back
    - empty
    - back
    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
    - empty
    - back
    - butil::BaseIteratorRangeToNumberTraits::max
    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: 1
    functionLinenumber: 931
    functionLinenumberEnd: 952
    functionName: brpc::policy::RtmpContext::AddClientStream
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpStreamBase*::stream_id
    - stream::reset
    - LOG
    - std::unique_lock::unlock
    - brpc::policy::RtmpContext::AllocateChunkStreamId
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - RtmpStreamBase*::stream_id
    - butil::intrusive_ptr::swap
    - RtmpStreamBase*::is_client_stream
    - LOG
    - brpc::policy::RtmpContext::DeallocateMessageStreamId
    - brpc::policy::RtmpContext::DeallocateChunkStreamId
    - erase
    - std::unique_lock::unlock
    - seek
    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:
    - RtmpConnectRequest::set_app
    - RtmpConnectRequest::set_swfurl
    - LOG
    - RtmpConnectRequest::mutable_tcurl
    - RtmpConnectRequest::set_videofunction
    - RtmpConnectRequest::set_objectencoding
    - RtmpConnectRequest::set_pageurl
    - butil::IOBuf::size
    - WriteAMFUint32
    - WriteAMFString
    - memcpy
    - RtmpConnectRequest::set_tcurl
    - app::empty
    - butil::endpoint2str
    - RtmpConnectRequest::set_audiocodecs
    - pageUrl::empty
    - swfUrl::empty
    - RtmpConnectRequest::set_stream_multiplexing
    - WriteAMFObject
    - WriteBigEndian4Bytes
    - std::string*::reserve
    - RtmpConnectRequest::set_flashver
    - RtmpConnectRequest::set_videocodecs
    - WriteAll
    - butil::IOBuf::append
    - RtmpConnectRequest::set_capabilities
    - tcUrl::empty
    - brpc::policy::RtmpContext::GetChunkStream
    - AMFOutputStream::good
    - flashVer::empty
    - std::string*::append
    - std::string*::push_back
    - RtmpChunkStream*::SerializeMessage
    - RtmpConnectRequest::set_fpad
    - app::size
    - butil::IOBuf::IOBuf
    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:
    - brpc::policy::RtmpContext::WaitForC0C1orSimpleRtmp
    - brpc::policy::RtmpContext::OnChunks
    - CHECK
    - brpc::policy::RtmpContext::WaitForS0S1
    - MakeParseError
    - Socket*::CreatedByConnect
    - brpc::policy::RtmpContext::WaitForS2
    - brpc::policy::RtmpContext::WaitForC2
    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:
    - adobe_hs::S1::Save
    - LOG
    - GetRtmpHandshakeServerRandom
    - malloc
    - brpc::policy::RtmpContext::OnChunks
    - memcpy
    - adobe_hs::C1::schema
    - butil::IOBuf::push_back
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    - adobe_hs::S2::Save
    - adobe_hs::S1::Generate
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::WaitForC2
    - WriteBigEndian4Bytes
    - butil::IOBuf*::fetch
    - WriteAll
    - adobe_hs::C1::Load
    - MakeParseError
    - butil::IOBuf::append
    - GetRtmpTimestamp
    - adobe_hs::S1::digest_blk::digest
    - adobe_hs::C1::digest_blk::digest
    - adobe_hs::S2::Generate
    - memcmp
    - brpc::policy::RtmpContext::SetState
    - Socket*::remote_side
    - Socket*::fd
    - butil::IOBuf::IOBuf
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpContext::SetState
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - butil::IOBuf*::length
    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:
    - butil::IOBuf*::cutn
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpContext::SetState
    - adobe_hs::C2::Save
    - adobe_hs::C2::Generate
    - WriteAll
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - butil::IOBuf::append
    - adobe_hs::S1::digest_blk::digest
    - GetRtmpTimestamp
    - Socket*::fd
    - brpc::policy::RtmpContext::WaitForS2
    - butil::IOBuf*::length
    - butil::IOBuf::IOBuf
    - adobe_hs::S1::Load
    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
    - brpc::policy::RtmpContext::OnChunks
    - MakeParseError
    - Socket*::remote_side
    - LOG
    - Socket*::fd
    - brpc::policy::RtmpContext::SendConnectRequest
    - butil::IOBuf*::length
    - butil::IOBuf*::pop_front
    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:
    - RtmpChunkStream*::Feed
    - butil::IOBuf*::fetch
    - MakeParseError
    - LOG
    - brpc::policy::RtmpContext::GetChunkStream
    - butil::IOBuf*::fetch1
    - butil::IOBuf*::size
    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
    - brpc::policy::MakeUnsentControlMessage
    - butil::HostToNet32
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - Expose
    - MethodStatus::MethodStatus
    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:
    - butil::Timer::u_elapsed
    - AddChunk
    - std::min
    - LOG
    - MethodStatus*::OnResponded
    - ReadBigEndian4Bytes
    - RtmpContext*::service
    - butil::Timer::start
    - butil::IOBuf*::size
    - brpc::policy::RtmpChunkStream::OnMessage
    - butil::Timer::stop
    - msg_body::clear
    - CHECK
    - butil::IOBuf*::pop_front
    - butil::Timer::Timer
    - RtmpContext*::AddReceivedBytes
    - pthread_once
    - butil::IOBuf*::cutn
    - butil::IOBuf*::fetch
    - brpc::policy::RtmpChunkStream::connection_context
    - VLOG
    - MakeParseError
    - MakeMessage
    - MethodStatus*::OnRequested
    - last_msg_header::is_valid
    - Socket*::remote_side
    - ReadBigEndian3Bytes
    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*::cutn
    - CHECK_LE
    - WriteBigEndian4Bytes
    - butil::IOBuf*::append
    - brpc::policy::RtmpChunkStream::connection_context
    - GetBasicHeaderLength
    - CHECK
    - std::min
    - WriteBasicHeader
    - WriteBigEndian3Bytes
    - butil::IOBuf*::size
    - WriteLittleEndian4Bytes
    - last_msg_header::is_valid
    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:
    - CommandHandlerMap::CommandHandlerMap
    - init
    - LOG
    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:
    - messagetype2str
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - CHECK_EQ
    - butil::IOBuf*::size
    - arraysize
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    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:
    - butil::IOBuf*::cutn
    - RTMP_ERROR
    - ReadBigEndian4Bytes
    - Socket*::remote_side
    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: 3
    EdgeCount: 3
    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:
    - butil::IOBuf*::cutn
    - brpc::policy::RtmpChunkStream::OnStreamEOF
    - brpc::policy::RtmpChunkStream::OnPingRequest
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::OnStreamBegin
    - brpc::policy::RtmpChunkStream::OnPingResponse
    - brpc::policy::RtmpChunkStream::OnBufferEmpty
    - brpc::policy::RtmpChunkStream::OnBufferReady
    - brpc::policy::RtmpChunkStream::OnStreamDry
    - brpc::policy::RtmpChunkStream::OnSetBufferLength
    - ReadBigEndian2Bytes
    - brpc::policy::RtmpChunkStream::OnStreamIsRecorded
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - size
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - ReadBigEndian4Bytes
    - data
    - size
    - 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:
    - WriteBigEndian4Bytes
    - PLOG
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::Write
    - WriteBigEndian2Bytes
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RtmpService*::OnPingResponse
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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:
    - RTMP_ERROR
    - VLOG
    - Socket*::remote_side
    - ReadBigEndian4Bytes
    - data
    - size
    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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - Socket*::remote_side
    - VLOG
    - butil::intrusive_ptr::CallOnAudioMessage
    - 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::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - is_video_frame_type_valid
    - butil::IOBuf*::swap
    - butil::IOBuf*::cut1
    - is_video_codec_valid
    - VLOG
    - Socket*::remote_side
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnVideoMessage
    - 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
    - AMFInputStream::check_emptiness
    - butil::intrusive_ptr::intrusive_ptr
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - butil::intrusive_ptr::CallOnMetaData
    - LOG_EVERY_SECOND
    - butil::intrusive_ptr::CallOnCuePoint
    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:
    - LOG_EVERY_SECOND
    - Socket*::remote_side
    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:
    - ReadAMFString
    - RTMP_ERROR
    - Socket*::remote_side
    - seek
    - pthread_once
    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:
    - RtmpConnectResponse::has_mode
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - RtmpConnectResponse::set_mode
    - RtmpConnectRequest*::ShortDebugString
    - WriteAMFNull
    - RtmpInfo::ShortDebugString
    - RtmpConnectResponse::has_capabilities
    - WriteAMFUint32
    - ReadAMFUint32
    - TemporaryArrayBuilder::size
    - next::reset
    - MakeUnsentControlMessage
    - RtmpConnectResponse::ShortDebugString
    - PLOG
    - std::string::empty
    - WriteAMFString
    - RtmpConnectRequest*::objectencoding
    - TemporaryArrayBuilder::push
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - RtmpConnectResponse::has_fmsver
    - RtmpConnectResponse::set_capabilities
    - WriteAMFObject
    - Socket*::SetFailed
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::IOBuf::clear
    - AMFOutputStream::good
    - ReadAMFObject
    - RtmpInfo::set_objectencoding
    - release
    - Socket*::Write
    - Socket*::remote_side
    - RtmpConnectResponse::set_fmsver
    - butil::IOBuf::IOBuf
    - RtmpConnectResponse::set_create_stream_with_play_or_publish
    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:
    - ReadAMFUint32
    - RtmpConnectResponse::create_stream_with_play_or_publish
    - ReadAMFObject
    - RtmpContext*::RemoveTransaction
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - CHECK
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - RtmpTransactionHandler*::Run
    - Socket*::parsing_context
    - static_cast<RtmpContext*>
    - 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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - Socket*::remote_side
    - RtmpInfo::ShortDebugString
    - butil::intrusive_ptr::get
    - static_cast<RtmpClientStream*>
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - RtmpInfo::set_level
    - brpc::policy::RtmpChunkStream::OnPublish
    - AMFObject::Find
    - bthread_id_error
    - RtmpInfo::set_description
    - brpc::policy::RtmpChunkStream::OnPlay
    - LOG
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - Socket*::NotifyOnFailed
    - PLOG
    - std::string::empty
    - WriteAMFString
    - Str2RtmpPublishType
    - CHECK
    - WriteAMFNumber
    - stream_multiplexing
    - butil::intrusive_ptr<RtmpServerStream>
    - RtmpService*::NewStream
    - ReadAMFNumber
    - butil::intrusive_ptr::stream_id
    - RtmpPublishType2Str
    - WriteAMFObject
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFObject::SetBool
    - butil::intrusive_ptr::OnStopInternal
    - AMFOutputStream::good
    - bthread_id_create
    - Socket*::fail_me_at_server_stop
    - ReadAMFObject
    - Socket*::ReAddress
    - AMFField*::IsString
    - berror
    - AMFField*::AsString
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - butil::IOBuf::IOBuf
    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:
    - error_cstr
    - remote_side
    - PLOG
    - stream_id
    - ok
    - LOG
    - SendStopMessage
    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:
    - RtmpInfo::set_level
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_description
    - ReadAMFBool
    - WriteAMFNull
    - butil::intrusive_ptr::get
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPause
    - AMFInputStream*::check_emptiness
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - TemporaryArrayBuilder::size
    - MakeUnsentControlMessage
    - next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - TemporaryArrayBuilder::push
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - OnPlayContinuation::OnPlayContinuation
    - WriteBigEndian4Bytes
    - RtmpInfo::set_code
    - RtmpUnsentMessage::RtmpUnsentMessage
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - OnPlayContinuation*::player_stream::OnPlay
    - butil::IOBuf::clear
    - ReadAMFString
    - release
    - Socket*::remote_side
    - WriteWithoutOvercrowded
    - OnPlayContinuation*::player_stream::reset
    - WriteAMFBool
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - ReadAMFUint32
    - ReadAMFObject
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - ReadAMFNull
    - RTMP_WARNING
    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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - bthread_id_error
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - butil::intrusive_ptr::get
    - 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:
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - LOG
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - error_cstr
    - remote_side
    - PLOG
    - WriteAMFString
    - CHECK
    - ok
    - socket
    - SendStopMessage
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - AMFOutputStream::good
    - stream_id
    - WriteWithoutOvercrowded
    - chunk_stream_id
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - static_cast<RtmpServerStream*>
    - OnPublishContinuation::OnPublishContinuation
    - ReadAMFString
    - Str2RtmpPublishType
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - Socket*::remote_side
    - butil::intrusive_ptr::get
    - OnPublishContinuation*::publish_stream::reset
    - butil::intrusive_ptr::detach
    - RtmpServerStream*::OnPublish
    - ReadAMFNull
    - RtmpPublishType2Str
    - RTMP_WARNING
    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:
    - PLOG
    - WriteAMFString
    - WriteAMFUndefined
    - Socket*::Write
    - CHECK
    - WriteAMFNull
    - WriteAMFNumber
    - Socket*::remote_side
    - AMFOutputStream::good
    - butil::IOBuf::IOBuf
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - ReadAMFString
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - SendFMLEStartResponse
    - ReadAMFNumber
    - ReadAMFNull
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - Socket*::Write
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - static_cast<RtmpServerStream*>
    - RtmpInfo::set_level
    - RtmpInfo::set_description
    - ReadAMFBool
    - butil::intrusive_ptr::get
    - WriteAMFNull
    - butil::IOBuf::size
    - WriteAMFUint32
    - ReadAMFNull
    - ReadAMFUint32
    - butil::intrusive_ptr::intrusive_ptr
    - MakeUnsentControlMessage
    - SocketMessagePtr::next::reset
    - PLOG
    - WriteAMFString
    - brpc::policy::RtmpChunkStream::chunk_stream_id
    - CHECK
    - WriteAMFNumber
    - WriteBigEndian2Bytes
    - ReadAMFNumber
    - WriteAMFObject
    - RtmpUnsentMessage::RtmpUnsentMessage
    - RtmpInfo::set_code
    - WriteBigEndian4Bytes
    - brpc::policy::RtmpChunkStream::connection_context
    - RTMP_ERROR
    - AMFOutputStream::good
    - WriteWithoutOvercrowded
    - Socket*::remote_side
    - butil::IOBuf::IOBuf
    - RTMP_WARNING
    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:
    - MakeMessage
    - MakeParseError
    - butil::IOBuf*::fetch1
    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:
    - brpc::policy::IsPossiblyRtmp
    - static_cast<const Server*>
    - MakeParseError
    - LOG
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - RtmpContext::RtmpContext
    - Server*::options
    - RtmpContext*::Feed
    - static_cast<RtmpContext*>
    - ParseResult::is_ok
    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: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3544,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3545,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: AMFInputStream*::popped_bytes
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3546,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3547,1
    - Dst: Controller*::OnVersionedRPCReturned
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3553,1
    CyclomaticComplexity: 18
    EdgeCount: 18
    ICount: 42
    argCount: 3
    argNames:
    - error
    - istream
    - socket
    argTypes:
    - bool
    - AMFInputStream*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3554
      start: 3482
    functionDepth: 1
    functionLinenumber: 3482
    functionLinenumberEnd: 3554
    functionName: brpc::policy::OnServerStreamCreated::Run
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - AMFObject::Find
    - butil::gettimeofday_us
    - AMFInputStream*::popped_bytes
    - RtmpInfo::code
    - ControllerPrivateAccessor::span
    - LOG
    - Socket*::parsing_context
    - LOG_IF
    - ReadAMFUint32
    - auto::set_response_size
    - auto::set_start_parse_us
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - get
    - static_cast<RtmpContext*>
    - butil::cpuwide_time_us
    - AMFField*::IsBool
    - RtmpInfo::description
    - auto::set_received_us
    - AMFField*::AsBool
    - ReadAMFObject
    - RtmpContext*::AddClientStream
    - berror
    - Controller*::OnVersionedRPCReturned
    - bthread_id_lock
    - Controller*::SetFailed
    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: 3558
      start: 3556
    functionDepth: 0
    functionLinenumber: 3556
    functionLinenumberEnd: 3558
    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:3564,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3567,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3569,1
    - Dst: description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3570,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3572,1
    - Dst: WriteAMFString
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3576,1
    - Dst: WriteAMFUint32
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3577,1
    - Dst: RtmpContext*::can_stream_be_created_with_play_or_publish
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3588,1
    - Dst: publish_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3590,1
    - Dst: AMFObject::SetString
      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: RtmpPublishType2Str
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3594,1
    - Dst: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3595,1
    - Dst: play_name::empty
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3596,1
    - Dst: AMFObject::SetString
      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: WriteAMFObject
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3599,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3601,1
    - Dst: WriteAMFNull
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3604,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: AMFOutputStream::good
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3606,1
    - Dst: RtmpContext*::GetChunkStream
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3608,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3610,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3612,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3616,1
    - Dst: RtmpChunkStream*::SerializeMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3619,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3620,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3621,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3623,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 40
    argCount: 2
    argNames:
    - out
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3624
      start: 3560
    functionDepth: 2
    functionLinenumber: 3560
    functionLinenumberEnd: 3624
    functionName: brpc::policy::RtmpCreateStreamMessage::AppendAndDestroySelf
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - AMFObject::SetString
    - WriteAMFNull
    - description
    - play_name::empty
    - butil::IOBuf::size
    - WriteAMFUint32
    - BuiltinServiceTest::TestStatus
    - SetFailed
    - WriteAMFString
    - CHECK
    - RtmpPublishType2Str
    - static_cast<RtmpContext*>
    - WriteAMFObject
    - RtmpContext*::can_stream_be_created_with_play_or_publish
    - parsing_context
    - RtmpContext*::GetChunkStream
    - AMFOutputStream::good
    - RtmpChunkStream*::SerializeMessage
    - butil::IOBuf::IOBuf
    - publish_name::empty
    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:3635,1
    - Dst: static_cast<RtmpContext*>
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3636,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3638,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3639,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3643,1
    - Dst: CHECK_LT
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3648,1
    - Dst: Controller*::log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3649,1
    - Dst: RtmpContext*::RemoveTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3652,1
    - Dst: RtmpTransactionHandler*::Cancel
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3654,1
    - Dst: Controller*::call_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: OnServerStreamCreated::OnServerStreamCreated
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3657,1
    - Dst: RtmpContext*::AddTransaction
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3658,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3659,1
    - Dst: Controller*::set_log_id
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3663,1
    - Dst: RtmpCreateStreamMessage::RtmpCreateStreamMessage
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3664,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3665,1
    - Dst: RtmpClientStream*::options
      Src: /src/brpc/src/brpc/policy/rtmp_protocol.cpp:3667,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 2
    argNames:
    - user_message
    - cntl
    argTypes:
    - SocketMessage**
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 3669
      start: 3626
    functionDepth: 1
    functionLinenumber: 3626
    functionLinenumberEnd: 3669
    functionName: brpc::policy::PackRtmpRequest
    functionSourceFile: /src/brpc/src/brpc/policy/rtmp_protocol.cpp
    functionUses: 0
    functionsReached:
    - RtmpCreateStreamMessage::RtmpCreateStreamMessage
    - RtmpClientStream*::options
    - ControllerPrivateAccessor::get_sending_socket
    - RtmpContext*::RemoveTransaction
    - Controller*::set_log_id
    - Controller*::call_id
    - Controller*::response
    - CHECK_LT
    - RtmpTransactionHandler*::Cancel
    - butil::BaseIteratorRangeToNumberTraits::max
    - OnServerStreamCreated::OnServerStreamCreated
    - RtmpContext*::AddTransaction
    - Controller*::log_id
    - Socket*::parsing_context
    - Controller*::SetFailed
    - Socket*::description
    - static_cast<RtmpContext*>
    - 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: 3674
      start: 3671
    functionDepth: 0
    functionLinenumber: 3671
    functionLinenumberEnd: 3674
    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: 1
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    - PipelinedInfo::reset
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::clear
    - butil::IOBuf::IOBuf
    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
    - clear
    - butil::return_object
    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: 1
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    - PipelinedInfo::reset
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::clear
    - butil::IOBuf::IOBuf
    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
    - clear
    - butil::return_object
    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: 1
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    - PipelinedInfo::reset
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::clear
    - butil::IOBuf::IOBuf
    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
    - clear
    - butil::return_object
    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: 1
    functionLinenumber: 33
    functionLinenumberEnd: 49
    functionName: brpc::policy::MostCommonMessage
    functionSourceFile: /src/brpc/src/brpc/policy/most_common_message.h
    functionUses: 0
    functionsReached:
    - butil::return_object
    - PipelinedInfo::reset
    - butil::get_object<MostCommonMessage>
    - butil::IOBuf::clear
    - butil::IOBuf::IOBuf
    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
    - clear
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - 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: brpc::MysqlTransactionOptions
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlTransactionOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:72,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' channel'
    - ' socket'
    - connection_type
    argTypes:
    - Channel
    - SocketUniquePtr
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 73
    functionName: brpc::MysqlTransaction::MysqlTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - reset
    - release
    linkageType: ''
    returnType: void
    signature: "void MysqlTransaction::MysqlTransaction(Channel& channel,\n                                          SocketUniquePtr&
      socket,\n                                          ConnectionType connection_type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:76,1
    - Dst: rollback
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.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: MysqlTransaction::~MysqlTransaction()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - rollback
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MysqlTransaction::~MysqlTransaction()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlTransaction::DoneTransaction
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::MysqlTransaction::commit
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransaction::DoneTransaction
    linkageType: ''
    returnType: bool
    signature: bool MysqlTransaction::commit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlTransaction::DoneTransaction
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: brpc::MysqlTransaction::rollback
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransaction::DoneTransaction
    linkageType: ''
    returnType: bool
    signature: bool MysqlTransaction::rollback()
  - 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: brpc::MysqlTransactionOptions
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 24
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlTransactionOptions()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:72,1
    - Dst: release
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:72,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' channel'
    - ' socket'
    - connection_type
    argTypes:
    - Channel
    - SocketUniquePtr
    - ConnectionType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 68
    functionDepth: 1
    functionLinenumber: 68
    functionLinenumberEnd: 73
    functionName: brpc::MysqlTransaction::MysqlTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - reset
    - release
    linkageType: ''
    returnType: void
    signature: "void MysqlTransaction::MysqlTransaction(Channel& channel,\n                                          SocketUniquePtr&
      socket,\n                                          ConnectionType connection_type)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:76,1
    - Dst: rollback
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.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: MysqlTransaction::~MysqlTransaction()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - rollback
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MysqlTransaction::~MysqlTransaction()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlTransaction::DoneTransaction
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:80,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 79
    functionDepth: 1
    functionLinenumber: 79
    functionLinenumberEnd: 81
    functionName: brpc::MysqlTransaction::commit
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransaction::DoneTransaction
    linkageType: ''
    returnType: bool
    signature: bool MysqlTransaction::commit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlTransaction::DoneTransaction
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h:84,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 85
    functionName: brpc::MysqlTransaction::rollback
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.h
    functionUses: 0
    functionsReached:
    - brpc::MysqlTransaction::DoneTransaction
    linkageType: ''
    returnType: bool
    signature: bool MysqlTransaction::rollback()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.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::MysqlTransaction::GetSocketId
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp
    functionUses: 0
    functionsReached:
    - id
    linkageType: ''
    returnType: SocketId
    signature: SocketId MysqlTransaction::GetSocketId() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: MysqlRequest::Query
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:42,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:46,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:47,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:48,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:51,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:54,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:54,1
    - Dst: ReturnToPool
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:58,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:60,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - command
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 62
    functionName: brpc::MysqlTransaction::DoneTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp
    functionUses: 4
    functionsReached:
    - CallMethod
    - Controller::Failed
    - ReturnToPool
    - MysqlRequest::Query
    - MysqlResponse::reply
    - LOG
    - Controller::ErrorText
    - reset
    linkageType: ''
    returnType: bool
    signature: bool MysqlTransaction::DoneTransaction(const char* command)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:69,1
    - Dst: MysqlRequest::Query
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:86,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:87,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:87,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:94,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:95,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:96,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:98,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:99,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:99,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:103,1
    - Dst: MysqlTransactionUniquePtr::reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:105,1
    - Dst: Controller::connection_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:105,1
    - Dst: MysqlTransaction::MysqlTransaction
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:105,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:113,1
    - Dst: Controller::connection_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:114,1
    - Dst: SocketUniquePtr::ReturnToPool
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:120,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:120,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 2
    argNames:
    - ' channel'
    - ' opts'
    argTypes:
    - Channel
    - MysqlTransactionOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 123
    functionName: brpc::NewMysqlTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp
    functionUses: 24
    functionsReached:
    - CallMethod
    - Controller::Failed
    - Controller::connection_type
    - MysqlTransactionUniquePtr::reset
    - options
    - MysqlTransaction::MysqlTransaction
    - MysqlRequest::Query
    - MysqlResponse::reply
    - LOG
    - Controller::ErrorText
    - ControllerPrivateAccessor
    - SocketUniquePtr::ReturnToPool
    - std::stringstream::str
    linkageType: ''
    returnType: MysqlTransactionUniquePtr
    signature: "MysqlTransactionUniquePtr NewMysqlTransaction(Channel& channel,\n
      \                                             const MysqlTransactionOptions&
      opts)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.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::MysqlTransaction::GetSocketId
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp
    functionUses: 0
    functionsReached:
    - id
    linkageType: ''
    returnType: SocketId
    signature: SocketId MysqlTransaction::GetSocketId() const
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: MysqlRequest::Query
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:42,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:46,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:47,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:48,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:51,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:54,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:54,1
    - Dst: ReturnToPool
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:58,1
    - Dst: reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:60,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - command
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 62
      start: 36
    functionDepth: 1
    functionLinenumber: 36
    functionLinenumberEnd: 62
    functionName: brpc::MysqlTransaction::DoneTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp
    functionUses: 4
    functionsReached:
    - CallMethod
    - Controller::Failed
    - ReturnToPool
    - MysqlRequest::Query
    - MysqlResponse::reply
    - LOG
    - Controller::ErrorText
    - reset
    linkageType: ''
    returnType: bool
    signature: bool MysqlTransaction::DoneTransaction(const char* command)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:69,1
    - Dst: MysqlRequest::Query
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:86,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:86,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:87,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:87,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:94,1
    - Dst: CallMethod
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:95,1
    - Dst: Controller::Failed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:96,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:98,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:99,1
    - Dst: MysqlResponse::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:99,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:101,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:103,1
    - Dst: MysqlTransactionUniquePtr::reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:105,1
    - Dst: Controller::connection_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:105,1
    - Dst: MysqlTransaction::MysqlTransaction
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:105,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:113,1
    - Dst: Controller::connection_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:114,1
    - Dst: SocketUniquePtr::ReturnToPool
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:120,1
    - Dst: Controller::ErrorText
      Src: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp:120,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 2
    argNames:
    - ' channel'
    - ' opts'
    argTypes:
    - Channel
    - MysqlTransactionOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 64
    functionDepth: 1
    functionLinenumber: 64
    functionLinenumberEnd: 123
    functionName: brpc::NewMysqlTransaction
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_transaction.cpp
    functionUses: 24
    functionsReached:
    - CallMethod
    - Controller::Failed
    - Controller::connection_type
    - MysqlTransactionUniquePtr::reset
    - options
    - MysqlTransaction::MysqlTransaction
    - MysqlRequest::Query
    - MysqlResponse::reply
    - LOG
    - Controller::ErrorText
    - ControllerPrivateAccessor
    - SocketUniquePtr::ReturnToPool
    - std::stringstream::str
    linkageType: ''
    returnType: MysqlTransactionUniquePtr
    signature: "MysqlTransactionUniquePtr NewMysqlTransaction(Channel& channel,\n
      \                                             const MysqlTransactionOptions&
      opts)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 1
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 1
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 1
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 1
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 2
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 2
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 2
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 2
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 3
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 3
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 3
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 3
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 4
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 4
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 4
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 4
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 5
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 5
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 5
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 5
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 6
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 6
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 6
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 6
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 7
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: EVP_Digest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    - Dst: EVP_sha256
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:37,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 3
    argNames:
    - data
    - len
    - out
    argTypes:
    - unsigned char*
    - size_t
    - unsigned char[]
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 35
    functionDepth: 0
    functionLinenumber: 35
    functionLinenumberEnd: 39
    functionName: brpc::policy::mysql::Sha256Bytes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 7
    functionsReached:
    - EVP_sha256
    - EVP_Digest
    linkageType: ''
    returnType: bool
    signature: bool Sha256Bytes(const unsigned char* data, size_t len, unsigned char
      out[32])
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:45,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:46,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:48,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:49,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:55,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:56,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:57,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:60,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:63,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:64,1
    - Dst: butil::SHA1HashBytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:67,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:71,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 43
    functionDepth: 1
    functionLinenumber: 43
    functionLinenumberEnd: 74
    functionName: brpc::policy::mysql::NativePasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - butil::SHA1HashBytes
    - data
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string NativePasswordScramble(const butil::StringPiece& salt,\n
      \                                  const butil::StringPiece& password)"
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:78,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:79,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:81,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:82,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:88,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:89,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:90,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:94,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:95,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:99,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:100,1
    - Dst: brpc::policy::mysql::Sha256Bytes
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:103,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:109,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 22
    argCount: 2
    argNames:
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::CachingSha2PasswordScramble
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - std::string
    - reinterpret_cast<const unsigned char*>
    - empty
    - data
    - brpc::policy::mysql::Sha256Bytes
    - size
    - static_cast<char>
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordScramble(const butil::StringPiece&
      salt,\n                                        const butil::StringPiece& password)"
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:119,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:121,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:122,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:126,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:127,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:128,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:129,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:131,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:132,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:134,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:137,1
    - Dst: PEM_read_bio_PUBKEY
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:139,1
    - Dst: BIO_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:140,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:142,1
    - Dst: EVP_PKEY_CTX_new
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:145,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:147,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:148,1
    - Dst: EVP_PKEY_encrypt_init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:153,1
    - Dst: EVP_PKEY_CTX_set_rsa_padding
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:154,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:157,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:159,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:160,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:163,1
    - Dst: EVP_PKEY_encrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:164,1
    - Dst: reinterpret_cast<unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:166,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:167,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:168,1
    - Dst: std::string::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:169,1
    - Dst: std::string::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:172,1
    - Dst: EVP_PKEY_CTX_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:175,1
    - Dst: EVP_PKEY_free
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:176,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 41
    argCount: 3
    argNames:
    - ' server_pubkey_pem'
    - ' salt'
    - ' password'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 178
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 178
    functionName: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 7
    functionsReached:
    - reinterpret_cast<const unsigned char*>
    - empty
    - EVP_PKEY_CTX_new
    - EVP_PKEY_CTX_free
    - EVP_PKEY_encrypt_init
    - EVP_PKEY_CTX_set_rsa_padding
    - BIO_free
    - std::string
    - static_cast<int>
    - data
    - std::string::clear
    - size
    - static_cast<char>
    - EVP_PKEY_encrypt
    - EVP_PKEY_free
    - std::string::resize
    - PEM_read_bio_PUBKEY
    - BIO_new_mem_buf
    - reinterpret_cast<unsigned char*>
    - std::string::data
    - std::string::size
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordRsaEncrypt(\n        const butil::StringPiece&
      server_pubkey_pem,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      password)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:181,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:182,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:185,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:186,1
    - Dst: std::string::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:187,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' password'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 189
      start: 180
    functionDepth: 1
    functionLinenumber: 180
    functionLinenumberEnd: 189
    functionName: brpc::policy::mysql::CachingSha2PasswordCleartext
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 7
    functionsReached:
    - std::string
    - std::string::append
    - std::string::push_back
    - empty
    - std::string::reserve
    - data
    - size
    linkageType: ''
    returnType: std::string
    signature: std::string CachingSha2PasswordCleartext(const butil::StringPiece&
      password)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:197,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp:199,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - ' password'
    - ' salt'
    - ' server_pubkey_pem'
    - is_ssl
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 200
      start: 191
    functionDepth: 2
    functionLinenumber: 191
    functionLinenumberEnd: 200
    functionName: brpc::policy::mysql::CachingSha2PasswordSlowPath
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_scramble.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    linkageType: ''
    returnType: std::string
    signature: "std::string CachingSha2PasswordSlowPath(\n        const butil::StringPiece&
      password,\n        const butil::StringPiece& salt,\n        const butil::StringPiece&
      server_pubkey_pem,\n        bool is_ssl)"
  - 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::CheckParsed::CheckParsed
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckParsed()
  - 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: brpc::CheckParsed::is_parsed
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_parsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::CheckParsed::set_parsed
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_parsed()
  - 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: brpc::MysqlReply::PrepareOk::Header::Header
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 367
    functionName: brpc::MysqlReply::ResultSetHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResultSetHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 379
    functionName: brpc::MysqlReply::ResultSet
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResultSet()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 413
    functionDepth: 0
    functionLinenumber: 413
    functionLinenumberEnd: 416
    functionName: brpc::MysqlReply::MysqlReply
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::MysqlReply()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:418,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - MysqlReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 420
    functionName: brpc::MysqlReply::Swap
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Swap(MysqlReply& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - MysqlReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 424
    functionName: '& operator<<(std::ostream& os, const MysqlReply& r)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MysqlReply& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 427
    functionName: brpc::MysqlReply::type
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlRspType
    signature: MysqlRspType MysqlReply::type() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:429,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:432,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:432,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 435
    functionName: '& MysqlReply::auth() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_auth
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::Auth
    signature: MysqlReply::Auth & MysqlReply::auth() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_auth_more_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:437,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:440,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:440,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 436
    functionDepth: 1
    functionLinenumber: 436
    functionLinenumberEnd: 443
    functionName: '& MysqlReply::auth_more_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_auth_more_data
    linkageType: ''
    returnType: MysqlReply::AuthMoreData
    signature: MysqlReply::AuthMoreData & MysqlReply::auth_more_data() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_prepare_ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:445,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:448,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:448,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 444
    functionDepth: 1
    functionLinenumber: 444
    functionLinenumberEnd: 451
    functionName: '& MysqlReply::prepare_ok() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_prepare_ok
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::PrepareOk
    signature: MysqlReply::PrepareOk & MysqlReply::prepare_ok() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:453,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:456,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 459
    functionName: '& MysqlReply::ok() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_ok
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::Ok
    signature: MysqlReply::Ok & MysqlReply::ok() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_error
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:461,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:464,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:464,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 467
    functionName: '& MysqlReply::error() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_error
    linkageType: ''
    returnType: MysqlReply::Error
    signature: MysqlReply::Error & MysqlReply::error() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_eof
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:469,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:472,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 468
    functionDepth: 1
    functionLinenumber: 468
    functionLinenumberEnd: 475
    functionName: '& MysqlReply::eof() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_eof
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::Eof
    signature: MysqlReply::Eof & MysqlReply::eof() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlReply::is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:477,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:480,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:480,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 482
    functionName: brpc::MysqlReply::column_count
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 2
    functionsReached:
    - brpc::MysqlReply::is_resultset
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::column_count() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:485,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:489,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:493,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:493,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 495
    functionName: '& MysqlReply::column(const uint64_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_resultset
    linkageType: ''
    returnType: MysqlReply::Column
    signature: MysqlReply::Column & MysqlReply::column(const uint64_t index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlReply::is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:497,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:500,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:500,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 496
    functionDepth: 1
    functionLinenumber: 496
    functionLinenumberEnd: 502
    functionName: brpc::MysqlReply::row_count
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 2
    functionsReached:
    - brpc::MysqlReply::is_resultset
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::row_count() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:505,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:507,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:517,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 519
    functionName: '& MysqlReply::next() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_resultset
    linkageType: ''
    returnType: MysqlReply::Row
    signature: MysqlReply::Row & MysqlReply::next() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 522
    functionName: brpc::MysqlReply::is_auth
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_auth() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 525
    functionName: brpc::MysqlReply::is_auth_more_data
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_auth_more_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 528
    functionName: brpc::MysqlReply::is_prepare_ok
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_prepare_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 531
    functionName: brpc::MysqlReply::is_ok
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 534
    functionName: brpc::MysqlReply::is_error
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 537
    functionName: brpc::MysqlReply::is_eof
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_eof() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 540
    functionName: brpc::MysqlReply::is_resultset
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_resultset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 549
    functionName: MysqlReply::Auth::Auth()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Auth::Auth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 552
    functionName: MysqlReply::Auth::protocol() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Auth::protocol() const
  - 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: MysqlReply::Auth::version() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: MysqlReply::Auth::thread_id() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::Auth::thread_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 561
    functionName: MysqlReply::Auth::salt() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::salt() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 564
    functionName: MysqlReply::Auth::capability() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Auth::capability() const
  - 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: MysqlReply::Auth::collation() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Auth::collation() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 570
    functionName: MysqlReply::Auth::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Auth::status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 573
    functionName: MysqlReply::Auth::extended_capability() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Auth::extended_capability() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 576
    functionName: MysqlReply::Auth::auth_plugin_length() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Auth::auth_plugin_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: MysqlReply::Auth::salt2() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::salt2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 580
    functionDepth: 0
    functionLinenumber: 580
    functionLinenumberEnd: 582
    functionName: MysqlReply::Auth::auth_plugin() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::auth_plugin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 584
    functionName: MysqlReply::AuthMoreData::AuthMoreData()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::AuthMoreData::AuthMoreData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: MysqlReply::AuthMoreData::data() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::AuthMoreData::data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 590
    functionName: MysqlReply::AuthMoreData::seq() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::AuthMoreData::seq() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 592
    functionName: MysqlReply::PrepareOk::PrepareOk()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::PrepareOk::PrepareOk()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 596
    functionName: MysqlReply::PrepareOk::stmt_id() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::PrepareOk::stmt_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 599
    functionName: MysqlReply::PrepareOk::column_count() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::PrepareOk::column_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 602
    functionName: MysqlReply::PrepareOk::param_count() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::PrepareOk::param_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 605
    functionName: MysqlReply::PrepareOk::warning() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::PrepareOk::warning() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:611,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 613
    functionName: '& MysqlReply::PrepareOk::param(uint16_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: MysqlReply::Column
    signature: MysqlReply::Column & MysqlReply::PrepareOk::param(uint16_t index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:618,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 621
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 621
    functionName: '& MysqlReply::PrepareOk::column(uint16_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: MysqlReply::Column
    signature: MysqlReply::Column & MysqlReply::PrepareOk::column(uint16_t index)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 623
    functionName: MysqlReply::Ok::Ok()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Ok::Ok()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 626
    functionName: MysqlReply::Ok::affect_row() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Ok::affect_row() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 629
    functionName: MysqlReply::Ok::index() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Ok::index() const
  - 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: MysqlReply::Ok::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Ok::status() const
  - 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: MysqlReply::Ok::warning() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Ok::warning() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 638
    functionName: MysqlReply::Ok::msg() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Ok::msg() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 640
    functionName: MysqlReply::Error::Error()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Error::Error()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: MysqlReply::Error::errcode() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Error::errcode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 646
    functionName: MysqlReply::Error::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Error::status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 647
    functionDepth: 0
    functionLinenumber: 647
    functionLinenumberEnd: 649
    functionName: MysqlReply::Error::msg() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Error::msg() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 651
    functionName: MysqlReply::Eof::Eof()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Eof::Eof()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 652
    functionDepth: 0
    functionLinenumber: 652
    functionLinenumberEnd: 654
    functionName: MysqlReply::Eof::warning() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Eof::warning() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 657
    functionName: MysqlReply::Eof::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Eof::status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 659
    functionName: MysqlReply::Column::Column()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Column::Column()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 662
      start: 660
    functionDepth: 0
    functionLinenumber: 660
    functionLinenumberEnd: 662
    functionName: MysqlReply::Column::catalog() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::catalog() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 665
    functionName: MysqlReply::Column::database() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::database() const
  - 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: MysqlReply::Column::table() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::table() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 669
    functionDepth: 0
    functionLinenumber: 669
    functionLinenumberEnd: 671
    functionName: MysqlReply::Column::origin_table() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::origin_table() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 672
    functionDepth: 0
    functionLinenumber: 672
    functionLinenumberEnd: 674
    functionName: MysqlReply::Column::name() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 677
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 677
    functionName: MysqlReply::Column::origin_name() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::origin_name() const
  - 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: MysqlReply::Column::charset() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Column::charset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 683
    functionName: MysqlReply::Column::length() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::Column::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 686
    functionName: MysqlReply::Column::type() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlFieldType
    signature: MysqlFieldType MysqlReply::Column::type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 687
    functionDepth: 0
    functionLinenumber: 687
    functionLinenumberEnd: 689
    functionName: MysqlReply::Column::flag() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlFieldFlag
    signature: MysqlFieldFlag MysqlReply::Column::flag() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 692
    functionName: MysqlReply::Column::decimal() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Column::decimal() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 694
    functionName: MysqlReply::Row::Row()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Row::Row()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 695
    functionDepth: 0
    functionLinenumber: 695
    functionLinenumberEnd: 697
    functionName: MysqlReply::Row::field_count() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Row::field_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 698
    functionDepth: 1
    functionLinenumber: 698
    functionLinenumberEnd: 705
    functionName: '& MysqlReply::Row::field(const uint64_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: MysqlReply::Field
    signature: MysqlReply::Field & MysqlReply::Row::field(const uint64_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 707
    functionDepth: 0
    functionLinenumber: 707
    functionLinenumberEnd: 708
    functionName: MysqlReply::Field::Field()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Field::Field()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_stiny
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:710,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:713,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:713,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 709
    functionDepth: 1
    functionLinenumber: 709
    functionLinenumberEnd: 716
    functionName: MysqlReply::Field::stiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_stiny
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: int8_t
    signature: int8_t MysqlReply::Field::stiny() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_tiny
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:718,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:721,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:721,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 724
    functionName: MysqlReply::Field::tiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_tiny
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Field::tiny() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_ssmall
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:726,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:729,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:729,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 725
    functionDepth: 1
    functionLinenumber: 725
    functionLinenumberEnd: 732
    functionName: MysqlReply::Field::ssmall() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - MysqlFieldTypeToString
    - CHECK
    - is_ssmall
    linkageType: ''
    returnType: int16_t
    signature: int16_t MysqlReply::Field::ssmall() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_small
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:734,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:737,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 733
    functionDepth: 1
    functionLinenumber: 733
    functionLinenumberEnd: 740
    functionName: MysqlReply::Field::small() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - MysqlFieldTypeToString
    - CHECK
    - is_small
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Field::small() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_sinteger
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:742,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:745,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:745,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 748
    functionName: MysqlReply::Field::sinteger() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_sinteger
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: int32_t
    signature: int32_t MysqlReply::Field::sinteger() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_integer
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:750,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:753,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:753,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 749
    functionDepth: 1
    functionLinenumber: 749
    functionLinenumberEnd: 756
    functionName: MysqlReply::Field::integer() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_integer
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::Field::integer() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_sbigint
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:758,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:761,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:761,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 757
    functionDepth: 1
    functionLinenumber: 757
    functionLinenumberEnd: 764
    functionName: MysqlReply::Field::sbigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlFieldTypeToString
    - is_sbigint
    linkageType: ''
    returnType: int64_t
    signature: int64_t MysqlReply::Field::sbigint() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_bigint
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:766,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:769,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 765
    functionDepth: 1
    functionLinenumber: 765
    functionLinenumberEnd: 772
    functionName: MysqlReply::Field::bigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_bigint
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Field::bigint() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_float32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:774,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:777,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:777,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 773
    functionDepth: 1
    functionLinenumber: 773
    functionLinenumberEnd: 780
    functionName: MysqlReply::Field::float32() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_float32
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: float
    signature: float MysqlReply::Field::float32() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_float64
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:782,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:785,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 788
    functionName: MysqlReply::Field::float64() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_float64
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: double
    signature: double MysqlReply::Field::float64() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:790,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:793,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:793,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:795,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 789
    functionDepth: 1
    functionLinenumber: 789
    functionLinenumberEnd: 796
    functionName: MysqlReply::Field::string() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_string
    - MysqlFieldTypeToString
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Field::string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 799
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 799
    functionName: MysqlReply::Field::is_stiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_stiny() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 802
    functionName: MysqlReply::Field::is_tiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_tiny() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 803
    functionDepth: 0
    functionLinenumber: 803
    functionLinenumberEnd: 806
    functionName: MysqlReply::Field::is_ssmall() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_ssmall() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 807
    functionDepth: 0
    functionLinenumber: 807
    functionLinenumberEnd: 810
    functionName: MysqlReply::Field::is_small() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_small() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 814
    functionName: MysqlReply::Field::is_sinteger() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_sinteger() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 818
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 818
    functionName: MysqlReply::Field::is_integer() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_integer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 821
    functionName: MysqlReply::Field::is_sbigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_sbigint() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: MysqlReply::Field::is_bigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_bigint() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 827
    functionName: MysqlReply::Field::is_float32() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_float32() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 830
    functionName: MysqlReply::Field::is_float64() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_float64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 843
    functionName: MysqlReply::Field::is_string() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 844
    functionDepth: 0
    functionLinenumber: 844
    functionLinenumberEnd: 846
    functionName: MysqlReply::Field::is_nil() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_nil() const
  - 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::CheckParsed::CheckParsed
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void CheckParsed()
  - 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: brpc::CheckParsed::is_parsed
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool is_parsed() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::CheckParsed::set_parsed
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_parsed()
  - 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: brpc::MysqlReply::PrepareOk::Header::Header
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void Header()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 367
      start: 367
    functionDepth: 0
    functionLinenumber: 367
    functionLinenumberEnd: 367
    functionName: brpc::MysqlReply::ResultSetHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResultSetHeader()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 377
    functionDepth: 0
    functionLinenumber: 377
    functionLinenumberEnd: 379
    functionName: brpc::MysqlReply::ResultSet
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ResultSet()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 416
      start: 413
    functionDepth: 0
    functionLinenumber: 413
    functionLinenumberEnd: 416
    functionName: brpc::MysqlReply::MysqlReply
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::MysqlReply()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:418,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' other'
    argTypes:
    - MysqlReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 417
    functionDepth: 0
    functionLinenumber: 417
    functionLinenumberEnd: 420
    functionName: brpc::MysqlReply::Swap
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Swap(MysqlReply& other)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:422,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - MysqlReply
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 421
    functionDepth: 0
    functionLinenumber: 421
    functionLinenumberEnd: 424
    functionName: '& operator<<(std::ostream& os, const MysqlReply& r)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MysqlReply& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 427
      start: 425
    functionDepth: 0
    functionLinenumber: 425
    functionLinenumberEnd: 427
    functionName: brpc::MysqlReply::type
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlRspType
    signature: MysqlRspType MysqlReply::type() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:429,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:432,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:432,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 435
      start: 428
    functionDepth: 1
    functionLinenumber: 428
    functionLinenumberEnd: 435
    functionName: '& MysqlReply::auth() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_auth
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::Auth
    signature: MysqlReply::Auth & MysqlReply::auth() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_auth_more_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:437,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:440,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:440,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 436
    functionDepth: 1
    functionLinenumber: 436
    functionLinenumberEnd: 443
    functionName: '& MysqlReply::auth_more_data() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_auth_more_data
    linkageType: ''
    returnType: MysqlReply::AuthMoreData
    signature: MysqlReply::AuthMoreData & MysqlReply::auth_more_data() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_prepare_ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:445,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:448,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:448,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 451
      start: 444
    functionDepth: 1
    functionLinenumber: 444
    functionLinenumberEnd: 451
    functionName: '& MysqlReply::prepare_ok() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_prepare_ok
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::PrepareOk
    signature: MysqlReply::PrepareOk & MysqlReply::prepare_ok() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:453,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:456,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:456,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 459
      start: 452
    functionDepth: 1
    functionLinenumber: 452
    functionLinenumberEnd: 459
    functionName: '& MysqlReply::ok() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_ok
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::Ok
    signature: MysqlReply::Ok & MysqlReply::ok() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_error
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:461,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:464,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:464,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 467
    functionName: '& MysqlReply::error() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_error
    linkageType: ''
    returnType: MysqlReply::Error
    signature: MysqlReply::Error & MysqlReply::error() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_eof
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:469,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:472,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:472,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 475
      start: 468
    functionDepth: 1
    functionLinenumber: 468
    functionLinenumberEnd: 475
    functionName: '& MysqlReply::eof() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_eof
    - MysqlRspTypeToString
    linkageType: ''
    returnType: MysqlReply::Eof
    signature: MysqlReply::Eof & MysqlReply::eof() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlReply::is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:477,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:480,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:480,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 482
      start: 476
    functionDepth: 1
    functionLinenumber: 476
    functionLinenumberEnd: 482
    functionName: brpc::MysqlReply::column_count
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 2
    functionsReached:
    - brpc::MysqlReply::is_resultset
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::column_count() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:485,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:489,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:493,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:493,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 483
    functionDepth: 1
    functionLinenumber: 483
    functionLinenumberEnd: 495
    functionName: '& MysqlReply::column(const uint64_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_resultset
    linkageType: ''
    returnType: MysqlReply::Column
    signature: MysqlReply::Column & MysqlReply::column(const uint64_t index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlReply::is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:497,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:500,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:500,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 502
      start: 496
    functionDepth: 1
    functionLinenumber: 496
    functionLinenumberEnd: 502
    functionName: brpc::MysqlReply::row_count
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 2
    functionsReached:
    - brpc::MysqlReply::is_resultset
    - CHECK
    - MysqlRspTypeToString
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::row_count() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_resultset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:505,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:507,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:517,1
    - Dst: MysqlRspTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:517,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 519
      start: 503
    functionDepth: 1
    functionLinenumber: 503
    functionLinenumberEnd: 519
    functionName: '& MysqlReply::next() const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlRspTypeToString
    - is_resultset
    linkageType: ''
    returnType: MysqlReply::Row
    signature: MysqlReply::Row & MysqlReply::next() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 520
    functionDepth: 0
    functionLinenumber: 520
    functionLinenumberEnd: 522
    functionName: brpc::MysqlReply::is_auth
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_auth() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 525
      start: 523
    functionDepth: 0
    functionLinenumber: 523
    functionLinenumberEnd: 525
    functionName: brpc::MysqlReply::is_auth_more_data
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_auth_more_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 526
    functionDepth: 0
    functionLinenumber: 526
    functionLinenumberEnd: 528
    functionName: brpc::MysqlReply::is_prepare_ok
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_prepare_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 529
    functionDepth: 0
    functionLinenumber: 529
    functionLinenumberEnd: 531
    functionName: brpc::MysqlReply::is_ok
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_ok() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 534
      start: 532
    functionDepth: 0
    functionLinenumber: 532
    functionLinenumberEnd: 534
    functionName: brpc::MysqlReply::is_error
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_error() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 537
      start: 535
    functionDepth: 0
    functionLinenumber: 535
    functionLinenumberEnd: 537
    functionName: brpc::MysqlReply::is_eof
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_eof() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 538
    functionDepth: 0
    functionLinenumber: 538
    functionLinenumberEnd: 540
    functionName: brpc::MysqlReply::is_resultset
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::is_resultset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 549
    functionName: MysqlReply::Auth::Auth()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Auth::Auth()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 552
      start: 550
    functionDepth: 0
    functionLinenumber: 550
    functionLinenumberEnd: 552
    functionName: MysqlReply::Auth::protocol() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Auth::protocol() const
  - 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: MysqlReply::Auth::version() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::version() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: MysqlReply::Auth::thread_id() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::Auth::thread_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 561
      start: 559
    functionDepth: 0
    functionLinenumber: 559
    functionLinenumberEnd: 561
    functionName: MysqlReply::Auth::salt() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::salt() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 564
      start: 562
    functionDepth: 0
    functionLinenumber: 562
    functionLinenumberEnd: 564
    functionName: MysqlReply::Auth::capability() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Auth::capability() const
  - 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: MysqlReply::Auth::collation() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Auth::collation() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 568
    functionDepth: 0
    functionLinenumber: 568
    functionLinenumberEnd: 570
    functionName: MysqlReply::Auth::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Auth::status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 571
    functionDepth: 0
    functionLinenumber: 571
    functionLinenumberEnd: 573
    functionName: MysqlReply::Auth::extended_capability() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Auth::extended_capability() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 574
    functionDepth: 0
    functionLinenumber: 574
    functionLinenumberEnd: 576
    functionName: MysqlReply::Auth::auth_plugin_length() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Auth::auth_plugin_length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: MysqlReply::Auth::salt2() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::salt2() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 582
      start: 580
    functionDepth: 0
    functionLinenumber: 580
    functionLinenumberEnd: 582
    functionName: MysqlReply::Auth::auth_plugin() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Auth::auth_plugin() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 584
      start: 584
    functionDepth: 0
    functionLinenumber: 584
    functionLinenumberEnd: 584
    functionName: MysqlReply::AuthMoreData::AuthMoreData()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::AuthMoreData::AuthMoreData()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: MysqlReply::AuthMoreData::data() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::AuthMoreData::data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 590
      start: 588
    functionDepth: 0
    functionLinenumber: 588
    functionLinenumberEnd: 590
    functionName: MysqlReply::AuthMoreData::seq() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::AuthMoreData::seq() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 592
      start: 592
    functionDepth: 0
    functionLinenumber: 592
    functionLinenumberEnd: 592
    functionName: MysqlReply::PrepareOk::PrepareOk()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::PrepareOk::PrepareOk()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:594,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 596
      start: 593
    functionDepth: 1
    functionLinenumber: 593
    functionLinenumberEnd: 596
    functionName: MysqlReply::PrepareOk::stmt_id() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::PrepareOk::stmt_id() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 599
      start: 597
    functionDepth: 0
    functionLinenumber: 597
    functionLinenumberEnd: 599
    functionName: MysqlReply::PrepareOk::column_count() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::PrepareOk::column_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 602
      start: 600
    functionDepth: 0
    functionLinenumber: 600
    functionLinenumberEnd: 602
    functionName: MysqlReply::PrepareOk::param_count() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::PrepareOk::param_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 605
      start: 603
    functionDepth: 0
    functionLinenumber: 603
    functionLinenumberEnd: 605
    functionName: MysqlReply::PrepareOk::warning() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::PrepareOk::warning() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:611,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 613
      start: 606
    functionDepth: 1
    functionLinenumber: 606
    functionLinenumberEnd: 613
    functionName: '& MysqlReply::PrepareOk::param(uint16_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: MysqlReply::Column
    signature: MysqlReply::Column & MysqlReply::PrepareOk::param(uint16_t index) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:618,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 621
      start: 614
    functionDepth: 1
    functionLinenumber: 614
    functionLinenumberEnd: 621
    functionName: '& MysqlReply::PrepareOk::column(uint16_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: MysqlReply::Column
    signature: MysqlReply::Column & MysqlReply::PrepareOk::column(uint16_t index)
      const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 623
      start: 623
    functionDepth: 0
    functionLinenumber: 623
    functionLinenumberEnd: 623
    functionName: MysqlReply::Ok::Ok()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Ok::Ok()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 626
      start: 624
    functionDepth: 0
    functionLinenumber: 624
    functionLinenumberEnd: 626
    functionName: MysqlReply::Ok::affect_row() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Ok::affect_row() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 629
      start: 627
    functionDepth: 0
    functionLinenumber: 627
    functionLinenumberEnd: 629
    functionName: MysqlReply::Ok::index() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Ok::index() const
  - 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: MysqlReply::Ok::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Ok::status() const
  - 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: MysqlReply::Ok::warning() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Ok::warning() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 636
    functionDepth: 0
    functionLinenumber: 636
    functionLinenumberEnd: 638
    functionName: MysqlReply::Ok::msg() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Ok::msg() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 640
      start: 640
    functionDepth: 0
    functionLinenumber: 640
    functionLinenumberEnd: 640
    functionName: MysqlReply::Error::Error()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Error::Error()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 643
      start: 641
    functionDepth: 0
    functionLinenumber: 641
    functionLinenumberEnd: 643
    functionName: MysqlReply::Error::errcode() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Error::errcode() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 644
    functionDepth: 0
    functionLinenumber: 644
    functionLinenumberEnd: 646
    functionName: MysqlReply::Error::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Error::status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 649
      start: 647
    functionDepth: 0
    functionLinenumber: 647
    functionLinenumberEnd: 649
    functionName: MysqlReply::Error::msg() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Error::msg() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 651
      start: 651
    functionDepth: 0
    functionLinenumber: 651
    functionLinenumberEnd: 651
    functionName: MysqlReply::Eof::Eof()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Eof::Eof()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 654
      start: 652
    functionDepth: 0
    functionLinenumber: 652
    functionLinenumberEnd: 654
    functionName: MysqlReply::Eof::warning() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Eof::warning() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 657
      start: 655
    functionDepth: 0
    functionLinenumber: 655
    functionLinenumberEnd: 657
    functionName: MysqlReply::Eof::status() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Eof::status() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 659
      start: 659
    functionDepth: 0
    functionLinenumber: 659
    functionLinenumberEnd: 659
    functionName: MysqlReply::Column::Column()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Column::Column()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 662
      start: 660
    functionDepth: 0
    functionLinenumber: 660
    functionLinenumberEnd: 662
    functionName: MysqlReply::Column::catalog() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::catalog() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 665
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 665
    functionName: MysqlReply::Column::database() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::database() const
  - 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: MysqlReply::Column::table() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::table() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 671
      start: 669
    functionDepth: 0
    functionLinenumber: 669
    functionLinenumberEnd: 671
    functionName: MysqlReply::Column::origin_table() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::origin_table() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 672
    functionDepth: 0
    functionLinenumber: 672
    functionLinenumberEnd: 674
    functionName: MysqlReply::Column::name() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::name() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 677
      start: 675
    functionDepth: 0
    functionLinenumber: 675
    functionLinenumberEnd: 677
    functionName: MysqlReply::Column::origin_name() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Column::origin_name() const
  - 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: MysqlReply::Column::charset() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Column::charset() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 683
      start: 681
    functionDepth: 0
    functionLinenumber: 681
    functionLinenumberEnd: 683
    functionName: MysqlReply::Column::length() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::Column::length() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 686
      start: 684
    functionDepth: 0
    functionLinenumber: 684
    functionLinenumberEnd: 686
    functionName: MysqlReply::Column::type() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlFieldType
    signature: MysqlFieldType MysqlReply::Column::type() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 689
      start: 687
    functionDepth: 0
    functionLinenumber: 687
    functionLinenumberEnd: 689
    functionName: MysqlReply::Column::flag() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlFieldFlag
    signature: MysqlFieldFlag MysqlReply::Column::flag() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 692
      start: 690
    functionDepth: 0
    functionLinenumber: 690
    functionLinenumberEnd: 692
    functionName: MysqlReply::Column::decimal() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Column::decimal() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 694
      start: 694
    functionDepth: 0
    functionLinenumber: 694
    functionLinenumberEnd: 694
    functionName: MysqlReply::Row::Row()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Row::Row()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 695
    functionDepth: 0
    functionLinenumber: 695
    functionLinenumberEnd: 697
    functionName: MysqlReply::Row::field_count() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Row::field_count() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:702,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - index
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 698
    functionDepth: 1
    functionLinenumber: 698
    functionLinenumberEnd: 705
    functionName: '& MysqlReply::Row::field(const uint64_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: MysqlReply::Field
    signature: MysqlReply::Field & MysqlReply::Row::field(const uint64_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 707
    functionDepth: 0
    functionLinenumber: 707
    functionLinenumberEnd: 708
    functionName: MysqlReply::Field::Field()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Field::Field()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_stiny
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:710,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:713,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:713,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 716
      start: 709
    functionDepth: 1
    functionLinenumber: 709
    functionLinenumberEnd: 716
    functionName: MysqlReply::Field::stiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_stiny
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: int8_t
    signature: int8_t MysqlReply::Field::stiny() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_tiny
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:718,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:721,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:721,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 724
      start: 717
    functionDepth: 1
    functionLinenumber: 717
    functionLinenumberEnd: 724
    functionName: MysqlReply::Field::tiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_tiny
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: uint8_t
    signature: uint8_t MysqlReply::Field::tiny() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_ssmall
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:726,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:729,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:729,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 732
      start: 725
    functionDepth: 1
    functionLinenumber: 725
    functionLinenumberEnd: 732
    functionName: MysqlReply::Field::ssmall() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - MysqlFieldTypeToString
    - CHECK
    - is_ssmall
    linkageType: ''
    returnType: int16_t
    signature: int16_t MysqlReply::Field::ssmall() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_small
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:734,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:737,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:737,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 740
      start: 733
    functionDepth: 1
    functionLinenumber: 733
    functionLinenumberEnd: 740
    functionName: MysqlReply::Field::small() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - MysqlFieldTypeToString
    - CHECK
    - is_small
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlReply::Field::small() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_sinteger
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:742,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:745,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:745,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 748
      start: 741
    functionDepth: 1
    functionLinenumber: 741
    functionLinenumberEnd: 748
    functionName: MysqlReply::Field::sinteger() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_sinteger
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: int32_t
    signature: int32_t MysqlReply::Field::sinteger() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_integer
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:750,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:753,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:753,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 756
      start: 749
    functionDepth: 1
    functionLinenumber: 749
    functionLinenumberEnd: 756
    functionName: MysqlReply::Field::integer() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_integer
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlReply::Field::integer() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_sbigint
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:758,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:761,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:761,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 764
      start: 757
    functionDepth: 1
    functionLinenumber: 757
    functionLinenumberEnd: 764
    functionName: MysqlReply::Field::sbigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - MysqlFieldTypeToString
    - is_sbigint
    linkageType: ''
    returnType: int64_t
    signature: int64_t MysqlReply::Field::sbigint() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_bigint
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:766,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:769,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:769,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 772
      start: 765
    functionDepth: 1
    functionLinenumber: 765
    functionLinenumberEnd: 772
    functionName: MysqlReply::Field::bigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_bigint
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t MysqlReply::Field::bigint() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_float32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:774,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:777,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:777,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 773
    functionDepth: 1
    functionLinenumber: 773
    functionLinenumberEnd: 780
    functionName: MysqlReply::Field::float32() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_float32
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: float
    signature: float MysqlReply::Field::float32() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_float64
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:782,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:785,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:785,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 788
      start: 781
    functionDepth: 1
    functionLinenumber: 781
    functionLinenumberEnd: 788
    functionName: MysqlReply::Field::float64() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - is_float64
    - CHECK
    - MysqlFieldTypeToString
    linkageType: ''
    returnType: double
    signature: double MysqlReply::Field::float64() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: is_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:790,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:793,1
    - Dst: MysqlFieldTypeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:793,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.h:795,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 796
      start: 789
    functionDepth: 1
    functionLinenumber: 789
    functionLinenumberEnd: 796
    functionName: MysqlReply::Field::string() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached:
    - CHECK
    - is_string
    - MysqlFieldTypeToString
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlReply::Field::string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 799
      start: 797
    functionDepth: 0
    functionLinenumber: 797
    functionLinenumberEnd: 799
    functionName: MysqlReply::Field::is_stiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_stiny() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 800
    functionDepth: 0
    functionLinenumber: 800
    functionLinenumberEnd: 802
    functionName: MysqlReply::Field::is_tiny() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_tiny() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 806
      start: 803
    functionDepth: 0
    functionLinenumber: 803
    functionLinenumberEnd: 806
    functionName: MysqlReply::Field::is_ssmall() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_ssmall() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 810
      start: 807
    functionDepth: 0
    functionLinenumber: 807
    functionLinenumberEnd: 810
    functionName: MysqlReply::Field::is_small() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_small() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 811
    functionDepth: 0
    functionLinenumber: 811
    functionLinenumberEnd: 814
    functionName: MysqlReply::Field::is_sinteger() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_sinteger() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 818
      start: 815
    functionDepth: 0
    functionLinenumber: 815
    functionLinenumberEnd: 818
    functionName: MysqlReply::Field::is_integer() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_integer() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 821
      start: 819
    functionDepth: 0
    functionLinenumber: 819
    functionLinenumberEnd: 821
    functionName: MysqlReply::Field::is_sbigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_sbigint() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 824
      start: 822
    functionDepth: 0
    functionLinenumber: 822
    functionLinenumberEnd: 824
    functionName: MysqlReply::Field::is_bigint() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_bigint() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 827
      start: 825
    functionDepth: 0
    functionLinenumber: 825
    functionLinenumberEnd: 827
    functionName: MysqlReply::Field::is_float32() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_float32() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 830
      start: 828
    functionDepth: 0
    functionLinenumber: 828
    functionLinenumberEnd: 830
    functionName: MysqlReply::Field::is_float64() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_float64() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 843
      start: 831
    functionDepth: 0
    functionLinenumber: 831
    functionLinenumberEnd: 843
    functionName: MysqlReply::Field::is_string() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_string() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 846
      start: 844
    functionDepth: 0
    functionLinenumber: 844
    functionLinenumberEnd: 846
    functionName: MysqlReply::Field::is_nil() const
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlReply::Field::is_nil() const
  - 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: brpc::MysqlStatementStub::NullMask
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NullMask()
  - 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: brpc::MysqlStatementStub::ParamTypes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParamTypes()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stmt
    argTypes:
    - MysqlStatement*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: brpc::MysqlStatementStub::MysqlStatementStub
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlStatementStub::MysqlStatementStub(MysqlStatement* stmt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: brpc::MysqlStatementStub::stmt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatement
    signature: MysqlStatement * MysqlStatementStub::stmt()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: '& MysqlStatementStub::execute_data()'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & MysqlStatementStub::execute_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: '& MysqlStatementStub::null_mask()'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatementStub::NullMask
    signature: MysqlStatementStub::NullMask & MysqlStatementStub::null_mask()
  - 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: '& MysqlStatementStub::param_types()'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatementStub::ParamTypes
    signature: MysqlStatementStub::ParamTypes & MysqlStatementStub::param_types()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LongData::long_data::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:108,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:108,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:108,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - param_id
    - ' value'
    argTypes:
    - uint16_t
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 110
    functionName: brpc::MysqlStatementStub::save_long_data
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached:
    - LongData::long_data::append
    - push_back
    - size
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlStatementStub::save_long_data(uint16_t param_id, const butil::StringPiece&
      value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: '& operator=(const MysqlRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: MysqlRequest
    signature: MysqlRequest & operator=(const MysqlRequest& from)
  - 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::MysqlRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.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: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::MysqlRequest::has_error
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.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: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: brpc::MysqlRequest::tx
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlTransaction
    signature: MysqlTransaction * tx() const
  - 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: brpc::MysqlRequest::stmt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatementStub
    signature: MysqlStatementStub * stmt() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: brpc::MysqlResponse::MysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 68
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse(const MysqlResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 193
    functionName: '& operator=(const MysqlResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlResponse
    signature: MysqlResponse & operator=(const MysqlResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: brpc::MysqlResponse::reply_size
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t reply_size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 215
    functionName: '& reply(size_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached:
    - reply_size
    linkageType: ''
    returnType: MysqlReply
    signature: MysqlReply & reply(size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 225
    functionName: brpc::MysqlResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.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: 58
      start: 58
    functionDepth: 0
    functionLinenumber: 58
    functionLinenumberEnd: 58
    functionName: brpc::MysqlStatementStub::NullMask
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void NullMask()
  - 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: brpc::MysqlStatementStub::ParamTypes
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void ParamTypes()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 1
    argNames:
    - stmt
    argTypes:
    - MysqlStatement*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 87
    functionName: brpc::MysqlStatementStub::MysqlStatementStub
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlStatementStub::MysqlStatementStub(MysqlStatement* stmt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: brpc::MysqlStatementStub::stmt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatement
    signature: MysqlStatement * MysqlStatementStub::stmt()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: '& MysqlStatementStub::execute_data()'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::IOBuf
    signature: butil::IOBuf & MysqlStatementStub::execute_data()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 97
    functionDepth: 0
    functionLinenumber: 97
    functionLinenumberEnd: 99
    functionName: '& MysqlStatementStub::null_mask()'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatementStub::NullMask
    signature: MysqlStatementStub::NullMask & MysqlStatementStub::null_mask()
  - 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: '& MysqlStatementStub::param_types()'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatementStub::ParamTypes
    signature: MysqlStatementStub::ParamTypes & MysqlStatementStub::param_types()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LongData::long_data::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:108,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:108,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:108,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:109,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - param_id
    - ' value'
    argTypes:
    - uint16_t
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 105
    functionDepth: 1
    functionLinenumber: 105
    functionLinenumberEnd: 110
    functionName: brpc::MysqlStatementStub::save_long_data
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached:
    - LongData::long_data::append
    - push_back
    - size
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlStatementStub::save_long_data(uint16_t param_id, const butil::StringPiece&
      value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CopyFrom
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 120
    functionDepth: 1
    functionLinenumber: 120
    functionLinenumberEnd: 123
    functionName: '& operator=(const MysqlRequest& from)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached:
    - CopyFrom
    linkageType: ''
    returnType: MysqlRequest
    signature: MysqlRequest & operator=(const MysqlRequest& from)
  - 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::MysqlRequest::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.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: 156
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 156
    functionName: brpc::MysqlRequest::has_error
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.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: 160
      start: 158
    functionDepth: 0
    functionLinenumber: 158
    functionLinenumberEnd: 160
    functionName: brpc::MysqlRequest::tx
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlTransaction
    signature: MysqlTransaction * tx() const
  - 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: brpc::MysqlRequest::stmt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlStatementStub
    signature: MysqlStatementStub * stmt() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 192
      start: 192
    functionDepth: 0
    functionLinenumber: 192
    functionLinenumberEnd: 192
    functionName: brpc::MysqlResponse::MysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 68
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse(const MysqlResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 0
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 193
    functionName: '& operator=(const MysqlResponse& from)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: MysqlResponse
    signature: MysqlResponse & operator=(const MysqlResponse& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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: brpc::MysqlResponse::reply_size
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 30
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t reply_size() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.h:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - index
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 209
    functionDepth: 0
    functionLinenumber: 209
    functionLinenumberEnd: 215
    functionName: '& reply(size_t index) const'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached:
    - reply_size
    linkageType: ''
    returnType: MysqlReply
    signature: MysqlReply & reply(size_t index) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 225
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 225
    functionName: brpc::MysqlResponse::GetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int GetCachedSize() const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:35,1
    - Dst: MysqlMakeLongDataPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:38,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:44,1
    - Dst: MysqlMakeExecutePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:46,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:48,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:51,1
    - Dst: mask::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:52,1
    - Dst: types::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:54,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - outbuf
    - stmt_id
    argTypes:
    - butil::IOBuf*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 58
    functionName: brpc::MysqlStatementStub::PackExecuteCommand
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - MysqlMakeLongDataPacket
    - clear
    - LOG
    - butil::Status::ok
    - types::clear
    - MysqlMakeExecutePacket
    - butil::Status::Status
    - mask::clear
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status MysqlStatementStub::PackExecuteCommand(butil::IOBuf*
      outbuf, uint32_t stmt_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tx
    argTypes:
    - MysqlTransaction*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 69
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(const MysqlTransaction* tx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:73,1
    - Dst: MysqlStatementStub::MysqlStatementStub
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - stmt
    argTypes:
    - MysqlStatement*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - MysqlStatementStub::MysqlStatementStub
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(MysqlStatement* stmt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:79,1
    - Dst: MysqlStatementStub::MysqlStatementStub
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - tx
    - stmt
    argTypes:
    - MysqlTransaction*
    - MysqlStatement*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 82
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - MysqlStatementStub::MysqlStatementStub
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(const MysqlTransaction* tx, MysqlStatement*
      stmt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:86,1
    - Dst: brpc::MysqlRequest::MergeFrom
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - brpc::MysqlRequest::MergeFrom
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(const MysqlRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::MysqlRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 5
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::SharedCtor()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: MysqlRequest::~MysqlRequest()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::~MysqlRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 108
    functionName: brpc::MysqlRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: brpc::MysqlRequest::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::SetCachedSize(int size) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 124
    functionName: brpc::MysqlRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: brpc::MysqlRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MysqlRequest::ByteSizeLong() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: MysqlStatementStub::MysqlStatementStub
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 151
    functionName: brpc::MysqlRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 1
    functionsReached:
    - MysqlStatementStub::MysqlStatementStub
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MergeFrom(const MysqlRequest& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:155,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:156,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:157,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:158,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:159,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:160,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - other
    argTypes:
    - MysqlRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 163
    functionName: brpc::MysqlRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::Swap(MysqlRequest* other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:167,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 172
    functionName: brpc::MysqlRequest::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::SerializeTo(butil::IOBuf* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:180,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:184,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:185,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:189,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:189,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' command'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 193
    functionName: brpc::MysqlRequest::Query
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 12
    functionsReached:
    - MysqlMakeCommand
    - CHECK
    - LOG
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::Query(const butil::StringPiece& command)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:200,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:204,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:205,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:209,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:209,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - p
    argTypes:
    - int8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 213
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int8_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:215,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:216,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:221,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:222,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:226,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:226,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 230
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint8_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:233,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:237,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:238,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:242,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:242,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 246
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int16_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:249,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:254,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:255,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:259,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:259,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 263
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint16_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:266,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:270,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:271,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:275,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:275,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 279
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int32_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:281,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:282,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:287,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:288,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:292,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:292,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 296
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint32_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:299,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:304,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:305,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:309,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:309,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 313
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int64_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:315,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:316,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:321,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:322,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:326,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint64_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:332,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:333,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:337,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:338,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:342,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:342,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 346
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(float p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:349,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:353,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:354,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:358,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:358,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 362
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(double p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:364,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:365,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:369,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:370,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:374,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 378
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(const butil::StringPiece& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:384,1
    - Dst: mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:385,1
    - Dst: butil::IOBuf::cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:389,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:393,1
    - Dst: butil::IOBuf::cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:395,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 380
    functionDepth: 1
    functionLinenumber: 380
    functionLinenumberEnd: 398
    functionName: brpc::MysqlRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - mysql_uint3korr
    - butil::IOBuf::empty
    - butil::IOBuf::cut1
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::Print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:401,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 403
    functionName: '& operator<<(std::ostream& os, const MysqlRequest& r)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MysqlRequest& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 408
    functionName: brpc::MysqlResponse::MysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 68
    functionsReached:
    - brpc::MysqlResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::MysqlResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 413
    functionName: brpc::MysqlResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 417
    functionName: MysqlResponse::~MysqlResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::~MysqlResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: brpc::MysqlResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: brpc::MysqlResponse::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:428,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:429,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 426
    functionDepth: 1
    functionLinenumber: 426
    functionLinenumberEnd: 433
    functionName: brpc::MysqlResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::MysqlResponse::Swap
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 437
    functionName: brpc::MysqlResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t MysqlResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 441
    functionName: brpc::MysqlResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::MergeFrom(const MysqlResponse&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 445
    functionName: brpc::MysqlResponse::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:449,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:450,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:451,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:452,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:453,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - other
    argTypes:
    - MysqlResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 447
    functionDepth: 1
    functionLinenumber: 447
    functionLinenumberEnd: 455
    functionName: brpc::MysqlResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 2
    functionsReached:
    - brpc::MysqlResponse::Swap
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::Swap(MysqlResponse* other)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:463,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:464,1
    - Dst: brpc::MysqlResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:466,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:473,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:473,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:475,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:477,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:480,1
    - Dst: MysqlReply::MysqlReply
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:482,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:483,1
    - Dst: brpc::MysqlResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:486,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:493,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:502,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 3
    argNames:
    - ' buf'
    - is_auth
    - stmt_type
    argTypes:
    - butil::IOBuf
    - bool
    - MysqlStmtType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 505
    functionName: brpc::MysqlResponse::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 1
    functionsReached:
    - MysqlReply::MysqlReply
    - allocate
    - reserve
    - LOG
    - brpc::MysqlResponse::ConsumePartialIOBuf
    - brpc::MysqlResponse::reply_size
    - push_back
    - size
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlResponse::ConsumePartialIOBuf(butil::IOBuf& buf,\n
      \                                             bool is_auth,\n                                              MysqlStmtType
      stmt_type)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:509,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:511,1
    - Dst: reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:512,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:514,1
    - Dst: reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:516,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' response'
    argTypes:
    - std::ostream
    - MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 522
    functionName: '& operator<<(std::ostream& os, const MysqlResponse& response)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - reply_size
    - reply
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MysqlResponse& response)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:35,1
    - Dst: MysqlMakeLongDataPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:38,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:40,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:44,1
    - Dst: MysqlMakeExecutePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:46,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:48,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:51,1
    - Dst: mask::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:52,1
    - Dst: types::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:54,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - outbuf
    - stmt_id
    argTypes:
    - butil::IOBuf*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 58
    functionName: brpc::MysqlStatementStub::PackExecuteCommand
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - MysqlMakeLongDataPacket
    - clear
    - LOG
    - butil::Status::ok
    - types::clear
    - MysqlMakeExecutePacket
    - butil::Status::Status
    - mask::clear
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status MysqlStatementStub::PackExecuteCommand(butil::IOBuf*
      outbuf, uint32_t stmt_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:62,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 63
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - tx
    argTypes:
    - MysqlTransaction*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 69
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 69
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(const MysqlTransaction* tx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:73,1
    - Dst: MysqlStatementStub::MysqlStatementStub
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:74,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - stmt
    argTypes:
    - MysqlStatement*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 75
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 75
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - MysqlStatementStub::MysqlStatementStub
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(MysqlStatement* stmt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:79,1
    - Dst: MysqlStatementStub::MysqlStatementStub
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:81,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - tx
    - stmt
    argTypes:
    - MysqlTransaction*
    - MysqlStatement*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 77
    functionDepth: 1
    functionLinenumber: 77
    functionLinenumberEnd: 82
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - MysqlStatementStub::MysqlStatementStub
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(const MysqlTransaction* tx, MysqlStatement*
      stmt)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:86,1
    - Dst: brpc::MysqlRequest::MergeFrom
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:87,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 88
    functionName: brpc::MysqlRequest::MysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 8
    functionsReached:
    - brpc::MysqlRequest::MergeFrom
    - brpc::MysqlRequest::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MysqlRequest(const MysqlRequest& from)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 97
    functionName: brpc::MysqlRequest::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 10
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::SharedCtor()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:100,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 105
    functionName: MysqlRequest::~MysqlRequest()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::~MysqlRequest()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 108
    functionName: brpc::MysqlRequest::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 110
    functionDepth: 0
    functionLinenumber: 110
    functionLinenumberEnd: 112
    functionName: brpc::MysqlRequest::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::SetCachedSize(int size) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:116,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 114
    functionDepth: 1
    functionLinenumber: 114
    functionLinenumberEnd: 124
    functionName: brpc::MysqlRequest::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - clear
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:127,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 130
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 130
    functionName: brpc::MysqlRequest::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - size
    linkageType: ''
    returnType: size_t
    signature: size_t MysqlRequest::ByteSizeLong() const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: MysqlStatementStub::MysqlStatementStub
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 1
    argNames:
    - ' from'
    argTypes:
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 151
      start: 132
    functionDepth: 0
    functionLinenumber: 132
    functionLinenumberEnd: 151
    functionName: brpc::MysqlRequest::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 2
    functionsReached:
    - MysqlStatementStub::MysqlStatementStub
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::MergeFrom(const MysqlRequest& from)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:155,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:156,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:157,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:158,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:159,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:160,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:161,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - other
    argTypes:
    - MysqlRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 163
      start: 153
    functionDepth: 1
    functionLinenumber: 153
    functionLinenumberEnd: 163
    functionName: brpc::MysqlRequest::Swap
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::Swap(MysqlRequest* other)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:167,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 165
    functionDepth: 1
    functionLinenumber: 165
    functionLinenumberEnd: 172
    functionName: brpc::MysqlRequest::SerializeTo
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::SerializeTo(butil::IOBuf* buf) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:180,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:184,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:185,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:189,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:189,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' command'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 193
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 193
    functionName: brpc::MysqlRequest::Query
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 12
    functionsReached:
    - MysqlMakeCommand
    - CHECK
    - LOG
    - butil::Status::ok
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::Query(const butil::StringPiece& command)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:200,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:204,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:205,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:209,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:209,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - p
    argTypes:
    - int8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 195
    functionDepth: 1
    functionLinenumber: 195
    functionLinenumberEnd: 213
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int8_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:215,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:216,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:221,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:222,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:226,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:226,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 214
    functionDepth: 1
    functionLinenumber: 214
    functionLinenumberEnd: 230
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint8_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:233,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:237,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:238,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:242,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:242,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - int16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 231
    functionDepth: 1
    functionLinenumber: 231
    functionLinenumberEnd: 246
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int16_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:248,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:249,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:254,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:255,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:259,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:259,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 263
      start: 247
    functionDepth: 1
    functionLinenumber: 247
    functionLinenumberEnd: 263
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint16_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:265,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:266,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:270,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:271,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:275,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:275,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 279
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 279
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int32_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:281,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:282,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:287,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:288,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:292,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:292,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 296
      start: 280
    functionDepth: 1
    functionLinenumber: 280
    functionLinenumberEnd: 296
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint32_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:298,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:299,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:304,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:305,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:309,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:309,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 313
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(int64_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:315,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:316,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:321,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:322,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:326,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(uint64_t p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:332,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:333,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:337,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:338,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:342,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:342,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - float
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 346
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 346
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(float p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:348,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:349,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:353,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:354,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:358,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:358,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - p
    argTypes:
    - double
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 362
      start: 347
    functionDepth: 1
    functionLinenumber: 347
    functionLinenumberEnd: 362
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(double p)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlRequest::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:364,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:365,1
    - Dst: MysqlMakeExecuteData
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:369,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:370,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:374,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:374,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - ' p'
    argTypes:
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 363
    functionDepth: 1
    functionLinenumber: 363
    functionLinenumberEnd: 378
    functionName: brpc::MysqlRequest::AddParam
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 18
    functionsReached:
    - brpc::MysqlRequest::stmt
    - CHECK
    - LOG
    - butil::Status::ok
    - MysqlMakeExecuteData
    linkageType: ''
    returnType: bool
    signature: bool MysqlRequest::AddParam(const butil::StringPiece& p)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:384,1
    - Dst: mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:385,1
    - Dst: butil::IOBuf::cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:389,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:393,1
    - Dst: butil::IOBuf::cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:395,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 398
      start: 380
    functionDepth: 1
    functionLinenumber: 380
    functionLinenumberEnd: 398
    functionName: brpc::MysqlRequest::Print
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf::cutn
    - mysql_uint3korr
    - butil::IOBuf::empty
    - butil::IOBuf::cut1
    linkageType: ''
    returnType: void
    signature: void MysqlRequest::Print(std::ostream& os) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Print
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:401,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' r'
    argTypes:
    - std::ostream
    - MysqlRequest
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 403
      start: 400
    functionDepth: 0
    functionLinenumber: 400
    functionLinenumberEnd: 403
    functionName: '& operator<<(std::ostream& os, const MysqlRequest& r)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - Print
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MysqlRequest& r)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::SharedCtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:407,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 408
      start: 405
    functionDepth: 1
    functionLinenumber: 405
    functionLinenumberEnd: 408
    functionName: brpc::MysqlResponse::MysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 68
    functionsReached:
    - brpc::MysqlResponse::SharedCtor
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::MysqlResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 413
      start: 410
    functionDepth: 0
    functionLinenumber: 410
    functionLinenumberEnd: 413
    functionName: brpc::MysqlResponse::SharedCtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::SharedCtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: SharedDtor
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:416,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 417
      start: 415
    functionDepth: 0
    functionLinenumber: 415
    functionLinenumberEnd: 417
    functionName: MysqlResponse::~MysqlResponse()
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - SharedDtor
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::~MysqlResponse()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 420
      start: 419
    functionDepth: 0
    functionLinenumber: 419
    functionLinenumberEnd: 420
    functionName: brpc::MysqlResponse::SharedDtor
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::SharedDtor()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - size
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 422
    functionDepth: 0
    functionLinenumber: 422
    functionLinenumberEnd: 424
    functionName: brpc::MysqlResponse::SetCachedSize
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::SetCachedSize(int size) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:428,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:429,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:430,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 433
      start: 426
    functionDepth: 2
    functionLinenumber: 426
    functionLinenumberEnd: 433
    functionName: brpc::MysqlResponse::Clear
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::MysqlResponse::Swap
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::Clear()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 437
      start: 435
    functionDepth: 0
    functionLinenumber: 435
    functionLinenumberEnd: 437
    functionName: brpc::MysqlResponse::ByteSizeLong
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t MysqlResponse::ByteSizeLong() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:440,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 441
      start: 439
    functionDepth: 1
    functionLinenumber: 439
    functionLinenumberEnd: 441
    functionName: brpc::MysqlResponse::MergeFrom
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::MergeFrom(const MysqlResponse&)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 445
      start: 443
    functionDepth: 0
    functionLinenumber: 443
    functionLinenumberEnd: 445
    functionName: brpc::MysqlResponse::IsInitialized
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool MysqlResponse::IsInitialized() const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::MysqlResponse::Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:449,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:450,1
    - Dst: swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:451,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:452,1
    - Dst: std::swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:453,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - other
    argTypes:
    - MysqlResponse*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 447
    functionDepth: 1
    functionLinenumber: 447
    functionLinenumberEnd: 455
    functionName: brpc::MysqlResponse::Swap
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 4
    functionsReached:
    - brpc::MysqlResponse::Swap
    - swap
    - std::swap
    linkageType: ''
    returnType: void
    signature: void MysqlResponse::Swap(MysqlResponse* other)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:463,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:464,1
    - Dst: brpc::MysqlResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:466,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:473,1
    - Dst: brpc::MysqlResponse::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:473,1
    - Dst: allocate
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:475,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:477,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:480,1
    - Dst: MysqlReply::MysqlReply
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:482,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:483,1
    - Dst: brpc::MysqlResponse::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:486,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:493,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:502,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 33
    argCount: 3
    argNames:
    - ' buf'
    - is_auth
    - stmt_type
    argTypes:
    - butil::IOBuf
    - bool
    - MysqlStmtType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 505
      start: 457
    functionDepth: 1
    functionLinenumber: 457
    functionLinenumberEnd: 505
    functionName: brpc::MysqlResponse::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 2
    functionsReached:
    - MysqlReply::MysqlReply
    - allocate
    - reserve
    - LOG
    - brpc::MysqlResponse::ConsumePartialIOBuf
    - brpc::MysqlResponse::reply_size
    - push_back
    - size
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlResponse::ConsumePartialIOBuf(butil::IOBuf& buf,\n
      \                                             bool is_auth,\n                                              MysqlStmtType
      stmt_type)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:509,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:511,1
    - Dst: reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:512,1
    - Dst: reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:514,1
    - Dst: reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql.cpp:516,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 2
    argNames:
    - ' os'
    - ' response'
    argTypes:
    - std::ostream
    - MysqlResponse
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 522
      start: 507
    functionDepth: 0
    functionLinenumber: 507
    functionLinenumberEnd: 522
    functionName: '& operator<<(std::ostream& os, const MysqlResponse& response)'
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql.cpp
    functionUses: 0
    functionsReached:
    - reply_size
    - reply
    linkageType: ''
    returnType: std::ostream
    signature: std::ostream & operator<<(std::ostream& os, const MysqlResponse& response)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.h:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.h:54,1
    - Dst: brpc::MysqlStatement::Init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' channel'
    - ' str'
    argTypes:
    - Channel
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: brpc::MysqlStatement::MysqlStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.h
    functionUses: 0
    functionsReached:
    - brpc::MysqlStatement::Init
    - size
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlStatement::MysqlStatement(const Channel& channel, const butil::StringPiece&
      str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.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::MysqlStatement::str
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlStatement::str() const
  - 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: brpc::MysqlStatement::param_count
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlStatement::param_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.h:54,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.h:54,1
    - Dst: brpc::MysqlStatement::Init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.h:55,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' channel'
    - ' str'
    argTypes:
    - Channel
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 56
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 56
    functionName: brpc::MysqlStatement::MysqlStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.h
    functionUses: 0
    functionsReached:
    - brpc::MysqlStatement::Init
    - size
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlStatement::MysqlStatement(const Channel& channel, const butil::StringPiece&
      str)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.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::MysqlStatement::str
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.h
    functionUses: 0
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlStatement::str() const
  - 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: brpc::MysqlStatement::param_count
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t MysqlStatement::param_count() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' user'
    - ' passwd'
    - ' schema'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 41
    functionName: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 10
    functionsReached:
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlAuthenticator(const butil::StringPiece& user,\n                       const
      butil::StringPiece& passwd,\n                       const butil::StringPiece&
      schema,\n                       const butil::StringPiece& params = \"\",\n                       const
      butil::StringPiece& collation = MysqlDefaultCollation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: brpc::policy::MysqlAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int 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: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::policy::MysqlAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const
  - 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::policy::MysqlAuthenticator::user
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::passwd
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::passwd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::schema
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::schema() const
  - 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::policy::MysqlAuthenticator::params
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::params() const
  - 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: brpc::policy::MysqlAuthenticator::collation
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::collation() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' user'
    - ' passwd'
    - ' schema'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 41
    functionName: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 10
    functionsReached:
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlAuthenticator(const butil::StringPiece& user,\n                       const
      butil::StringPiece& passwd,\n                       const butil::StringPiece&
      schema,\n                       const butil::StringPiece& params = \"\",\n                       const
      butil::StringPiece& collation = MysqlDefaultCollation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: brpc::policy::MysqlAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int 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: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::policy::MysqlAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const
  - 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::policy::MysqlAuthenticator::user
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::passwd
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::passwd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::schema
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::schema() const
  - 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::policy::MysqlAuthenticator::params
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::params() const
  - 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: brpc::policy::MysqlAuthenticator::collation
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::collation() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' user'
    - ' passwd'
    - ' schema'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 41
    functionName: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 10
    functionsReached:
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlAuthenticator(const butil::StringPiece& user,\n                       const
      butil::StringPiece& passwd,\n                       const butil::StringPiece&
      schema,\n                       const butil::StringPiece& params = \"\",\n                       const
      butil::StringPiece& collation = MysqlDefaultCollation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: brpc::policy::MysqlAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int 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: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::policy::MysqlAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const
  - 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::policy::MysqlAuthenticator::user
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::passwd
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::passwd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::schema
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::schema() const
  - 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::policy::MysqlAuthenticator::params
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::params() const
  - 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: brpc::policy::MysqlAuthenticator::collation
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::collation() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:37,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:38,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:39,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:40,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 3
    argNames:
    - ' user'
    - ' passwd'
    - ' schema'
    argTypes:
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 41
      start: 32
    functionDepth: 0
    functionLinenumber: 32
    functionLinenumberEnd: 41
    functionName: brpc::policy::MysqlAuthenticator::MysqlAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 10
    functionsReached:
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlAuthenticator(const butil::StringPiece& user,\n                       const
      butil::StringPiece& passwd,\n                       const butil::StringPiece&
      schema,\n                       const butil::StringPiece& params = \"\",\n                       const
      butil::StringPiece& collation = MysqlDefaultCollation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - auth_str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    functionName: brpc::policy::MysqlAuthenticator::GenerateCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int 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: 49
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 49
    functionName: brpc::policy::MysqlAuthenticator::VerifyCredential
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int VerifyCredential(const std::string&, const butil::EndPoint&, brpc::AuthContext*)
      const
  - 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::policy::MysqlAuthenticator::user
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::user() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::passwd
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::passwd() const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    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::policy::MysqlAuthenticator::schema
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::schema() const
  - 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::policy::MysqlAuthenticator::params
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::params() const
  - 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: brpc::policy::MysqlAuthenticator::collation
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: butil::StringPiece
    signature: butil::StringPiece MysqlAuthenticator::collation() const
  - BBCount: 30
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 60
    argCount: 1
    argNames:
    - type
    argTypes:
    - MysqlFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 235
    functionName: brpc::MysqlFieldTypeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * MysqlFieldTypeToString(MysqlFieldType type)
  - BBCount: 30
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 60
    argCount: 1
    argNames:
    - type
    argTypes:
    - MysqlFieldType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 235
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 235
    functionName: brpc::MysqlFieldTypeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * MysqlFieldTypeToString(MysqlFieldType type)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 1
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 1
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 1
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 1
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 2
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 2
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 2
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 2
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 3
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 3
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 3
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 3
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 4
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 4
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 4
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 4
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 5
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 5
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 5
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 5
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 6
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 6
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 6
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 6
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 7
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 7
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:41,1
    - Dst: static_cast<T>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 4
    argNames:
    - ' buf'
    - 'off'
    - n
    - out
    argTypes:
    - butil::StringPiece
    - size_t
    - size_t
    - T*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 48
    functionName: brpc::policy::mysql::ReadLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 7
    functionsReached:
    - static_cast<T>
    - size
    - static_cast<unsigned char>
    linkageType: ''
    returnType: bool
    signature: bool ReadLE(const butil::StringPiece& buf, size_t off, size_t n, T*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:53,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 3
    argNames:
    - value
    - n
    - out
    argTypes:
    - T
    - size_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 55
    functionName: brpc::policy::mysql::WriteLE
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 7
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void WriteLE(T value, size_t n, std::string* out)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:61,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:66,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:68,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:69,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:70,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:77,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:78,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:81,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:86,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:89,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:90,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:97,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:101,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:105,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:106,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:115,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:122,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:124,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:130,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:133,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:137,1
    - Dst: brpc::policy::mysql::ReadLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:145,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:150,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:153,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:154,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:158,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:161,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:162,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:171,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:172,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:177,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:182,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:184,1
    - Dst: std::string::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:185,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:189,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:190,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:193,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:197,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:198,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:199,1
    - Dst: HandshakeV10*::auth_plugin_name::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:203,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:205,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 91
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - HandshakeV10*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 210
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 210
    functionName: brpc::policy::mysql::ParseHandshakeV10
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - std::string::back
    - std::string::append
    - LOG
    - static_cast<size_t>
    - empty
    - static_cast<uint8_t>
    - brpc::policy::mysql::ReadLE
    - HandshakeV10*::auth_plugin_name::assign
    - std::string::empty
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - static_cast<int>
    - data
    - size
    - static_cast<uint32_t>
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::string::pop_back
    - std::string::size
    linkageType: ''
    returnType: bool
    signature: bool ParseHandshakeV10(const butil::StringPiece& payload, HandshakeV10*
      out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:225,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:226,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:233,1
    - Dst: brpc::policy::mysql::WriteLE
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:234,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:235,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:236,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:237,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:238,1
    - Dst: brpc::policy::mysql::EncodeLengthEncodedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:241,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:244,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:245,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: auth_response::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:246,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:248,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:249,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:253,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:254,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:258,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:259,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 30
    argCount: 2
    argNames:
    - ' req'
    - out
    argTypes:
    - HandshakeResponse41
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 212
    functionDepth: 1
    functionLinenumber: 212
    functionLinenumberEnd: 262
    functionName: brpc::policy::mysql::BuildHandshakeResponse41
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - auth_response::data
    - brpc::policy::mysql::WriteLE
    - std::string*::append
    - auth_response::size
    - std::string*::push_back
    - LOG
    - brpc::policy::mysql::EncodeLengthEncodedString
    - static_cast<uint8_t>
    - static_cast<char>
    linkageType: ''
    returnType: bool
    signature: bool BuildHandshakeResponse41(const HandshakeResponse41& req, std::string*
      out)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:266,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:268,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:274,1
    - Dst: brpc::policy::mysql::DecodeNullTerminatedString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:277,1
    - Dst: std::move
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:282,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:285,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:286,1
    - Dst: AuthSwitchRequest*::auth_plugin_data::pop_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:287,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthSwitchRequest*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 290
      start: 264
    functionDepth: 1
    functionLinenumber: 264
    functionLinenumberEnd: 290
    functionName: brpc::policy::mysql::ParseAuthSwitchRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - AuthSwitchRequest*::auth_plugin_data::back
    - brpc::policy::mysql::DecodeNullTerminatedString
    - std::move
    - LOG
    - empty
    - data
    - static_cast<uint8_t>
    - AuthSwitchRequest*::auth_plugin_data::empty
    - AuthSwitchRequest*::auth_plugin_data::pop_back
    - AuthSwitchRequest*::auth_plugin_data::assign
    - size
    linkageType: ''
    returnType: bool
    signature: "bool ParseAuthSwitchRequest(const butil::StringPiece& payload,\n                            AuthSwitchRequest*
      out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:293,1
    - Dst: static_cast<uint8_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:295,1
    - Dst: AuthMoreData*::data::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp:299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - ' payload'
    - out
    argTypes:
    - butil::StringPiece
    - AuthMoreData*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 292
    functionDepth: 1
    functionLinenumber: 292
    functionLinenumberEnd: 301
    functionName: brpc::policy::mysql::ParseAuthMoreData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_handshake.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - AuthMoreData*::data::assign
    - empty
    - data
    - static_cast<uint8_t>
    - size
    linkageType: ''
    returnType: bool
    signature: bool ParseAuthMoreData(const butil::StringPiece& payload, AuthMoreData*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:348,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:349,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:354,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:355,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:360,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:361,1
    - Dst: static_cast<MysqlStmtType>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:364,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:365,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:367,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:371,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:373,1
    - Dst: brpc::policy::HandleAuthentication
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:376,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:378,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:382,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:383,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:391,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:393,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:394,1
    - Dst: brpc::policy::HandlePrepareStatement
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:397,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:399,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:403,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:404,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:407,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:408,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 409
    functionName: brpc::policy::ParseMysqlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HandleAuthentication
    - static_cast<MysqlStmtType>
    - InputResponse::InputResponse
    - MakeParseError
    - LOG
    - InputResponse*::response::reply
    - brpc::policy::HandlePrepareStatement
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - static_cast<InputResponse*>
    - Socket*::reset_parsing_context
    - InputResponse*::response::ConsumePartialIOBuf
    - MakeMessage
    - Socket*::PopPipelinedInfo
    - Socket*::release_parsing_context
    - butil::IOBuf*::empty
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMysqlMessage(butil::IOBuf* source,\n                              Socket*
      socket,\n                              bool /*read_eof*/,\n                              const
      void* /*arg*/)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:412,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:417,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:419,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:420,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:427,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:431,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:433,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:434,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:436,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:437,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:446,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:447,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 411
    functionDepth: 2
    functionLinenumber: 411
    functionLinenumberEnd: 448
    functionName: brpc::policy::ProcessMysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessMysqlResponse(InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:454,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:455,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:458,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:459,1
    - Dst: MysqlRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:464,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:465,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:473,1
    - Dst: MysqlRequest*::tx
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:475,1
    - Dst: ControllerPrivateAccessor::use_bind_sock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: auto::GetSocketId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:479,1
    - Dst: ControllerPrivateAccessor::set_session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:482,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:485,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 450
    functionDepth: 2
    functionLinenumber: 450
    functionLinenumberEnd: 487
    functionName: brpc::policy::SerializeMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::set_mysql_statement_type
    - pbrpcframework::get_prototype_by_method_descriptor
    - MysqlRequest*::stmt
    - ControllerPrivateAccessor::set_session_data
    - LOG
    - auto::GetSocketId
    - MysqlRequest*::tx
    - Controller*::SetFailed
    - MysqlRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor::use_bind_sock
    linkageType: ''
    returnType: void
    signature: "void SerializeMysqlRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:500,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:505,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:508,1
    - Dst: SerializeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:510,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:511,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:514,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:515,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:516,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:517,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_auth_flags
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:524,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:527,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 489
    functionDepth: 2
    functionLinenumber: 489
    functionLinenumberEnd: 531
    functionName: brpc::policy::PackMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeToString
    - ControllerPrivateAccessor::get_sending_socket
    - Socket*::mutable_auth_context
    - brpc::policy::PackRequest
    - butil::IOBuf::to_string
    - AuthContext*::set_user
    - AuthContext*::set_starter
    - LOG
    - ControllerPrivateAccessor::set_auth_flags
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: "void PackMysqlRequest(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: 537
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 537
    functionName: brpc::policy::GetMysqlMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMysqlMethodName(const google::protobuf::MethodDescriptor*,\n
      \                                     const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:348,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:349,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:354,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:355,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:360,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:361,1
    - Dst: static_cast<MysqlStmtType>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:364,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:365,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:367,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:371,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:373,1
    - Dst: brpc::policy::HandleAuthentication
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:376,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:378,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:382,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:383,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:391,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:393,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:394,1
    - Dst: brpc::policy::HandlePrepareStatement
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:397,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:399,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:403,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:404,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:407,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:408,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 409
    functionName: brpc::policy::ParseMysqlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HandleAuthentication
    - static_cast<MysqlStmtType>
    - InputResponse::InputResponse
    - MakeParseError
    - LOG
    - InputResponse*::response::reply
    - brpc::policy::HandlePrepareStatement
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - static_cast<InputResponse*>
    - Socket*::reset_parsing_context
    - InputResponse*::response::ConsumePartialIOBuf
    - MakeMessage
    - Socket*::PopPipelinedInfo
    - Socket*::release_parsing_context
    - butil::IOBuf*::empty
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMysqlMessage(butil::IOBuf* source,\n                              Socket*
      socket,\n                              bool /*read_eof*/,\n                              const
      void* /*arg*/)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:412,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:417,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:419,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:420,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:427,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:431,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:433,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:434,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:436,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:437,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:446,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:447,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 411
    functionDepth: 2
    functionLinenumber: 411
    functionLinenumberEnd: 448
    functionName: brpc::policy::ProcessMysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessMysqlResponse(InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:454,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:455,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:458,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:459,1
    - Dst: MysqlRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:464,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:465,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:473,1
    - Dst: MysqlRequest*::tx
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:475,1
    - Dst: ControllerPrivateAccessor::use_bind_sock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: auto::GetSocketId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:479,1
    - Dst: ControllerPrivateAccessor::set_session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:482,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:485,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 450
    functionDepth: 2
    functionLinenumber: 450
    functionLinenumberEnd: 487
    functionName: brpc::policy::SerializeMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::set_mysql_statement_type
    - pbrpcframework::get_prototype_by_method_descriptor
    - MysqlRequest*::stmt
    - ControllerPrivateAccessor::set_session_data
    - LOG
    - auto::GetSocketId
    - MysqlRequest*::tx
    - Controller*::SetFailed
    - MysqlRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor::use_bind_sock
    linkageType: ''
    returnType: void
    signature: "void SerializeMysqlRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:500,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:505,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:508,1
    - Dst: SerializeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:510,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:511,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:514,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:515,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:516,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:517,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_auth_flags
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:524,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:527,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 489
    functionDepth: 2
    functionLinenumber: 489
    functionLinenumberEnd: 531
    functionName: brpc::policy::PackMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeToString
    - ControllerPrivateAccessor::get_sending_socket
    - Socket*::mutable_auth_context
    - brpc::policy::PackRequest
    - butil::IOBuf::to_string
    - AuthContext*::set_user
    - AuthContext*::set_starter
    - LOG
    - ControllerPrivateAccessor::set_auth_flags
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: "void PackMysqlRequest(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: 537
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 537
    functionName: brpc::policy::GetMysqlMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMysqlMethodName(const google::protobuf::MethodDescriptor*,\n
      \                                     const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 4
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 5
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:348,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:349,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:354,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:355,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:360,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:361,1
    - Dst: static_cast<MysqlStmtType>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:364,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:365,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:367,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:371,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:373,1
    - Dst: brpc::policy::HandleAuthentication
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:376,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:378,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:382,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:383,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:391,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:393,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:394,1
    - Dst: brpc::policy::HandlePrepareStatement
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:397,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:399,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:403,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:404,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:407,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:408,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 409
    functionName: brpc::policy::ParseMysqlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HandleAuthentication
    - static_cast<MysqlStmtType>
    - InputResponse::InputResponse
    - MakeParseError
    - LOG
    - InputResponse*::response::reply
    - brpc::policy::HandlePrepareStatement
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - static_cast<InputResponse*>
    - Socket*::reset_parsing_context
    - InputResponse*::response::ConsumePartialIOBuf
    - MakeMessage
    - Socket*::PopPipelinedInfo
    - Socket*::release_parsing_context
    - butil::IOBuf*::empty
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMysqlMessage(butil::IOBuf* source,\n                              Socket*
      socket,\n                              bool /*read_eof*/,\n                              const
      void* /*arg*/)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:412,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:417,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:419,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:420,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:427,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:431,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:433,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:434,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:436,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:437,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:446,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:447,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 411
    functionDepth: 2
    functionLinenumber: 411
    functionLinenumberEnd: 448
    functionName: brpc::policy::ProcessMysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessMysqlResponse(InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:454,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:455,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:458,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:459,1
    - Dst: MysqlRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:464,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:465,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:473,1
    - Dst: MysqlRequest*::tx
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:475,1
    - Dst: ControllerPrivateAccessor::use_bind_sock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: auto::GetSocketId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:479,1
    - Dst: ControllerPrivateAccessor::set_session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:482,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:485,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 450
    functionDepth: 2
    functionLinenumber: 450
    functionLinenumberEnd: 487
    functionName: brpc::policy::SerializeMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::set_mysql_statement_type
    - pbrpcframework::get_prototype_by_method_descriptor
    - MysqlRequest*::stmt
    - ControllerPrivateAccessor::set_session_data
    - LOG
    - auto::GetSocketId
    - MysqlRequest*::tx
    - Controller*::SetFailed
    - MysqlRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor::use_bind_sock
    linkageType: ''
    returnType: void
    signature: "void SerializeMysqlRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:500,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:505,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:508,1
    - Dst: SerializeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:510,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:511,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:514,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:515,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:516,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:517,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_auth_flags
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:524,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:527,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 489
    functionDepth: 2
    functionLinenumber: 489
    functionLinenumberEnd: 531
    functionName: brpc::policy::PackMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeToString
    - ControllerPrivateAccessor::get_sending_socket
    - Socket*::mutable_auth_context
    - brpc::policy::PackRequest
    - butil::IOBuf::to_string
    - AuthContext*::set_user
    - AuthContext*::set_starter
    - LOG
    - ControllerPrivateAccessor::set_auth_flags
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: "void PackMysqlRequest(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: 537
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 537
    functionName: brpc::policy::GetMysqlMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMysqlMethodName(const google::protobuf::MethodDescriptor*,\n
      \                                     const Controller*)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 6
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:88,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:89,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:90,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:91,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:92,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:93,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 3
    argNames:
    - fd
    - ' payload'
    - seq
    argTypes:
    - int
    - std::string
    - uint8_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 94
      start: 87
    functionDepth: 1
    functionLinenumber: 87
    functionLinenumberEnd: 94
    functionName: brpc::policy::WriteMysqlAuthPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 7
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - butil::IOBuf::cut_into_file_descriptor
    - butil::IOBuf::IOBuf
    - size
    linkageType: ''
    returnType: void
    signature: void WriteMysqlAuthPacket(int fd, const std::string& payload, uint8_t
      seq)
  - 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: brpc::policy::DestroyImpl
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void DestroyImpl()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: pipelined_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:109,1
    - Dst: get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:112,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:117,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:123,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:124,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: auto::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:125,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:126,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:127,1
    - Dst: set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:130,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:131,1
    - Dst: auto::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:135,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:137,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:142,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 3
    argNames:
    - buf
    - ' accessor'
    - ' request'
    argTypes:
    - butil::IOBuf*
    - ControllerPrivateAccessor
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 106
    functionDepth: 1
    functionLinenumber: 106
    functionLinenumberEnd: 144
    functionName: brpc::policy::PackRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::append
    - set_mysql_statement_type
    - auto::stmt
    - static_cast<MysqlStatementStub*>
    - LOG
    - pipelined_count
    - butil::Status::ok
    - butil::IOBuf::IOBuf
    - MysqlMakeCommand
    - auto::PackExecuteCommand
    - Socket*::id
    - get_sending_socket
    - session_data
    linkageType: ''
    returnType: bool
    signature: "bool PackRequest(butil::IOBuf* buf,\n                 ControllerPrivateAccessor&
      accessor,\n                 const butil::IOBuf& request)"
  - BBCount: 18
    BranchProfiles: []
    Callsites:
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:150,1
    - Dst: Socket*::auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:158,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:161,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:163,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:164,1
    - Dst: brpc::policy::MysqlPackAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:165,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:167,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:168,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:169,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:171,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:172,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:173,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:175,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:182,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: auth
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:183,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:184,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:185,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:187,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:191,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:193,1
    - Dst: brpc::policy::MysqlParseAuthenticator
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:199,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:200,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:201,1
    - Dst: seq
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:202,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:203,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:206,1
    - Dst: AuthContext*::roles
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:207,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:210,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:213,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:215,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:216,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:218,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:219,1
    - Dst: Socket*::is_ssl
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:221,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordCleartext
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:223,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:224,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:225,1
    - Dst: brpc::policy::WriteMysqlAuthPacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:229,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:234,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:236,1
    - Dst: InputResponse*::response::reply_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:237,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:239,1
    - Dst: brpc::policy::MysqlParseParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:245,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: AuthContext*::group
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:250,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:251,1
    - Dst: brpc::policy::MysqlPackParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:253,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:254,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:255,1
    - Dst: const_cast<AuthContext*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:256,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:259,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:262,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: AuthContext*::starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:263,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:264,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:269,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:273,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:275,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 94
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 278
      start: 146
    functionDepth: 5
    functionLinenumber: 146
    functionLinenumberEnd: 278
    functionName: brpc::policy::HandleAuthentication
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::MysqlPackAuthenticator
    - auth
    - brpc::policy::MysqlParseAuthenticator
    - std::string::append
    - LOG
    - bthread_id_unlock
    - AuthContext*::user
    - brpc::policy::mysql::CachingSha2PasswordCleartext
    - butil::IOBuf::size
    - Socket*::is_ssl
    - std::string::empty
    - brpc::policy::WriteMysqlAuthPacket
    - std::string
    - brpc::policy::MysqlParseParams
    - data
    - AuthContext*::roles
    - butil::IOBuf::cut_into_file_descriptor
    - brpc::policy::mysql::CachingSha2PasswordRsaEncrypt
    - const_cast<AuthContext*>
    - AuthContext*::starter
    - InputResponse*::response::reply
    - butil::IOBuf::append
    - seq
    - brpc::policy::MysqlPackParams
    - Socket*::auth_context
    - butil::StringPiece::empty
    - AuthContext*::group
    - Socket*::fd
    - butil::IOBuf::empty
    - InputResponse*::response::reply_size
    - bthread_id_lock
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: ParseError HandleAuthentication(const InputResponse* msg, const Socket*
      socket, PipelinedInfo* pi)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:283,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:284,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:287,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:290,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:291,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:295,1
    - Dst: butil::Status::Status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:296,1
    - Dst: static_cast<MysqlStatementStub*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: ControllerPrivateAccessor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:299,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:301,1
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:305,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:307,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:311,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: MysqlStatement*::param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:312,1
    - Dst: param_count
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:313,1
    - Dst: MysqlStatement*::SetStatementId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:317,1
    - Dst: MysqlStatementStub*::PackExecuteCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: stmt_id
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:318,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:319,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:320,1
    - Dst: butil::IOBuf::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:325,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:327,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:328,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:329,1
    - Dst: bthread_id_unlock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:336,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 49
    argCount: 3
    argNames:
    - msg
    - socket
    - pi
    argTypes:
    - InputResponse*
    - Socket*
    - PipelinedInfo*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 339
      start: 280
    functionDepth: 5
    functionLinenumber: 280
    functionLinenumberEnd: 339
    functionName: brpc::policy::HandlePrepareStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - ControllerPrivateAccessor
    - bthread_id_unlock
    - butil::IOBuf::size
    - static_cast<MysqlStatementStub*>
    - butil::Status::ok
    - MysqlStatementStub*::stmt
    - MysqlStatement*::param_count
    - MysqlStatementStub*::PackExecuteCommand
    - butil::IOBuf::cut_into_file_descriptor
    - MysqlStatement*::SetStatementId
    - Socket*::id
    - InputResponse*::response::reply
    - param_count
    - stmt_id
    - Socket*::fd
    - butil::IOBuf::empty
    - bthread_id_lock
    - butil::Status::Status
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError HandlePrepareStatement(const InputResponse* msg,\n                                  const
      Socket* socket,\n                                  PipelinedInfo* pi)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:348,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:349,1
    - Dst: Socket*::PopPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:354,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:355,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:358,1
    - Dst: InputResponse::InputResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:360,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:361,1
    - Dst: static_cast<MysqlStmtType>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:364,1
    - Dst: InputResponse*::response::ConsumePartialIOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:365,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:367,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:371,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:373,1
    - Dst: brpc::policy::HandleAuthentication
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:376,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:378,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:381,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:382,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:383,1
    - Dst: InputResponse*::response::reply
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:391,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:393,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:394,1
    - Dst: brpc::policy::HandlePrepareStatement
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:397,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:399,1
    - Dst: static_cast<InputResponse*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:402,1
    - Dst: Socket*::GivebackPipelinedInfo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:403,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:404,1
    - Dst: Socket*::release_parsing_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:407,1
    - Dst: MakeMessage
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:408,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 43
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 344
    functionDepth: 6
    functionLinenumber: 344
    functionLinenumberEnd: 409
    functionName: brpc::policy::ParseMysqlMessage
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::HandleAuthentication
    - static_cast<MysqlStmtType>
    - InputResponse::InputResponse
    - MakeParseError
    - LOG
    - InputResponse*::response::reply
    - brpc::policy::HandlePrepareStatement
    - Socket*::GivebackPipelinedInfo
    - Socket*::parsing_context
    - static_cast<InputResponse*>
    - Socket*::reset_parsing_context
    - InputResponse*::response::ConsumePartialIOBuf
    - MakeMessage
    - Socket*::PopPipelinedInfo
    - Socket*::release_parsing_context
    - butil::IOBuf*::empty
    linkageType: ''
    returnType: ParseResult
    signature: "ParseResult ParseMysqlMessage(butil::IOBuf* source,\n                              Socket*
      socket,\n                              bool /*read_eof*/,\n                              const
      void* /*arg*/)"
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:412,1
    - Dst: bthread_id_lock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:417,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:419,1
    - Dst: berror
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:420,1
    - Dst: ControllerPrivateAccessor::span
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:427,1
    - Dst: auto::set_base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: DestroyingPtr::base_real_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:428,1
    - Dst: auto::set_received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: DestroyingPtr::received_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:429,1
    - Dst: auto::set_response_size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: DestroyingPtr::response::ByteSize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:430,1
    - Dst: auto::set_start_parse_us
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:431,1
    - Dst: Controller*::ErrorCode
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:433,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:434,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:435,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:436,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:437,1
    - Dst: Controller*::response
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: Swap
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:440,1
    - Dst: DestroyingPtr::reset
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:446,1
    - Dst: ControllerPrivateAccessor::OnResponse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:447,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - msg_base
    argTypes:
    - InputMessageBase*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 448
      start: 411
    functionDepth: 2
    functionLinenumber: 411
    functionLinenumberEnd: 448
    functionName: brpc::policy::ProcessMysqlResponse
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - Controller*::response
    - ControllerPrivateAccessor::span
    - DestroyingPtr::response::ByteSize
    - LOG
    - LOG_IF
    - DestroyingPtr::received_us
    - ControllerPrivateAccessor::OnResponse
    - auto::set_response_size
    - auto::set_start_parse_us
    - DestroyingPtr::reset
    - Controller*::ErrorCode
    - auto::set_base_real_us
    - Swap
    - DestroyingPtr::base_real_us
    - butil::cpuwide_time_us
    - auto::set_received_us
    - pbrpcframework::get_prototype_by_method_descriptor
    - berror
    - bthread_id_lock
    - Controller*::SetFailed
    linkageType: ''
    returnType: void
    signature: void ProcessMysqlResponse(InputMessageBase* msg_base)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:454,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:455,1
    - Dst: google::protobuf::Message*::GetDescriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: pbrpcframework::get_prototype_by_method_descriptor
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:457,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:458,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:459,1
    - Dst: MysqlRequest*::SerializeTo
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:463,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:464,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:465,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:473,1
    - Dst: MysqlRequest*::tx
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:475,1
    - Dst: ControllerPrivateAccessor::use_bind_sock
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: auto::GetSocketId
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:477,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:479,1
    - Dst: ControllerPrivateAccessor::set_session_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: MysqlRequest*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:481,1
    - Dst: ControllerPrivateAccessor::set_mysql_statement_type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:482,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:485,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 3
    argNames:
    - buf
    - cntl
    - request
    argTypes:
    - butil::IOBuf*
    - Controller*
    - google::protobuf::Message*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 450
    functionDepth: 2
    functionLinenumber: 450
    functionLinenumberEnd: 487
    functionName: brpc::policy::SerializeMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - ControllerPrivateAccessor::set_mysql_statement_type
    - pbrpcframework::get_prototype_by_method_descriptor
    - MysqlRequest*::stmt
    - ControllerPrivateAccessor::set_session_data
    - LOG
    - auto::GetSocketId
    - MysqlRequest*::tx
    - Controller*::SetFailed
    - MysqlRequest*::SerializeTo
    - google::protobuf::Message*::GetDescriptor
    - ControllerPrivateAccessor::use_bind_sock
    linkageType: ''
    returnType: void
    signature: "void SerializeMysqlRequest(butil::IOBuf* buf,\n                           Controller*
      cntl,\n                           const google::protobuf::Message* request)"
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:500,1
    - Dst: ControllerPrivateAccessor::get_sending_socket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:505,1
    - Dst: Socket*::mutable_auth_context
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:508,1
    - Dst: SerializeToString
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:510,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:511,1
    - Dst: AuthContext*::set_user
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:514,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:515,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:516,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:517,1
    - Dst: AuthContext*::set_starter
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:520,1
    - Dst: ControllerPrivateAccessor::set_auth_flags
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:524,1
    - Dst: brpc::policy::PackRequest
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp:527,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 27
    argCount: 4
    argNames:
    - buf
    - cntl
    - ' request'
    - auth
    argTypes:
    - butil::IOBuf*
    - Controller*
    - butil::IOBuf
    - Authenticator*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 531
      start: 489
    functionDepth: 2
    functionLinenumber: 489
    functionLinenumberEnd: 531
    functionName: brpc::policy::PackMysqlRequest
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached:
    - SerializeToString
    - ControllerPrivateAccessor::get_sending_socket
    - Socket*::mutable_auth_context
    - brpc::policy::PackRequest
    - butil::IOBuf::to_string
    - AuthContext*::set_user
    - AuthContext*::set_starter
    - LOG
    - ControllerPrivateAccessor::set_auth_flags
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: void
    signature: "void PackMysqlRequest(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: 537
      start: 533
    functionDepth: 0
    functionLinenumber: 533
    functionLinenumberEnd: 537
    functionName: brpc::policy::GetMysqlMethodName
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_protocol.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::string
    signature: "std::string & GetMysqlMethodName(const google::protobuf::MethodDescriptor*,\n
      \                                     const Controller*)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:133,1
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:135,1
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:137,1
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:139,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 150
    functionName: brpc::pack_encode_length
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached:
    - std::stringstream::put
    - std::stringstream::str
    linkageType: ''
    returnType: std::string
    signature: std::string pack_encode_length(const uint64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: brpc::mysql_uint2korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t mysql_uint2korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::mysql_uint3korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint3korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::mysql_uint4korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint4korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 173
    functionName: brpc::mysql_uint8korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t mysql_uint8korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: brpc::mysql_uint2korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t mysql_uint2korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 183
    functionName: brpc::mysql_uint3korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint3korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 187
    functionName: brpc::mysql_uint4korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint4korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::mysql_uint8korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t mysql_uint8korr(const uint8_t* A)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:133,1
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:135,1
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:137,1
    - Dst: std::stringstream::put
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:139,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_common.h:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - value
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 130
    functionDepth: 0
    functionLinenumber: 130
    functionLinenumberEnd: 150
    functionName: brpc::pack_encode_length
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached:
    - std::stringstream::put
    - std::stringstream::str
    linkageType: ''
    returnType: std::string
    signature: std::string pack_encode_length(const uint64_t value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 157
      start: 155
    functionDepth: 0
    functionLinenumber: 155
    functionLinenumberEnd: 157
    functionName: brpc::mysql_uint2korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t mysql_uint2korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 159
    functionDepth: 0
    functionLinenumber: 159
    functionLinenumberEnd: 161
    functionName: brpc::mysql_uint3korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint3korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::mysql_uint4korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint4korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 168
    functionDepth: 0
    functionLinenumber: 168
    functionLinenumberEnd: 173
    functionName: brpc::mysql_uint8korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t mysql_uint8korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 179
    functionName: brpc::mysql_uint2korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t mysql_uint2korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 183
      start: 181
    functionDepth: 0
    functionLinenumber: 181
    functionLinenumberEnd: 183
    functionName: brpc::mysql_uint3korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint3korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 185
    functionDepth: 0
    functionLinenumber: 185
    functionLinenumberEnd: 187
    functionName: brpc::mysql_uint4korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t mysql_uint4korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - A
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 191
      start: 189
    functionDepth: 0
    functionLinenumber: 189
    functionLinenumberEnd: 191
    functionName: brpc::mysql_uint8korr
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t mysql_uint8korr(const uint8_t* A)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 32
    functionName: MY_ALLOC_CHECK
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MY_ALLOC_CHECK(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 40
    functionName: MY_PARSE_CHECK
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MY_PARSE_CHECK(expr)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:44,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:46,1
    - Dst: Type::Type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - arena
    - n
    - ' pointer'
    argTypes:
    - butil::Arena*
    - size_t
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 55
    functionName: brpc::my_alloc_check
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - Type::Type
    - butil::Arena*::allocate
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool my_alloc_check(butil::Arena* arena, const size_t n, Type*& pointer)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - arena
    - n
    - ' pointer'
    argTypes:
    - butil::Arena*
    - size_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: brpc::my_alloc_check
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena*::allocate
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool my_alloc_check(butil::Arena* arena, const size_t n, char*& pointer)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - decimal
    - d
    argTypes:
    - uint8_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 95
    functionName: brpc::write_zero_microsecs
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void write_zero_microsecs(uint8_t decimal, char* d)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - decimal
    - d
    argTypes:
    - uint8_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 95
    functionName: brpc::write_zero_microsecs
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void write_zero_microsecs(uint8_t decimal, char* d)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 1
    argNames:
    - type
    argTypes:
    - MysqlRspType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 117
    functionName: brpc::MysqlRspTypeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * MysqlRspTypeToString(MysqlRspType type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:122,1
    - Dst: brpc::mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:126,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 131
    functionName: brpc::is_full_package
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - brpc::mysql_uint3korr
    - fetch
    - brpc::size
    linkageType: ''
    returnType: bool
    signature: bool is_full_package(const butil::IOBuf& buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 145
    functionName: brpc::is_an_eof
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - fetch
    linkageType: ''
    returnType: bool
    signature: bool is_an_eof(const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:148,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:153,1
    - Dst: brpc::mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:154,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - ' buf'
    - value
    argTypes:
    - butil::IOBuf
    - MysqlHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 147
    functionDepth: 3
    functionLinenumber: 147
    functionLinenumberEnd: 162
    functionName: brpc::parse_header
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - brpc::mysql_uint3korr
    - cut1
    - brpc::is_full_package
    - cutn
    linkageType: ''
    returnType: bool
    signature: bool parse_header(butil::IOBuf& buf, MysqlHeader* value)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:165,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:171,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:178,1
    - Dst: brpc::mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:179,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:182,1
    - Dst: brpc::mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:183,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:186,1
    - Dst: brpc::mysql_uint8korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:187,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 164
    functionDepth: 2
    functionLinenumber: 164
    functionLinenumberEnd: 190
    functionName: brpc::parse_encode_length
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - brpc::mysql_uint8korr
    - brpc::size
    - brpc::mysql_uint3korr
    - cut1
    - cutn
    - brpc::mysql_uint2korr
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t parse_encode_length(butil::IOBuf& buf)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:198,1
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:202,1
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:224,1
    - Dst: mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:229,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:230,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:232,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:232,1
    - Dst: is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:233,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:237,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:237,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:238,1
    - Dst: auth_more_data::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:238,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:243,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:244,1
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:245,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:249,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:249,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:250,1
    - Dst: auth_more_data::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:250,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:256,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:256,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:257,1
    - Dst: auth::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:257,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:262,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:262,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:263,1
    - Dst: ok::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:263,1
    - Dst: ok::status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:264,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:267,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:267,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:268,1
    - Dst: prepare_ok::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:268,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:271,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:271,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:272,1
    - Dst: error::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:272,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:275,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:275,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:276,1
    - Dst: eof::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:276,1
    - Dst: eof::status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:277,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:280,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:280,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:281,1
    - Dst: result_set::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:281,1
    - Dst: result_set::_eof2::status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:284,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:285,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 61
    argCount: 5
    argNames:
    - ' buf'
    - arena
    - is_auth
    - stmt_type
    - more_results
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    - bool
    - MysqlStmtType
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 289
    functionName: brpc::MysqlReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - prepare_ok::Parse
    - error::Parse
    - unsigned
    - eof::Parse
    - eof::status
    - is_full_package
    - ok::Parse
    - auth::Parse
    - MY_ALLOC_CHECK
    - ok::status
    - size
    - MY_PARSE_CHECK
    - fetch
    - result_set::_eof2::status
    - append_to
    - my_alloc_check
    - auth_more_data::Parse
    - result_set::Parse
    - mysql_uint3korr
    - cutn
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::ConsumePartialIOBuf(butil::IOBuf& buf,\n                                           butil::Arena*
      arena,\n                                           bool is_auth,\n                                           MysqlStmtType
      stmt_type,\n                                           bool* more_results)"
  - BBCount: 42
    BranchProfiles: []
    Callsites:
    - Dst: _data::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:302,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:333,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:337,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:343,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:343,1
    - Dst: signed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:345,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:345,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:351,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:351,1
    - Dst: signed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:353,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:353,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:359,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:361,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:366,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:368,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:372,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:375,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:396,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 111
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 443
    functionName: brpc::MysqlReply::Print
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - Row*::field
    - unsigned
    - signed
    - _data::size
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Print(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:446,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:451,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:454,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:456,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:457,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:459,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:459,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:459,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:460,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:461,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:461,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:465,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:466,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:469,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:470,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:472,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:472,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:472,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:473,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:474,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:474,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:478,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:479,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:481,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:484,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:485,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:489,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:490,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:492,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:493,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:495,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:496,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:498,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:498,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:498,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:499,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:500,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:500,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:504,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:505,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:509,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:509,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:510,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:511,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:513,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:514,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 49
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 516
    functionName: MysqlReply::Auth::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - clear
    - set_parsed
    - LOG
    - MY_ALLOC_CHECK
    - butil::IOBuf::copy_to
    - cut1
    - butil::IOBuf::size
    - cut_until
    - my_alloc_check
    - cutn
    - mysql_uint2korr
    - pop_front
    - butil::IOBuf::IOBuf
    - mysql_uint4korr
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Auth::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:519,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:523,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:529,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:533,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:533,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:534,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:535,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:537,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:539,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 541
    functionName: MysqlReply::AuthMoreData::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - pop_front
    - cutn
    - my_alloc_check
    - MY_ALLOC_CHECK
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::AuthMoreData::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:544,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:548,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:552,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:559,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:562,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:564,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:568,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 543
    functionDepth: 1
    functionLinenumber: 543
    functionLinenumberEnd: 570
    functionName: MysqlReply::ResultSetHeader::Parse(butil::IOBuf& buf)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - LOG
    - parse_encode_length
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::ResultSetHeader::Parse(butil::IOBuf& buf)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:573,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:577,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:584,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:586,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:587,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:591,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:591,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:592,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:593,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:595,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:597,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:598,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:602,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:602,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:603,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:604,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:606,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:607,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:608,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:609,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:613,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:613,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:614,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:615,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:617,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:618,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:619,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:620,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:624,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:624,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:625,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:626,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:628,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:630,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:631,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:635,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:635,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:636,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:637,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:639,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:640,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:641,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:642,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:646,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:646,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:647,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:648,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:649,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:652,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:653,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:657,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:658,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:660,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:663,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:664,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:666,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:667,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:668,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 69
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 670
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 670
    functionName: MysqlReply::Column::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - LOG
    - pop_front
    - cutn
    - parse_encode_length
    - mysql_uint2korr
    - my_alloc_check
    - cut1
    - MY_ALLOC_CHECK
    - mysql_uint4korr
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Column::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:673,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:677,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:682,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:683,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:685,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:686,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:689,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:690,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:694,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:695,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:698,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:702,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:702,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:703,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:704,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:706,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 672
    functionDepth: 1
    functionLinenumber: 672
    functionLinenumberEnd: 708
    functionName: MysqlReply::Ok::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - pop_front
    - cutn
    - parse_encode_length
    - mysql_uint2korr
    - my_alloc_check
    - MY_ALLOC_CHECK
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Ok::Parse(butil::IOBuf& buf, butil::Arena* arena)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:711,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:715,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:718,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:721,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:722,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:726,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:727,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:729,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 731
    functionName: MysqlReply::Eof::Parse(butil::IOBuf& buf)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - pop_front
    - cutn
    - mysql_uint2korr
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Eof::Parse(butil::IOBuf& buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:734,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:738,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:741,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:744,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:745,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:747,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:750,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:750,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:751,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:752,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:758,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:764,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:764,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:765,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:766,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 769
      start: 733
    functionDepth: 1
    functionLinenumber: 733
    functionLinenumberEnd: 769
    functionName: MysqlReply::Error::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - LOG
    - pop_front
    - cutn
    - mysql_uint2korr
    - my_alloc_check
    - MY_ALLOC_CHECK
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Error::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:777,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:781,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:786,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:786,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:790,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:792,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:793,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:802,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:802,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:806,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:808,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:808,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:811,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 6
    argNames:
    - ' buf'
    - columns
    - column_count
    - fields
    - binary
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - uint64_t
    - MysqlReply::Field*
    - bool
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 771
    functionDepth: 1
    functionLinenumber: 771
    functionLinenumberEnd: 813
    functionName: "MysqlReply::Row::Parse(butil::IOBuf& buf,\n                                  const
      MysqlReply::Column* columns,\n                                  uint64_t column_count,\n
      \                                 MysqlReply::Field* fields,\n                                  bool
      binary,\n                                  butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - LOG
    - Parse
    - cut1
    - unsigned
    - cutn
    - my_alloc_check
    - MY_ALLOC_CHECK
    - MY_PARSE_CHECK
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Row::Parse(butil::IOBuf& buf,\n                                  const
      MysqlReply::Column* columns,\n                                  uint64_t column_count,\n
      \                                 MysqlReply::Field* fields,\n                                  bool
      binary,\n                                  butil::Arena* arena)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:818,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:826,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:830,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:838,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:839,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:840,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:844,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:845,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:852,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:852,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:854,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:854,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:860,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:860,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:862,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:862,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:868,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:868,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:870,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:870,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:875,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:875,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:877,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:877,1
    - Dst: strtof
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:881,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:881,1
    - Dst: strtod
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:884,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:884,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:906,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:906,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:907,1
    - Dst: str::set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:908,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:911,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:912,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:915,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 87
    argCount: 3
    argNames:
    - ' buf'
    - column
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 917
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 917
    functionName: "MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    butil::Arena*
      arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - strtoul
    - str::set
    - butil::IOBuf::to_string
    - strtof
    - LOG
    - strtod
    - MY_ALLOC_CHECK
    - butil::IOBuf::copy_to
    - cutn
    - parse_encode_length
    - strtol
    - my_alloc_check
    - butil::IOBuf::IOBuf
    - size
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    butil::Arena*
      arena)"
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:925,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:935,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:945,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:947,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:954,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:955,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:958,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:959,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:966,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:967,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:970,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:971,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:977,1
    - Dst: mysql_uint8korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:978,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:981,1
    - Dst: mysql_uint8korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:982,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:987,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:991,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1007,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1011,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1015,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1016,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1017,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1021,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1021,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1022,1
    - Dst: str::set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1023,1
    - Dst: ParseBinaryDataTime
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1029,1
    - Dst: ParseBinaryTime
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1035,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1041,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1044,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 108
    argCount: 6
    argNames:
    - ' buf'
    - column
    - column_index
    - column_count
    - null_mask
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - uint64_t
    - uint64_t
    - uint8_t*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1046
      start: 919
    functionDepth: 1
    functionLinenumber: 919
    functionLinenumberEnd: 1046
    functionName: "MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    uint64_t column_index,\n
      \                                   uint64_t column_count,\n                                    const
      uint8_t* null_mask,\n                                    butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - ParseBinaryDataTime
    - str::set
    - ParseBinaryTime
    - LOG
    - mysql_uint8korr
    - cut1
    - cutn
    - mysql_uint2korr
    - parse_encode_length
    - my_alloc_check
    - MY_ALLOC_CHECK
    - mysql_uint4korr
    - size
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    uint64_t column_index,\n
      \                                   uint64_t column_count,\n                                    const
      uint8_t* null_mask,\n                                    butil::Arena* arena)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1053,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1060,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1064,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1065,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1065,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1087,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1093,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1093,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1104,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1105,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1106,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1107,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1108,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1124,1
    - Dst: ParseMicrosecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1157,1
    - Dst: write_zero_microsecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1159,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1169,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 72
    argCount: 4
    argNames:
    - ' buf'
    - column
    - ' str'
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - butil::StringPiece
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1172
      start: 1048
    functionDepth: 1
    functionLinenumber: 1048
    functionLinenumberEnd: 1172
    functionName: "MysqlReply::Field::ParseBinaryTime(butil::IOBuf& buf,\n                                              const
      MysqlReply::Column* column,\n                                              butil::StringPiece&
      str,\n                                              butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - set
    - ParseMicrosecs
    - write_zero_microsecs
    - LOG
    - cut1
    - parse_encode_length
    - cutn
    - my_alloc_check
    - MY_ALLOC_CHECK
    - mysql_uint4korr
    - size
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::ParseBinaryTime(butil::IOBuf& buf,\n
      \                                             const MysqlReply::Column* column,\n
      \                                             butil::StringPiece& str,\n                                              butil::Arena*
      arena)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1191,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1221,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1228,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1228,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1237,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1238,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1239,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1240,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1243,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1244,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1252,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1271,1
    - Dst: ParseMicrosecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1293,1
    - Dst: write_zero_microsecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1295,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1304,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 83
    argCount: 4
    argNames:
    - ' buf'
    - column
    - ' str'
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - butil::StringPiece
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1307
      start: 1174
    functionDepth: 1
    functionLinenumber: 1174
    functionLinenumberEnd: 1307
    functionName: "MysqlReply::Field::ParseBinaryDataTime(butil::IOBuf& buf,\n                                                  const
      MysqlReply::Column* column,\n                                                  butil::StringPiece&
      str,\n                                                  butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - set
    - ParseMicrosecs
    - write_zero_microsecs
    - LOG
    - cutn
    - parse_encode_length
    - mysql_uint2korr
    - my_alloc_check
    - cut1
    - MY_ALLOC_CHECK
    - size
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::ParseBinaryDataTime(butil::IOBuf& buf,\n
      \                                                 const MysqlReply::Column*
      column,\n                                                  butil::StringPiece&
      str,\n                                                  butil::Arena* arena)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1316,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1320,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 52
    argCount: 3
    argNames:
    - ' buf'
    - decimal
    - d
    argTypes:
    - butil::IOBuf
    - uint8_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1368
      start: 1309
    functionDepth: 0
    functionLinenumber: 1309
    functionLinenumberEnd: 1368
    functionName: MysqlReply::Field::ParseMicrosecs(butil::IOBuf& buf, uint8_t decimal,
      char* d)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - cutn
    - mysql_uint4korr
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Field::ParseMicrosecs(butil::IOBuf& buf, uint8_t
      decimal, char* d)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1371,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1375,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1375,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1377,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1377,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1379,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1379,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1382,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1382,1
    - Dst: is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1387,1
    - Dst: is_an_eof
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1391,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1397,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1397,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1398,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1398,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1404,1
    - Dst: Row*::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1404,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1409,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1409,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1410,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - ' buf'
    - arena
    - binary
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1412
      start: 1370
    functionDepth: 1
    functionLinenumber: 1370
    functionLinenumberEnd: 1412
    functionName: MysqlReply::ResultSet::Parse(butil::IOBuf& buf, butil::Arena* arena,
      bool binary)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - Row*::Parse
    - is_an_eof
    - Parse
    - is_full_package
    - my_alloc_check
    - MY_ALLOC_CHECK
    - MY_PARSE_CHECK
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::ResultSet::Parse(butil::IOBuf& buf, butil::Arena*
      arena, bool binary)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1415,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1419,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1419,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1422,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1422,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1424,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1424,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1426,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1426,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1430,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1430,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1432,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1432,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1434,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1434,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1436,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1438
      start: 1414
    functionDepth: 1
    functionLinenumber: 1414
    functionLinenumberEnd: 1438
    functionName: MysqlReply::PrepareOk::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - Parse
    - my_alloc_check
    - MY_ALLOC_CHECK
    - MY_PARSE_CHECK
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::PrepareOk::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1441,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1446,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1450,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1453,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1454,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1458,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1459,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1463,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1464,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1466,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1469,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1470,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1473,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1440
    functionDepth: 0
    functionLinenumber: 1440
    functionLinenumberEnd: 1475
    functionName: MysqlReply::PrepareOk::Header::Parse(butil::IOBuf& buf)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - pop_front
    - cutn
    - mysql_uint2korr
    - mysql_uint4korr
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::PrepareOk::Header::Parse(butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 26
    functionDepth: 0
    functionLinenumber: 26
    functionLinenumberEnd: 32
    functionName: MY_ALLOC_CHECK
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 13
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MY_ALLOC_CHECK(expr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - expr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 33
    functionDepth: 0
    functionLinenumber: 33
    functionLinenumberEnd: 40
    functionName: MY_PARSE_CHECK
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: MY_PARSE_CHECK(expr)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:44,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:46,1
    - Dst: Type::Type
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:51,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 3
    argNames:
    - arena
    - n
    - ' pointer'
    argTypes:
    - butil::Arena*
    - size_t
    - Type*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 42
    functionDepth: 1
    functionLinenumber: 42
    functionLinenumberEnd: 55
    functionName: brpc::my_alloc_check
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - Type::Type
    - butil::Arena*::allocate
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool my_alloc_check(butil::Arena* arena, const size_t n, Type*& pointer)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::Arena*::allocate
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:62,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 3
    argNames:
    - arena
    - n
    - ' pointer'
    argTypes:
    - butil::Arena*
    - size_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 58
    functionDepth: 1
    functionLinenumber: 58
    functionLinenumberEnd: 67
    functionName: brpc::my_alloc_check
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - butil::Arena*::allocate
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool my_alloc_check(butil::Arena* arena, const size_t n, char*& pointer)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - decimal
    - d
    argTypes:
    - uint8_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 95
    functionName: brpc::write_zero_microsecs
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void write_zero_microsecs(uint8_t decimal, char* d)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 8
    argCount: 2
    argNames:
    - decimal
    - d
    argTypes:
    - uint8_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 85
    functionDepth: 0
    functionLinenumber: 85
    functionLinenumberEnd: 95
    functionName: brpc::write_zero_microsecs
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void write_zero_microsecs(uint8_t decimal, char* d)
  - BBCount: 9
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 19
    argCount: 1
    argNames:
    - type
    argTypes:
    - MysqlRspType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 117
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 117
    functionName: brpc::MysqlRspTypeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * MysqlRspTypeToString(MysqlRspType type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:122,1
    - Dst: brpc::mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:126,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:127,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 131
    functionName: brpc::is_full_package
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 1
    functionsReached:
    - brpc::mysql_uint3korr
    - fetch
    - brpc::size
    linkageType: ''
    returnType: bool
    signature: bool is_full_package(const butil::IOBuf& buf)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:135,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 133
    functionDepth: 0
    functionLinenumber: 133
    functionLinenumberEnd: 145
    functionName: brpc::is_an_eof
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - fetch
    linkageType: ''
    returnType: bool
    signature: bool is_an_eof(const butil::IOBuf& buf)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:148,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:153,1
    - Dst: brpc::mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:154,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 11
    argCount: 2
    argNames:
    - ' buf'
    - value
    argTypes:
    - butil::IOBuf
    - MysqlHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 147
    functionDepth: 3
    functionLinenumber: 147
    functionLinenumberEnd: 162
    functionName: brpc::parse_header
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - brpc::mysql_uint3korr
    - cut1
    - brpc::is_full_package
    - cutn
    linkageType: ''
    returnType: bool
    signature: bool parse_header(butil::IOBuf& buf, MysqlHeader* value)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:165,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:171,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:178,1
    - Dst: brpc::mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:179,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:182,1
    - Dst: brpc::mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:183,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:186,1
    - Dst: brpc::mysql_uint8korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:187,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 24
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 190
      start: 164
    functionDepth: 2
    functionLinenumber: 164
    functionLinenumberEnd: 190
    functionName: brpc::parse_encode_length
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - brpc::mysql_uint8korr
    - brpc::size
    - brpc::mysql_uint3korr
    - cut1
    - cutn
    - brpc::mysql_uint2korr
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t parse_encode_length(butil::IOBuf& buf)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:198,1
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:202,1
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:224,1
    - Dst: mysql_uint3korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:229,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:230,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:232,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:232,1
    - Dst: is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:233,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:237,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:237,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:238,1
    - Dst: auth_more_data::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:238,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:243,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:244,1
    - Dst: fetch
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:245,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:249,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:249,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:250,1
    - Dst: auth_more_data::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:250,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:256,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:256,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:257,1
    - Dst: auth::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:257,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:262,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:262,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:263,1
    - Dst: ok::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:263,1
    - Dst: ok::status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:264,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:267,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:267,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:268,1
    - Dst: prepare_ok::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:268,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:271,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:271,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:272,1
    - Dst: error::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:272,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:275,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:275,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:276,1
    - Dst: eof::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:276,1
    - Dst: eof::status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:277,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:280,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:280,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:281,1
    - Dst: result_set::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:281,1
    - Dst: result_set::_eof2::status
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:282,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:284,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:285,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:285,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 61
    argCount: 5
    argNames:
    - ' buf'
    - arena
    - is_auth
    - stmt_type
    - more_results
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    - bool
    - MysqlStmtType
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 289
      start: 192
    functionDepth: 1
    functionLinenumber: 192
    functionLinenumberEnd: 289
    functionName: brpc::MysqlReply::ConsumePartialIOBuf
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - prepare_ok::Parse
    - error::Parse
    - unsigned
    - eof::Parse
    - eof::status
    - is_full_package
    - ok::Parse
    - auth::Parse
    - MY_ALLOC_CHECK
    - ok::status
    - size
    - MY_PARSE_CHECK
    - fetch
    - result_set::_eof2::status
    - append_to
    - my_alloc_check
    - auth_more_data::Parse
    - result_set::Parse
    - mysql_uint3korr
    - cutn
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::ConsumePartialIOBuf(butil::IOBuf& buf,\n                                           butil::Arena*
      arena,\n                                           bool is_auth,\n                                           MysqlStmtType
      stmt_type,\n                                           bool* more_results)"
  - BBCount: 42
    BranchProfiles: []
    Callsites:
    - Dst: _data::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:302,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:333,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:337,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:343,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:343,1
    - Dst: signed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:345,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:345,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:351,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:351,1
    - Dst: signed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:353,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:353,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:359,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:361,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:366,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:368,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:372,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:375,1
    - Dst: Row*::field
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:396,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 111
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 291
    functionDepth: 0
    functionLinenumber: 291
    functionLinenumberEnd: 443
    functionName: brpc::MysqlReply::Print
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - Row*::field
    - unsigned
    - signed
    - _data::size
    linkageType: ''
    returnType: void
    signature: void MysqlReply::Print(std::ostream& os) const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:446,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:451,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:454,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:456,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:457,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:459,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:459,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:459,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:460,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:461,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:461,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:465,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:466,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:469,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:470,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:472,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:472,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:472,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:473,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:474,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:474,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:478,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:479,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:481,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:484,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:485,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:489,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:490,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:492,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:493,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:495,1
    - Dst: cut_until
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:496,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:498,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:498,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:498,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:499,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:500,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:500,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:503,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:504,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:505,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:509,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:509,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:510,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:511,1
    - Dst: clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:513,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:514,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 49
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 516
    functionName: MysqlReply::Auth::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - clear
    - set_parsed
    - LOG
    - MY_ALLOC_CHECK
    - butil::IOBuf::copy_to
    - cut1
    - butil::IOBuf::size
    - cut_until
    - my_alloc_check
    - cutn
    - mysql_uint2korr
    - pop_front
    - butil::IOBuf::IOBuf
    - mysql_uint4korr
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Auth::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:519,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:523,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:529,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:533,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:533,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:534,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:535,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:537,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:539,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 541
      start: 518
    functionDepth: 1
    functionLinenumber: 518
    functionLinenumberEnd: 541
    functionName: MysqlReply::AuthMoreData::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - pop_front
    - cutn
    - my_alloc_check
    - MY_ALLOC_CHECK
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::AuthMoreData::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:544,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:548,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:552,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:553,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:559,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:562,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:564,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:568,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 21
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 570
      start: 543
    functionDepth: 1
    functionLinenumber: 543
    functionLinenumberEnd: 570
    functionName: MysqlReply::ResultSetHeader::Parse(butil::IOBuf& buf)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - LOG
    - parse_encode_length
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::ResultSetHeader::Parse(butil::IOBuf& buf)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:573,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:577,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:584,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:586,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:587,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:591,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:591,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:592,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:593,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:595,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:596,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:597,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:598,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:602,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:602,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:603,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:604,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:606,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:607,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:608,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:609,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:613,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:613,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:614,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:615,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:617,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:618,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:619,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:620,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:624,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:624,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:625,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:626,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:628,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:629,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:630,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:631,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:635,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:635,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:636,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:637,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:639,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:640,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:641,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:642,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:646,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:646,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:647,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:648,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:649,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:652,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:653,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:657,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:658,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:660,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:663,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:664,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:666,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:667,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:668,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 69
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 670
      start: 572
    functionDepth: 1
    functionLinenumber: 572
    functionLinenumberEnd: 670
    functionName: MysqlReply::Column::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - LOG
    - pop_front
    - cutn
    - parse_encode_length
    - mysql_uint2korr
    - my_alloc_check
    - cut1
    - MY_ALLOC_CHECK
    - mysql_uint4korr
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Column::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:673,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:677,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:682,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:683,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:685,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:686,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:689,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:690,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:694,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:695,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:698,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:702,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:702,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:703,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:704,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:706,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 25
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 708
      start: 672
    functionDepth: 1
    functionLinenumber: 672
    functionLinenumberEnd: 708
    functionName: MysqlReply::Ok::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - pop_front
    - cutn
    - parse_encode_length
    - mysql_uint2korr
    - my_alloc_check
    - MY_ALLOC_CHECK
    - size
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Ok::Parse(butil::IOBuf& buf, butil::Arena* arena)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:711,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:715,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:718,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:721,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:722,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:726,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:727,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:729,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 731
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 731
    functionName: MysqlReply::Eof::Parse(butil::IOBuf& buf)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - pop_front
    - cutn
    - mysql_uint2korr
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Eof::Parse(butil::IOBuf& buf)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:734,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:738,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:741,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:744,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:745,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:747,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:750,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:750,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:751,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:752,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:758,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:764,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:764,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:765,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:766,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:767,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 769
      start: 733
    functionDepth: 1
    functionLinenumber: 733
    functionLinenumberEnd: 769
    functionName: MysqlReply::Error::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set
    - set_parsed
    - LOG
    - pop_front
    - cutn
    - mysql_uint2korr
    - my_alloc_check
    - MY_ALLOC_CHECK
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Error::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:777,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:781,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:786,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:786,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:790,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:792,1
    - Dst: unsigned
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:793,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:802,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:802,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:806,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:808,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:808,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:811,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 28
    argCount: 6
    argNames:
    - ' buf'
    - columns
    - column_count
    - fields
    - binary
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - uint64_t
    - MysqlReply::Field*
    - bool
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 813
      start: 771
    functionDepth: 1
    functionLinenumber: 771
    functionLinenumberEnd: 813
    functionName: "MysqlReply::Row::Parse(butil::IOBuf& buf,\n                                  const
      MysqlReply::Column* columns,\n                                  uint64_t column_count,\n
      \                                 MysqlReply::Field* fields,\n                                  bool
      binary,\n                                  butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - LOG
    - Parse
    - cut1
    - unsigned
    - cutn
    - my_alloc_check
    - MY_ALLOC_CHECK
    - MY_PARSE_CHECK
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Row::Parse(butil::IOBuf& buf,\n                                  const
      MysqlReply::Column* columns,\n                                  uint64_t column_count,\n
      \                                 MysqlReply::Field* fields,\n                                  bool
      binary,\n                                  butil::Arena* arena)"
  - BBCount: 37
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:818,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:826,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:830,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:838,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:839,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:840,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:844,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:845,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:852,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:852,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:854,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:854,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:860,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:860,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:862,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:862,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:868,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:868,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:870,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:870,1
    - Dst: strtoul
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:875,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:875,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:877,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:877,1
    - Dst: strtof
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:881,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:881,1
    - Dst: strtod
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:884,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:884,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:906,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:906,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:907,1
    - Dst: str::set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:908,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:911,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:912,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:915,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 87
    argCount: 3
    argNames:
    - ' buf'
    - column
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 917
      start: 815
    functionDepth: 1
    functionLinenumber: 815
    functionLinenumberEnd: 917
    functionName: "MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    butil::Arena*
      arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - strtoul
    - str::set
    - butil::IOBuf::to_string
    - strtof
    - LOG
    - strtod
    - MY_ALLOC_CHECK
    - butil::IOBuf::copy_to
    - cutn
    - parse_encode_length
    - strtol
    - my_alloc_check
    - butil::IOBuf::IOBuf
    - size
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    butil::Arena*
      arena)"
  - BBCount: 40
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:925,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:935,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:945,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:947,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:954,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:955,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:958,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:959,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:966,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:967,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:970,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:971,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:977,1
    - Dst: mysql_uint8korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:978,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:981,1
    - Dst: mysql_uint8korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:982,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:987,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:991,1
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1007,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1011,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1015,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1016,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1017,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1021,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1021,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1022,1
    - Dst: str::set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1023,1
    - Dst: ParseBinaryDataTime
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1029,1
    - Dst: ParseBinaryTime
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1035,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1041,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1044,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 108
    argCount: 6
    argNames:
    - ' buf'
    - column
    - column_index
    - column_count
    - null_mask
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - uint64_t
    - uint64_t
    - uint8_t*
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1046
      start: 919
    functionDepth: 1
    functionLinenumber: 919
    functionLinenumberEnd: 1046
    functionName: "MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    uint64_t column_index,\n
      \                                   uint64_t column_count,\n                                    const
      uint8_t* null_mask,\n                                    butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - ParseBinaryDataTime
    - str::set
    - ParseBinaryTime
    - LOG
    - mysql_uint8korr
    - cut1
    - cutn
    - mysql_uint2korr
    - parse_encode_length
    - my_alloc_check
    - MY_ALLOC_CHECK
    - mysql_uint4korr
    - size
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::Parse(butil::IOBuf& buf,\n                                    const
      MysqlReply::Column* column,\n                                    uint64_t column_index,\n
      \                                   uint64_t column_count,\n                                    const
      uint8_t* null_mask,\n                                    butil::Arena* arena)"
  - BBCount: 19
    BranchProfiles: []
    Callsites:
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1053,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1060,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1064,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1065,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1065,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1087,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1093,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1093,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1104,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1105,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1106,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1107,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1108,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1124,1
    - Dst: ParseMicrosecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1157,1
    - Dst: write_zero_microsecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1159,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1169,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 72
    argCount: 4
    argNames:
    - ' buf'
    - column
    - ' str'
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - butil::StringPiece
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1172
      start: 1048
    functionDepth: 1
    functionLinenumber: 1048
    functionLinenumberEnd: 1172
    functionName: "MysqlReply::Field::ParseBinaryTime(butil::IOBuf& buf,\n                                              const
      MysqlReply::Column* column,\n                                              butil::StringPiece&
      str,\n                                              butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - set
    - ParseMicrosecs
    - write_zero_microsecs
    - LOG
    - cut1
    - parse_encode_length
    - cutn
    - my_alloc_check
    - MY_ALLOC_CHECK
    - mysql_uint4korr
    - size
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::ParseBinaryTime(butil::IOBuf& buf,\n
      \                                             const MysqlReply::Column* column,\n
      \                                             butil::StringPiece& str,\n                                              butil::Arena*
      arena)"
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: parse_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1186,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1191,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1221,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1228,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1228,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1237,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1238,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1239,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1240,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1243,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1244,1
    - Dst: cut1
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1245,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1252,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1271,1
    - Dst: ParseMicrosecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1293,1
    - Dst: write_zero_microsecs
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1295,1
    - Dst: set
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1304,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 83
    argCount: 4
    argNames:
    - ' buf'
    - column
    - ' str'
    - arena
    argTypes:
    - butil::IOBuf
    - MysqlReply::Column*
    - butil::StringPiece
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1307
      start: 1174
    functionDepth: 1
    functionLinenumber: 1174
    functionLinenumberEnd: 1307
    functionName: "MysqlReply::Field::ParseBinaryDataTime(butil::IOBuf& buf,\n                                                  const
      MysqlReply::Column* column,\n                                                  butil::StringPiece&
      str,\n                                                  butil::Arena* arena)"
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - set
    - ParseMicrosecs
    - write_zero_microsecs
    - LOG
    - cutn
    - parse_encode_length
    - mysql_uint2korr
    - my_alloc_check
    - cut1
    - MY_ALLOC_CHECK
    - size
    linkageType: ''
    returnType: ParseError
    signature: "ParseError MysqlReply::Field::ParseBinaryDataTime(butil::IOBuf& buf,\n
      \                                                 const MysqlReply::Column*
      column,\n                                                  butil::StringPiece&
      str,\n                                                  butil::Arena* arena)"
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1316,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1320,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 52
    argCount: 3
    argNames:
    - ' buf'
    - decimal
    - d
    argTypes:
    - butil::IOBuf
    - uint8_t
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1368
      start: 1309
    functionDepth: 0
    functionLinenumber: 1309
    functionLinenumberEnd: 1368
    functionName: MysqlReply::Field::ParseMicrosecs(butil::IOBuf& buf, uint8_t decimal,
      char* d)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - cutn
    - mysql_uint4korr
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::Field::ParseMicrosecs(butil::IOBuf& buf, uint8_t
      decimal, char* d)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1371,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1375,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1375,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1377,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1377,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1379,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1379,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1382,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1382,1
    - Dst: is_full_package
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1387,1
    - Dst: is_an_eof
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1391,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1397,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1397,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1398,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1398,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1404,1
    - Dst: Row*::Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1404,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1409,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1409,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1410,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - ' buf'
    - arena
    - binary
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1412
      start: 1370
    functionDepth: 1
    functionLinenumber: 1370
    functionLinenumberEnd: 1412
    functionName: MysqlReply::ResultSet::Parse(butil::IOBuf& buf, butil::Arena* arena,
      bool binary)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - Row*::Parse
    - is_an_eof
    - Parse
    - is_full_package
    - my_alloc_check
    - MY_ALLOC_CHECK
    - MY_PARSE_CHECK
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::ResultSet::Parse(butil::IOBuf& buf, butil::Arena*
      arena, bool binary)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1415,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1419,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1419,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1422,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1422,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1424,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1424,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1426,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1426,1
    - Dst: MY_ALLOC_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1430,1
    - Dst: my_alloc_check
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1430,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1432,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1432,1
    - Dst: MY_PARSE_CHECK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1434,1
    - Dst: Parse
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1434,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1436,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - ' buf'
    - arena
    argTypes:
    - butil::IOBuf
    - butil::Arena*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1438
      start: 1414
    functionDepth: 1
    functionLinenumber: 1414
    functionLinenumberEnd: 1438
    functionName: MysqlReply::PrepareOk::Parse(butil::IOBuf& buf, butil::Arena* arena)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - Parse
    - my_alloc_check
    - MY_ALLOC_CHECK
    - MY_PARSE_CHECK
    - set_parsed
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::PrepareOk::Parse(butil::IOBuf& buf, butil::Arena*
      arena)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: is_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1441,1
    - Dst: parse_header
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1446,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1450,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1453,1
    - Dst: mysql_uint4korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1454,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1458,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1459,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1463,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1464,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1466,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1469,1
    - Dst: mysql_uint2korr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1470,1
    - Dst: set_parsed
      Src: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp:1473,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 23
    argCount: 1
    argNames:
    - ' buf'
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1475
      start: 1440
    functionDepth: 0
    functionLinenumber: 1440
    functionLinenumberEnd: 1475
    functionName: MysqlReply::PrepareOk::Header::Parse(butil::IOBuf& buf)
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_reply.cpp
    functionUses: 0
    functionsReached:
    - is_parsed
    - set_parsed
    - pop_front
    - cutn
    - mysql_uint2korr
    - mysql_uint4korr
    - parse_header
    linkageType: ''
    returnType: ParseError
    signature: ParseError MysqlReply::PrepareOk::Header::Parse(butil::IOBuf& buf)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MysqlStatement::MysqlStatement
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' channel'
    - ' str'
    argTypes:
    - Channel
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::NewMysqlStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 10
    functionsReached:
    - MysqlStatement::MysqlStatement
    linkageType: ''
    returnType: MysqlStatementUniquePtr
    signature: MysqlStatementUniquePtr NewMysqlStatement(const Channel& channel, const
      butil::StringPiece& str)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:43,1
    - Dst: MysqlStatementDBD::ScopedPtr::seek
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:48,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:50,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:57,1
    - Dst: SocketUniquePtr::fd_version
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:58,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:73,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - socket_id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 36
    functionDepth: 3
    functionLinenumber: 36
    functionLinenumberEnd: 78
    functionName: brpc::MysqlStatement::StatementId
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - MysqlStatementDBD::ScopedPtr::seek
    - Modify
    - SocketUniquePtr::fd_version
    - LOG
    - Read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlStatement::StatementId(SocketId socket_id) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:85,1
    - Dst: SocketUniquePtr::fd_version
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:86,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - socket_id
    - stmt_id
    argTypes:
    - SocketId
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 80
    functionDepth: 3
    functionLinenumber: 80
    functionLinenumberEnd: 90
    functionName: brpc::MysqlStatement::SetStatementId
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - Modify
    - SocketUniquePtr::fd_version
    linkageType: ''
    returnType: void
    signature: void MysqlStatement::SetStatementId(SocketId socket_id, uint32_t stmt_id)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:100,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 42
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 145
    functionName: brpc::CountPlaceholders
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t CountPlaceholders(const std::string& s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:100,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 42
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 145
    functionName: brpc::CountPlaceholders
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t CountPlaceholders(const std::string& s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CountPlaceholders
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:149,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:150,1
    - Dst: ConnectionType
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:151,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:153,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' channel'
    argTypes:
    - Channel
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 161
    functionName: brpc::MysqlStatement::Init
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 2
    functionsReached:
    - options
    - Modify
    - CountPlaceholders
    - ConnectionType
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void MysqlStatement::Init(const Channel& channel)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: MysqlStatement::MysqlStatement
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:32,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' channel'
    - ' str'
    argTypes:
    - Channel
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: brpc::NewMysqlStatement
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 10
    functionsReached:
    - MysqlStatement::MysqlStatement
    linkageType: ''
    returnType: MysqlStatementUniquePtr
    signature: MysqlStatementUniquePtr NewMysqlStatement(const Channel& channel, const
      butil::StringPiece& str)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: Read
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:42,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:43,1
    - Dst: MysqlStatementDBD::ScopedPtr::seek
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:48,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:50,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:57,1
    - Dst: SocketUniquePtr::fd_version
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:58,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:73,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 1
    argNames:
    - socket_id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 78
      start: 36
    functionDepth: 3
    functionLinenumber: 36
    functionLinenumberEnd: 78
    functionName: brpc::MysqlStatement::StatementId
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - MysqlStatementDBD::ScopedPtr::seek
    - Modify
    - SocketUniquePtr::fd_version
    - LOG
    - Read
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t MysqlStatement::StatementId(SocketId socket_id) const
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:85,1
    - Dst: SocketUniquePtr::fd_version
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:86,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:88,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 2
    argNames:
    - socket_id
    - stmt_id
    argTypes:
    - SocketId
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 80
    functionDepth: 3
    functionLinenumber: 80
    functionLinenumberEnd: 90
    functionName: brpc::MysqlStatement::SetStatementId
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - Modify
    - SocketUniquePtr::fd_version
    linkageType: ''
    returnType: void
    signature: void MysqlStatement::SetStatementId(SocketId socket_id, uint32_t stmt_id)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:100,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 42
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 145
    functionName: brpc::CountPlaceholders
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t CountPlaceholders(const std::string& s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:100,1
    CyclomaticComplexity: 26
    EdgeCount: 26
    ICount: 42
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 98
    functionDepth: 2
    functionLinenumber: 98
    functionLinenumberEnd: 145
    functionName: brpc::CountPlaceholders
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 0
    functionsReached:
    - brpc::size
    linkageType: ''
    returnType: uint16_t
    signature: uint16_t CountPlaceholders(const std::string& s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: CountPlaceholders
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:149,1
    - Dst: options
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:150,1
    - Dst: ConnectionType
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:151,1
    - Dst: Modify
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:153,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp:155,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 1
    argNames:
    - ' channel'
    argTypes:
    - Channel
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 148
    functionDepth: 1
    functionLinenumber: 148
    functionLinenumberEnd: 161
    functionName: brpc::MysqlStatement::Init
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement.cpp
    functionUses: 2
    functionsReached:
    - options
    - Modify
    - CountPlaceholders
    - ConnectionType
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void MysqlStatement::Init(const Channel& channel)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 1
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 1
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 2
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 2
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 3
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 3
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 4
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 4
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 5
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 5
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 6
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 6
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:36,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:37,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:40,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:55,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:58,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:59,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:63,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:64,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:67,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:68,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:69,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:73,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:74,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:86,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 48
    argCount: 3
    argNames:
    - ' buf'
    - out
    - is_null
    argTypes:
    - butil::StringPiece
    - uint64_t*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 28
    functionDepth: 1
    functionLinenumber: 28
    functionLinenumberEnd: 88
    functionName: brpc::policy::mysql::DecodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 7
    functionsReached:
    - static_cast<unsigned char>
    - LOG
    - empty
    - size
    - static_cast<uint64_t>
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedInt(const butil::StringPiece& buf, uint64_t*
      out,\n                              bool* is_null)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:92,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:96,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:97,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:98,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:102,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:103,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:104,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:105,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:108,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:110,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 22
    argCount: 2
    argNames:
    - value
    - out
    argTypes:
    - uint64_t
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 90
    functionDepth: 0
    functionLinenumber: 90
    functionLinenumberEnd: 112
    functionName: brpc::policy::mysql::EncodeLengthEncodedInt
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 7
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodeLengthEncodedInt(uint64_t value, std::string* out)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:117,1
    - Dst: brpc::policy::mysql::DecodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:125,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:137,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:141,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 3
    argNames:
    - ' buf'
    - out_value
    - is_null
    argTypes:
    - butil::StringPiece
    - std::string*
    - bool*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 114
    functionDepth: 2
    functionLinenumber: 114
    functionLinenumberEnd: 143
    functionName: brpc::policy::mysql::DecodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::clear
    - LOG
    - std::string*::assign
    - brpc::policy::mysql::DecodeLengthEncodedInt
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeLengthEncodedString(const butil::StringPiece& buf,\n
      \                                std::string* out_value,\n                                 bool*
      is_null)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::policy::mysql::EncodeLengthEncodedInt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:147,1
    - Dst: std::string*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:148,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' value'
    - out
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 149
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 149
    functionName: brpc::policy::mysql::EncodeLengthEncodedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 8
    functionsReached:
    - brpc::policy::mysql::EncodeLengthEncodedInt
    - std::string*::append
    - size
    - data
    linkageType: ''
    returnType: void
    signature: "void EncodeLengthEncodedString(const butil::StringPiece& value,\n
      \                              std::string* out)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:153,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:157,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:158,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:159,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:160,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' buf'
    - out
    argTypes:
    - butil::StringPiece
    - PacketHeader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 162
      start: 151
    functionDepth: 1
    functionLinenumber: 151
    functionLinenumberEnd: 162
    functionName: brpc::policy::mysql::DecodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned char>
    - static_cast<uint32_t>
    - size
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool DecodePacketHeader(const butil::StringPiece& buf, PacketHeader*
      out)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:165,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:166,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:167,1
    - Dst: std::string*::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:168,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - ' header'
    - out
    argTypes:
    - PacketHeader
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 169
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 169
    functionName: brpc::policy::mysql::EncodePacketHeader
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 0
    functionsReached:
    - std::string*::push_back
    - static_cast<char>
    linkageType: ''
    returnType: void
    signature: void EncodePacketHeader(const PacketHeader& header, std::string* out)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<const char*>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:173,1
    - Dst: memchr
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:176,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:179,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp:180,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - ' buf'
    - out_value
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 182
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 182
    functionName: brpc::policy::mysql::DecodeNullTerminatedString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_auth_packet.cpp
    functionUses: 16
    functionsReached:
    - memchr
    - LOG
    - std::string*::assign
    - static_cast<size_t>
    - static_cast<const char*>
    - data
    - size
    linkageType: ''
    returnType: size_t
    signature: "size_t DecodeNullTerminatedString(const butil::StringPiece& buf,\n
      \                                 std::string* out_value)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - MysqlStatementKVMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: brpc::my_init_kv
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: size_t
    signature: size_t my_init_kv(MysqlStatementKVMap& m)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:47,1
    - Dst: insert
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' m'
    - key
    - value
    argTypes:
    - MysqlStatementKVMap
    - SocketId
    - MysqlStatementId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 54
    functionName: brpc::my_update_kv
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h
    functionUses: 0
    functionsReached:
    - seek
    - insert
    linkageType: ''
    returnType: size_t
    signature: size_t my_update_kv(MysqlStatementKVMap& m, SocketId key, MysqlStatementId
      value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - MysqlStatementKVMap
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::my_delete_k
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: size_t
    signature: size_t my_delete_k(MysqlStatementKVMap& m, SocketId key)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: init
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:42,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - ' m'
    argTypes:
    - MysqlStatementKVMap
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 44
    functionName: brpc::my_init_kv
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h
    functionUses: 0
    functionsReached:
    - init
    linkageType: ''
    returnType: size_t
    signature: size_t my_init_kv(MysqlStatementKVMap& m)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: seek
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:47,1
    - Dst: insert
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:49,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - ' m'
    - key
    - value
    argTypes:
    - MysqlStatementKVMap
    - SocketId
    - MysqlStatementId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 54
    functionName: brpc::my_update_kv
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h
    functionUses: 0
    functionsReached:
    - seek
    - insert
    linkageType: ''
    returnType: size_t
    signature: size_t my_update_kv(MysqlStatementKVMap& m, SocketId key, MysqlStatementId
      value)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: erase
      Src: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' m'
    - key
    argTypes:
    - MysqlStatementKVMap
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 58
    functionName: brpc::my_delete_k
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_statement_inl.h
    functionUses: 0
    functionsReached:
    - erase
    linkageType: ''
    returnType: size_t
    signature: size_t my_delete_k(MysqlStatementKVMap& m, SocketId key)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:36,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:57,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:59,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:61,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:62,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:63,1
    - Dst: func
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:65,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - outbuf
    - ' head'
    - ' func'
    - ' data'
    argTypes:
    - butil::IOBuf*
    - H
    - F
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 70
    functionName: brpc::MakePacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - butil::Status::OK
    - butil::ByteSwapToLE32
    - brpc::size
    - func
    - butil::IOBuf*::size
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status MakePacket(butil::IOBuf* outbuf, const H& head, const
      F& func, const D& data)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:36,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:57,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:59,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:61,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:62,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:63,1
    - Dst: func
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:65,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - outbuf
    - ' head'
    - ' func'
    - ' data'
    argTypes:
    - butil::IOBuf*
    - H
    - F
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 70
    functionName: brpc::MakePacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - butil::Status::OK
    - butil::ByteSwapToLE32
    - brpc::size
    - func
    - butil::IOBuf*::size
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status MakePacket(butil::IOBuf* outbuf, const H& head, const
      F& func, const D& data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:77,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:78,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:82,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:82,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:84,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:85,1
    - Dst: brpc::MakePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - outbuf
    - type
    - ' command'
    argTypes:
    - butil::IOBuf*
    - MysqlCommandType
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 74
    functionDepth: 3
    functionLinenumber: 74
    functionLinenumberEnd: 87
    functionName: brpc::MysqlMakeCommand
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::MakePacket
    - brpc::size
    - butil::IOBuf::push_back
    - data
    - butil::IOBuf::IOBuf
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeCommand(butil::IOBuf* outbuf,\n                               const
      MysqlCommandType type,\n                               const butil::StringPiece&
      command)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:92,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:93,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:94,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:95,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:96,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:97,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:98,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:99,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:100,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:102,1
    - Dst: brpc::MakePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - outbuf
    - stmt_id
    - ' edata'
    argTypes:
    - butil::IOBuf*
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 89
    functionDepth: 3
    functionLinenumber: 89
    functionLinenumberEnd: 105
    functionName: brpc::MysqlMakeExecutePacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - append_to
    - butil::IOBuf::IOBuf
    - brpc::MakePacket
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeExecutePacket(butil::IOBuf* outbuf,\n                                     uint32_t
      stmt_id,\n                                     const butil::IOBuf& edata)"
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:112,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:119,1
    - Dst: MysqlStatementStub*::execute_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:121,1
    - Dst: MysqlStatementStub*::null_mask
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:122,1
    - Dst: MysqlStatementStub*::param_types
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:126,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:127,1
    - Dst: mask::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:133,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:134,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:135,1
    - Dst: types::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:136,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:137,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:149,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:160,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:161,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:174,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:175,1
    - Dst: butil::ByteSwapToLE64
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:187,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:188,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:194,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:199,1
    - Dst: butil::StringPiece*::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:203,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:210,1
    - Dst: brpc::pack_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:211,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:211,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:212,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:213,1
    - Dst: butil::StringPiece*::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:213,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:213,1
    - Dst: MysqlStatementStub*::save_long_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:215,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:225,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:226,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:231,1
    - Dst: mask::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:231,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:232,1
    - Dst: types::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:232,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:235,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 104
    argCount: 5
    argNames:
    - stmt
    - index
    - value
    - type
    - is_unsigned
    argTypes:
    - MysqlStatementStub*
    - uint16_t
    - void*
    - MysqlFieldType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 236
    functionName: brpc::MysqlMakeExecuteData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - unsafe_assign
    - LOG
    - butil::ByteSwapToLE64
    - types::data
    - butil::StringPiece*::size
    - BuiltinServiceTest::TestStatus
    - MysqlStatementStub*::param_types
    - butil::ByteSwapToLE16
    - MysqlStatementStub*::stmt
    - MysqlStatementStub*::null_mask
    - append
    - butil::StringPiece*::data
    - mask::resize
    - types::resize
    - brpc::pack_encode_length
    - butil::ByteSwapToLE32
    - mask::data
    - push_back
    - reserve
    - MysqlStatementStub*::save_long_data
    - MysqlStatementStub*::execute_data
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeExecuteData(MysqlStatementStub* stmt,\n                                   uint16_t
      index,\n                                   const void* value,\n                                   MysqlFieldType
      type,\n                                   bool is_unsigned)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:242,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:243,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:244,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:245,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:246,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:247,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:250,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:258,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:259,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:262,1
    - Dst: brpc::MakePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:264,1
    - Dst: auto::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:265,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:269,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 4
    argNames:
    - outbuf
    - stmt_id
    - param_id
    - ' ldata'
    argTypes:
    - butil::IOBuf*
    - uint32_t
    - uint16_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 238
    functionDepth: 3
    functionLinenumber: 238
    functionLinenumberEnd: 270
    functionName: brpc::MysqlMakeLongDataPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - auto::ok
    - butil::ByteSwapToLE16
    - butil::IOBuf::append_to
    - butil::Status::OK
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - brpc::size
    - butil::IOBuf::push_back
    - append_to
    - butil::IOBuf::size
    - butil::IOBuf::IOBuf
    - brpc::MakePacket
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeLongDataPacket(butil::IOBuf* outbuf,\n                                      uint32_t
      stmt_id,\n                                      uint16_t param_id,\n                                      const
      butil::IOBuf& ldata)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:36,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:57,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:59,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:61,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:62,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:63,1
    - Dst: func
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:65,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - outbuf
    - ' head'
    - ' func'
    - ' data'
    argTypes:
    - butil::IOBuf*
    - H
    - F
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 70
    functionName: brpc::MakePacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::append
    - butil::Status::OK
    - butil::ByteSwapToLE32
    - brpc::size
    - func
    - butil::IOBuf*::size
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status MakePacket(butil::IOBuf* outbuf, const H& head, const
      F& func, const D& data)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:34,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:36,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:57,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:59,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:61,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:62,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:63,1
    - Dst: func
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:65,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:69,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 4
    argNames:
    - outbuf
    - ' head'
    - ' func'
    - ' data'
    argTypes:
    - butil::IOBuf*
    - H
    - F
    - D
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 70
    functionName: brpc::MakePacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 3
    functionsReached:
    - butil::IOBuf*::append
    - butil::Status::OK
    - butil::ByteSwapToLE32
    - brpc::size
    - func
    - butil::IOBuf*::size
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: butil::Status MakePacket(butil::IOBuf* outbuf, const H& head, const
      F& func, const D& data)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:77,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:78,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:82,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:82,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:84,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:85,1
    - Dst: brpc::MakePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:86,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 3
    argNames:
    - outbuf
    - type
    - ' command'
    argTypes:
    - butil::IOBuf*
    - MysqlCommandType
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 74
    functionDepth: 3
    functionLinenumber: 74
    functionLinenumberEnd: 87
    functionName: brpc::MysqlMakeCommand
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::append
    - brpc::MakePacket
    - brpc::size
    - butil::IOBuf::push_back
    - data
    - butil::IOBuf::IOBuf
    - BuiltinServiceTest::TestStatus
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeCommand(butil::IOBuf* outbuf,\n                               const
      MysqlCommandType type,\n                               const butil::StringPiece&
      command)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:92,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:93,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:94,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:95,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:96,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:97,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:98,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:99,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:100,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:102,1
    - Dst: brpc::MakePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:104,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 11
    argCount: 3
    argNames:
    - outbuf
    - stmt_id
    - ' edata'
    argTypes:
    - butil::IOBuf*
    - uint32_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 89
    functionDepth: 3
    functionLinenumber: 89
    functionLinenumberEnd: 105
    functionName: brpc::MysqlMakeExecutePacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::push_back
    - append_to
    - butil::IOBuf::IOBuf
    - brpc::MakePacket
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeExecutePacket(butil::IOBuf* outbuf,\n                                     uint32_t
      stmt_id,\n                                     const butil::IOBuf& edata)"
  - BBCount: 21
    BranchProfiles: []
    Callsites:
    - Dst: MysqlStatementStub*::stmt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:112,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:119,1
    - Dst: MysqlStatementStub*::execute_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:121,1
    - Dst: MysqlStatementStub*::null_mask
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:122,1
    - Dst: MysqlStatementStub*::param_types
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:123,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:126,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:127,1
    - Dst: mask::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:133,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:134,1
    - Dst: push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:135,1
    - Dst: types::resize
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:136,1
    - Dst: reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:137,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:149,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:160,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:161,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:174,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:175,1
    - Dst: butil::ByteSwapToLE64
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:187,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:188,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:194,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:199,1
    - Dst: butil::StringPiece*::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:203,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:210,1
    - Dst: brpc::pack_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:211,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:211,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:212,1
    - Dst: append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:213,1
    - Dst: butil::StringPiece*::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:213,1
    - Dst: butil::StringPiece*::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:213,1
    - Dst: MysqlStatementStub*::save_long_data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:215,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:225,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:226,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:231,1
    - Dst: mask::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:231,1
    - Dst: unsafe_assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:232,1
    - Dst: types::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:232,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:235,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 104
    argCount: 5
    argNames:
    - stmt
    - index
    - value
    - type
    - is_unsigned
    argTypes:
    - MysqlStatementStub*
    - uint16_t
    - void*
    - MysqlFieldType
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 236
      start: 107
    functionDepth: 2
    functionLinenumber: 107
    functionLinenumberEnd: 236
    functionName: brpc::MysqlMakeExecuteData
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - butil::Status::OK
    - unsafe_assign
    - LOG
    - butil::ByteSwapToLE64
    - types::data
    - butil::StringPiece*::size
    - BuiltinServiceTest::TestStatus
    - MysqlStatementStub*::param_types
    - butil::ByteSwapToLE16
    - MysqlStatementStub*::stmt
    - MysqlStatementStub*::null_mask
    - append
    - butil::StringPiece*::data
    - mask::resize
    - types::resize
    - brpc::pack_encode_length
    - butil::ByteSwapToLE32
    - mask::data
    - push_back
    - reserve
    - MysqlStatementStub*::save_long_data
    - MysqlStatementStub*::execute_data
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeExecuteData(MysqlStatementStub* stmt,\n                                   uint16_t
      index,\n                                   const void* value,\n                                   MysqlFieldType
      type,\n                                   bool is_unsigned)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:242,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:243,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:244,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:245,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:246,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:247,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:250,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:252,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:258,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:259,1
    - Dst: butil::IOBuf::append_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:262,1
    - Dst: brpc::MakePacket
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:264,1
    - Dst: auto::ok
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:265,1
    - Dst: butil::Status::OK
      Src: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp:269,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 4
    argNames:
    - outbuf
    - stmt_id
    - param_id
    - ' ldata'
    argTypes:
    - butil::IOBuf*
    - uint32_t
    - uint16_t
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 270
      start: 238
    functionDepth: 3
    functionLinenumber: 238
    functionLinenumberEnd: 270
    functionName: brpc::MysqlMakeLongDataPacket
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_command.cpp
    functionUses: 0
    functionsReached:
    - auto::ok
    - butil::ByteSwapToLE16
    - butil::IOBuf::append_to
    - butil::Status::OK
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - brpc::size
    - butil::IOBuf::push_back
    - append_to
    - butil::IOBuf::size
    - butil::IOBuf::IOBuf
    - brpc::MakePacket
    linkageType: ''
    returnType: butil::Status
    signature: "butil::Status MysqlMakeLongDataPacket(butil::IOBuf* outbuf,\n                                      uint32_t
      stmt_id,\n                                      uint16_t param_id,\n                                      const
      butil::IOBuf& ldata)"
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MysqlHandleParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:82,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 87
    functionName: brpc::policy::MysqlAuthenticator::SerializeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - MysqlHandleParams
    - LOG
    - std::stringstream::str
    linkageType: ''
    returnType: bool
    signature: bool MysqlAuthenticator::SerializeToString(std::string* str) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:95,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:96,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:98,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:101,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:102,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:103,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:104,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:105,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:106,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 5
    argNames:
    - ' raw'
    - user
    - password
    - schema
    - collation
    argTypes:
    - butil::StringPiece
    - std::string*
    - std::string*
    - std::string*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 113
    functionName: brpc::policy::MysqlParseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - find
    - std::string*::clear
    - LOG
    - std::string*::assign
    - std::vector::size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlParseAuthenticator(const butil::StringPiece& raw,\n                             std::string*
      user,\n                             std::string* password,\n                             std::string*
      schema,\n                             std::string* collation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:116,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' raw'
    - params
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::MysqlParseParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::string*::assign
    - size
    - rfind
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlParseParams(const butil::StringPiece& raw, std::string* params)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: extended_capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:129,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:132,1
    - Dst: brpc::policy::mysql::NativePasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:141,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:142,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:145,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:146,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:147,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:157,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:158,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:161,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:168,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:169,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:170,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:171,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:172,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:173,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:174,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:177,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:180,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:182,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:184,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: pack_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:186,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:189,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:191,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:193,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:196,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:198,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:201,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:202,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:204,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:205,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 55
    argCount: 6
    argNames:
    - ' auth'
    - ' user'
    - ' password'
    - ' schema'
    - ' collation'
    - auth_cmd
    argTypes:
    - MysqlReply::Auth
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 207
    functionName: brpc::policy::MysqlPackAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - empty
    - auth_plugin
    - butil::IOBuf::size
    - capability
    - butil::ByteSwapToLE16
    - brpc::policy::mysql::NativePasswordScramble
    - std::string::empty
    - butil::IOBuf::to_string
    - std::string
    - extended_capability
    - butil::IOBuf::push_back
    - data
    - size
    - find
    - salt2
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - pack_encode_length
    - end
    - brpc::policy::mysql::CachingSha2PasswordScramble
    - salt
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: "int MysqlPackAuthenticator(const MysqlReply::Auth& auth,\n                           const
      butil::StringPiece& user,\n                           const butil::StringPiece&
      password,\n                           const butil::StringPiece& schema,\n                           const
      butil::StringPiece& collation,\n                           std::string* auth_cmd)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:210,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:211,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:212,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 218
    functionName: brpc::policy::MysqlPackParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - butil::IOBuf::copy_to
    - MysqlMakeCommand
    - empty
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int MysqlPackParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MysqlHandleParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:82,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 87
    functionName: brpc::policy::MysqlAuthenticator::SerializeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - MysqlHandleParams
    - LOG
    - std::stringstream::str
    linkageType: ''
    returnType: bool
    signature: bool MysqlAuthenticator::SerializeToString(std::string* str) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:95,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:96,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:98,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:101,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:102,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:103,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:104,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:105,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:106,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 5
    argNames:
    - ' raw'
    - user
    - password
    - schema
    - collation
    argTypes:
    - butil::StringPiece
    - std::string*
    - std::string*
    - std::string*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 113
    functionName: brpc::policy::MysqlParseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - find
    - std::string*::clear
    - LOG
    - std::string*::assign
    - std::vector::size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlParseAuthenticator(const butil::StringPiece& raw,\n                             std::string*
      user,\n                             std::string* password,\n                             std::string*
      schema,\n                             std::string* collation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:116,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' raw'
    - params
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::MysqlParseParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::string*::assign
    - size
    - rfind
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlParseParams(const butil::StringPiece& raw, std::string* params)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: extended_capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:129,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:132,1
    - Dst: brpc::policy::mysql::NativePasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:141,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:142,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:145,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:146,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:147,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:157,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:158,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:161,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:168,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:169,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:170,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:171,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:172,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:173,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:174,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:177,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:180,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:182,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:184,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: pack_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:186,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:189,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:191,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:193,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:196,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:198,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:201,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:202,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:204,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:205,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 55
    argCount: 6
    argNames:
    - ' auth'
    - ' user'
    - ' password'
    - ' schema'
    - ' collation'
    - auth_cmd
    argTypes:
    - MysqlReply::Auth
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 207
    functionName: brpc::policy::MysqlPackAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - empty
    - auth_plugin
    - butil::IOBuf::size
    - capability
    - butil::ByteSwapToLE16
    - brpc::policy::mysql::NativePasswordScramble
    - std::string::empty
    - butil::IOBuf::to_string
    - std::string
    - extended_capability
    - butil::IOBuf::push_back
    - data
    - size
    - find
    - salt2
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - pack_encode_length
    - end
    - brpc::policy::mysql::CachingSha2PasswordScramble
    - salt
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: "int MysqlPackAuthenticator(const MysqlReply::Auth& auth,\n                           const
      butil::StringPiece& user,\n                           const butil::StringPiece&
      password,\n                           const butil::StringPiece& schema,\n                           const
      butil::StringPiece& collation,\n                           std::string* auth_cmd)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:210,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:211,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:212,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 218
    functionName: brpc::policy::MysqlPackParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - butil::IOBuf::copy_to
    - MysqlMakeCommand
    - empty
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int MysqlPackParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MysqlHandleParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:82,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 87
    functionName: brpc::policy::MysqlAuthenticator::SerializeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - MysqlHandleParams
    - LOG
    - std::stringstream::str
    linkageType: ''
    returnType: bool
    signature: bool MysqlAuthenticator::SerializeToString(std::string* str) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:95,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:96,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:98,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:101,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:102,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:103,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:104,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:105,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:106,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 5
    argNames:
    - ' raw'
    - user
    - password
    - schema
    - collation
    argTypes:
    - butil::StringPiece
    - std::string*
    - std::string*
    - std::string*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 113
    functionName: brpc::policy::MysqlParseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - find
    - std::string*::clear
    - LOG
    - std::string*::assign
    - std::vector::size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlParseAuthenticator(const butil::StringPiece& raw,\n                             std::string*
      user,\n                             std::string* password,\n                             std::string*
      schema,\n                             std::string* collation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:116,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' raw'
    - params
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::MysqlParseParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::string*::assign
    - size
    - rfind
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlParseParams(const butil::StringPiece& raw, std::string* params)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: extended_capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:129,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:132,1
    - Dst: brpc::policy::mysql::NativePasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:141,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:142,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:145,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:146,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:147,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:157,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:158,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:161,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:168,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:169,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:170,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:171,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:172,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:173,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:174,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:177,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:180,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:182,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:184,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: pack_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:186,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:189,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:191,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:193,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:196,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:198,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:201,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:202,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:204,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:205,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 55
    argCount: 6
    argNames:
    - ' auth'
    - ' user'
    - ' password'
    - ' schema'
    - ' collation'
    - auth_cmd
    argTypes:
    - MysqlReply::Auth
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 207
    functionName: brpc::policy::MysqlPackAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - empty
    - auth_plugin
    - butil::IOBuf::size
    - capability
    - butil::ByteSwapToLE16
    - brpc::policy::mysql::NativePasswordScramble
    - std::string::empty
    - butil::IOBuf::to_string
    - std::string
    - extended_capability
    - butil::IOBuf::push_back
    - data
    - size
    - find
    - salt2
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - pack_encode_length
    - end
    - brpc::policy::mysql::CachingSha2PasswordScramble
    - salt
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: "int MysqlPackAuthenticator(const MysqlReply::Auth& auth,\n                           const
      butil::StringPiece& user,\n                           const butil::StringPiece&
      password,\n                           const butil::StringPiece& schema,\n                           const
      butil::StringPiece& collation,\n                           std::string* auth_cmd)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:210,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:211,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:212,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 218
    functionName: brpc::policy::MysqlPackParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - butil::IOBuf::copy_to
    - MysqlMakeCommand
    - empty
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int MysqlPackParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:39,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:44,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:45,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:46,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:51,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:53,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:54,1
    - Dst: butil::StringPiece::find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:55,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:57,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:58,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:66,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 38
    functionDepth: 0
    functionLinenumber: 38
    functionLinenumberEnd: 68
    functionName: brpc::policy::MysqlHandleParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - std::vector::push_back
    - find
    - butil::StringPiece::data
    - butil::StringPiece::size
    - std::vector::size
    - empty
    - data
    - std::stringstream::str
    - size
    - butil::StringPiece::find
    linkageType: ''
    returnType: bool
    signature: bool MysqlHandleParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: MysqlHandleParams
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:82,1
    - Dst: std::stringstream::str
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:85,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 13
    argCount: 1
    argNames:
    - str
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 87
      start: 72
    functionDepth: 1
    functionLinenumber: 72
    functionLinenumberEnd: 87
    functionName: brpc::policy::MysqlAuthenticator::SerializeToString
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 0
    functionsReached:
    - MysqlHandleParams
    - LOG
    - std::stringstream::str
    linkageType: ''
    returnType: bool
    signature: bool MysqlAuthenticator::SerializeToString(std::string* str) const
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::vector::reserve
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:95,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:96,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:97,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:98,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:100,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:101,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:102,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:103,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:104,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:105,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:106,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:109,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:110,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:111,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:112,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 5
    argNames:
    - ' raw'
    - user
    - password
    - schema
    - collation
    argTypes:
    - butil::StringPiece
    - std::string*
    - std::string*
    - std::string*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 113
      start: 89
    functionDepth: 1
    functionLinenumber: 89
    functionLinenumberEnd: 113
    functionName: brpc::policy::MysqlParseAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::vector::reserve
    - std::vector::push_back
    - find
    - std::string*::clear
    - LOG
    - std::string*::assign
    - std::vector::size
    - data
    linkageType: ''
    returnType: void
    signature: "void MysqlParseAuthenticator(const butil::StringPiece& raw,\n                             std::string*
      user,\n                             std::string* password,\n                             std::string*
      schema,\n                             std::string* collation)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: rfind
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:116,1
    - Dst: std::string*::assign
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:117,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' raw'
    - params
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 118
      start: 115
    functionDepth: 0
    functionLinenumber: 115
    functionLinenumberEnd: 118
    functionName: brpc::policy::MysqlParseParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - std::string*::assign
    - size
    - rfind
    - data
    linkageType: ''
    returnType: void
    signature: void MysqlParseParams(const butil::StringPiece& raw, std::string* params)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:127,1
    - Dst: butil::ByteSwapToLE16
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: extended_capability
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:128,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:129,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: salt
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:130,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: salt2
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:131,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:132,1
    - Dst: brpc::policy::mysql::NativePasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:139,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:140,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:141,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:142,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:145,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:146,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:147,1
    - Dst: brpc::policy::mysql::CachingSha2PasswordScramble
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:155,1
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:157,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:158,1
    - Dst: butil::IOBuf::clear
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:161,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:164,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:168,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:169,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:170,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:171,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:172,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:173,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:174,1
    - Dst: find
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:175,1
    - Dst: end
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:176,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:177,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:180,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:182,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:183,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:184,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: pack_encode_length
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:185,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:186,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:188,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:189,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:191,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:192,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:193,1
    - Dst: auth_plugin
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:194,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: data
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:195,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:196,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:198,1
    - Dst: butil::ByteSwapToLE32
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:199,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:201,1
    - Dst: butil::IOBuf::push_back
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:202,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:204,1
    - Dst: butil::IOBuf::to_string
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:205,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 55
    argCount: 6
    argNames:
    - ' auth'
    - ' user'
    - ' password'
    - ' schema'
    - ' collation'
    - auth_cmd
    argTypes:
    - MysqlReply::Auth
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 207
      start: 120
    functionDepth: 2
    functionLinenumber: 120
    functionLinenumberEnd: 207
    functionName: brpc::policy::MysqlPackAuthenticator
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - empty
    - auth_plugin
    - butil::IOBuf::size
    - capability
    - butil::ByteSwapToLE16
    - brpc::policy::mysql::NativePasswordScramble
    - std::string::empty
    - butil::IOBuf::to_string
    - std::string
    - extended_capability
    - butil::IOBuf::push_back
    - data
    - size
    - find
    - salt2
    - butil::ByteSwapToLE32
    - butil::IOBuf::append
    - butil::IOBuf::clear
    - pack_encode_length
    - end
    - brpc::policy::mysql::CachingSha2PasswordScramble
    - salt
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: "int MysqlPackAuthenticator(const MysqlReply::Auth& auth,\n                           const
      butil::StringPiece& user,\n                           const butil::StringPiece&
      password,\n                           const butil::StringPiece& schema,\n                           const
      butil::StringPiece& collation,\n                           std::string* auth_cmd)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: empty
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:210,1
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:211,1
    - Dst: MysqlMakeCommand
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:212,1
    - Dst: butil::IOBuf::copy_to
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:213,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp:216,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ' params'
    - param_cmd
    argTypes:
    - butil::StringPiece
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 209
    functionDepth: 1
    functionLinenumber: 209
    functionLinenumberEnd: 218
    functionName: brpc::policy::MysqlPackParams
    functionSourceFile: /src/brpc/src/brpc/policy/mysql/mysql_authenticator.cpp
    functionUses: 8
    functionsReached:
    - LOG
    - butil::IOBuf::copy_to
    - MysqlMakeCommand
    - empty
    - butil::IOBuf::IOBuf
    linkageType: ''
    returnType: int
    signature: int MysqlPackParams(const butil::StringPiece& params, std::string*
      param_cmd)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.h: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: ~UBRingManager()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached:
    - UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void ~UBRingManager()
  - 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: brpc::ubring::UBRingManager::UBRingManager
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRingManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.h: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: ~UBRingManager()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached:
    - UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void ~UBRingManager()
  - 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: brpc::ubring::UBRingManager::UBRingManager
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRingManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.h: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: ~UBRingManager()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached:
    - UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void ~UBRingManager()
  - 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: brpc::ubring::UBRingManager::UBRingManager
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRingManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.h: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: ~UBRingManager()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached:
    - UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void ~UBRingManager()
  - 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: brpc::ubring::UBRingManager::UBRingManager
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRingManager()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: brpc::ubring::CalcUbrMsgChunkCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubr_msg.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CalcUbrMsgChunkCnt(uint32_t buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: brpc::ubring::CalcUbrMsgChunkCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubr_msg.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CalcUbrMsgChunkCnt(uint32_t buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: brpc::ubring::CalcUbrMsgChunkCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubr_msg.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CalcUbrMsgChunkCnt(uint32_t buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 51
    functionName: brpc::ubring::CalcUbrMsgChunkCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubr_msg.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t CalcUbrMsgChunkCnt(uint32_t buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - rc
    argTypes:
    - UBConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::ubring::UBConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(UBConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:196,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 240
    functionName: brpc::ubring::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    - DISALLOW_COPY_AND_ASSIGN
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT UBShmEndpoint
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: brpc::ubring::PollerRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerRegisterEpollOut(bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 114
    functionName: brpc::ubring::PollerUnRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerUnRegisterEpollOut(bool pollin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: operator()(const CqSidOp& op) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const CqSidOp& op) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - CqSidOp
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 230
    functionName: brpc::ubring::Poller
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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:
    - UBConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::ubring::UBConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(UBConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:196,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 240
    functionName: brpc::ubring::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    - DISALLOW_COPY_AND_ASSIGN
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT UBShmEndpoint
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: brpc::ubring::PollerRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerRegisterEpollOut(bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 114
    functionName: brpc::ubring::PollerUnRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerUnRegisterEpollOut(bool pollin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: operator()(const CqSidOp& op) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const CqSidOp& op) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - CqSidOp
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 230
    functionName: brpc::ubring::Poller
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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:
    - UBConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::ubring::UBConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(UBConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:196,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 240
    functionName: brpc::ubring::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    - DISALLOW_COPY_AND_ASSIGN
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT UBShmEndpoint
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: brpc::ubring::PollerRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerRegisterEpollOut(bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 114
    functionName: brpc::ubring::PollerUnRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerUnRegisterEpollOut(bool pollin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: operator()(const CqSidOp& op) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const CqSidOp& op) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - CqSidOp
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 230
    functionName: brpc::ubring::Poller
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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:
    - UBConnect*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 64
    functionName: brpc::ubring::UBConnect::RunGuard
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void RunGuard(UBConnect* rc)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:65,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    functionName: ~RunGuard()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - Run
    linkageType: ''
    returnType: void
    signature: void ~RunGuard()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    - Dst: DISALLOW_COPY_AND_ASSIGN
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:196,1
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 240
      start: 75
    functionDepth: 1
    functionLinenumber: 75
    functionLinenumberEnd: 240
    functionName: brpc::ubring::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    - DISALLOW_COPY_AND_ASSIGN
    - butil::MPSCQueue::MPSCQueue
    linkageType: ''
    returnType: class BAIDU_CACHELINE_ALIGNMENT
    signature: class BAIDU_CACHELINE_ALIGNMENT UBShmEndpoint
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:101,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:104,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 98
    functionDepth: 0
    functionLinenumber: 98
    functionLinenumberEnd: 105
    functionName: brpc::ubring::PollerRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerRegisterEpollOut(bool pollin)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:110,1
    - Dst: PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:113,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - pollin
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 114
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 114
    functionName: brpc::ubring::PollerUnRegisterEpollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached:
    - PollerRegisterEvent
    linkageType: ''
    returnType: void
    signature: void PollerUnRegisterEpollOut(bool pollin)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' op'
    argTypes:
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 212
      start: 210
    functionDepth: 0
    functionLinenumber: 210
    functionLinenumberEnd: 212
    functionName: operator()(const CqSidOp& op) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: std::size_t
    signature: std::size_t operator()(const CqSidOp& op) const
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' lhs'
    - ' rhs'
    argTypes:
    - CqSidOp
    - CqSidOp
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 218
      start: 216
    functionDepth: 0
    functionLinenumber: 216
    functionLinenumberEnd: 218
    functionName: operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool operator()(const CqSidOp& lhs, const CqSidOp& rhs) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::MPSCQueue::MPSCQueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.h:224,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 230
    functionName: brpc::ubring::Poller
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 236
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 236
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_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: 233
      start: 233
    functionDepth: 0
    functionLinenumber: 233
    functionLinenumberEnd: 233
    functionName: brpc::ubring::PollerGroup
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void PollerGroup()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:72,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:73,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:74,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:76,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:77,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:79,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:80,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:82,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:83,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 86
    functionName: brpc::ubring::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet64
    - butil::HostToNet16
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:89,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:91,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:92,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:95,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:96,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:99,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:100,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:103,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:104,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 107
    functionName: brpc::ubring::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - memcpy
    - butil::NetToHost64
    - static_cast<char*>
    - butil::NetToHost16
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: static_cast<unsigned long>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:117,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 122
    functionName: brpc::ubring::HelloMessage::toString
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned long>
    - std::string
    - static_cast<int>
    - std::array::data
    - static_cast<size_t>
    - std::array::size
    - snprintf
    linkageType: ''
    returnType: std::string
    signature: std::string HelloMessage::toString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:126,1
    - Dst: bthread::butex_create_checked<butil::atomic<int>>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: brpc::ubring::UBShmEndpoint::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::id
    - bthread::butex_create_checked<butil::atomic<int>>
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::UBShmEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:135,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: UBShmEndpoint::~UBShmEndpoint()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::~UBShmEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 139
    functionDepth: 1
    functionLinenumber: 139
    functionLinenumberEnd: 146
    functionName: brpc::ubring::UBShmEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBShmEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:157,1
    - Dst: done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:160,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:167,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:170,1
    - Dst: brpc::ubring::UBConnect::Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:171,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 148
    functionDepth: 4
    functionLinenumber: 148
    functionLinenumberEnd: 175
    functionName: brpc::ubring::UBConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::ubring::UBConnect::Run
    - Socket*::id
    - bthread_start_background
    - IsUBAvailable
    linkageType: ''
    returnType: void
    signature: "void UBConnect::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: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: brpc::ubring::UBConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp: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: brpc::ubring::UBConnect::Run
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 1
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void UBConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:191,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:192,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:196,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:203,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:204,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 209
    functionName: brpc::ubring::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - PLOG
    - berror
    - Socket*::description
    - Socket*::MoreReadEvents
    - LOG
    - Socket*::fd
    - Socket*::SetEOF
    - read
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: auto*::GetUBShmEp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:213,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:214,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:219,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:220,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:228,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:230,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:234,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:236,1
    - Dst: UBShmEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:244,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:245,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:247,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:250,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:253,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 211
    functionDepth: 4
    functionLinenumber: 211
    functionLinenumberEnd: 257
    functionName: brpc::ubring::UBShmEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto*::GetUBShmEp
    - UBShmEndpoint*::_read_butex::fetch_add
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - CHECK
    - bthread_attr_set_name
    - LOG
    - bthread::butex_wake
    - Socket*::CreatedByConnect
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - bthread_start_background
    - IsUBAvailable
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: brpc::ubring::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:270,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:274,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:278,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:279,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 269
    functionDepth: 4
    functionLinenumber: 269
    functionLinenumberEnd: 295
    functionName: brpc::ubring::UBShmEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread::butex_wait
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - read
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:298,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:302,1
    - Dst: write
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 319
    functionName: brpc::ubring::UBShmEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - write
    - WaitEpollOut
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:322,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:324,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 321
    functionDepth: 2
    functionLinenumber: 321
    functionLinenumberEnd: 329
    functionName: brpc::ubring::UBShmEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - _nevent::fetch_add
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::TryReadOnTcp()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:332,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:334,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:336,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:344,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: auto::c_str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:346,1
    - Dst: UBShmEndpoint*::AllocateClientResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:360,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:361,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:362,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:363,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:366,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:374,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:377,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:384,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:390,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:393,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:401,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:402,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:403,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:415,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:416,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:434,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:438,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:446,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:447,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:452,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 85
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 458
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::c_str
    - UBShmEndpoint*::ReadFromFd
    - LOG
    - UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
    - butil::HostToNet32
    - LOG_IF
    - UBShmEndpoint*::AllocateClientResources
    - SocketUniquePtr::fd
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - butil::endpoint2str
    - HelloMessage::toString
    - HelloMessage::Serialize
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - memcmp
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::local_side
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:461,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:465,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:470,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:473,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:479,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:480,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:482,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:483,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:486,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:490,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:500,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:505,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:516,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:517,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:521,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:522,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:526,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:528,1
    - Dst: strrchr
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:530,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:534,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:536,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:537,1
    - Dst: UBShmEndpoint*::AllocateServerResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:540,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:541,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:542,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:559,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:560,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:561,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:564,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:584,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:585,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:586,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:593,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:594,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:595,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:600,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:601,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:603,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 97
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 606
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBShmEndpoint*::ReadFromFd
    - strncpy
    - LOG
    - SocketUniquePtr::_read_buf::append
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - snprintf
    - HelloMessage::toString
    - strrchr
    - UBShmEndpoint*::AllocateServerResources
    - HelloMessage::Serialize
    - UBShmEndpoint*::TryReadOnTcp
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::description
    - memcmp
    - UBShmEndpoint*::_socket::fd
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    - UNLIKELY
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:609,1
    - Dst: IsUbrTrxWriteable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:613,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 618
    functionName: brpc::ubring::UBShmEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - IsUbrTrxWriteable
    linkageType: ''
    returnType: bool
    signature: bool UBShmEndpoint::IsWritable() const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:621,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:626,1
    - Dst: butil::IOBuf*::backing_block_num
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:633,1
    - Dst: butil::IOBuf*::backing_block
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:635,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:637,1
    - Dst: UbrTrxWritev
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:648,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:651,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:660,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 620
    functionDepth: 1
    functionLinenumber: 620
    functionLinenumberEnd: 666
    functionName: brpc::ubring::UBShmEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::data
    - butil::StringPiece::size
    - LOG
    - pop_front
    - butil::IOBuf*::backing_block
    - butil::IOBuf*::backing_block_num
    - const_cast<char*>
    - BAIDU_UNLIKELY
    - UNLIKELY
    - UbrTrxWritev
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBShmEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:669,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:674,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:676,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:681,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:682,1
    - Dst: UbrAllocateLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:685,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:689,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - ubring::SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 691
      start: 668
    functionDepth: 6
    functionLinenumber: 668
    functionLinenumberEnd: 691
    functionName: brpc::ubring::UBShmEndpoint::AllocateClientResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - UbrAllocateLocalShm
    - CHECK
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateClientResources(ubring::SHM* local_trx_shm,
      const char* shm_name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:694,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:699,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:701,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:706,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:707,1
    - Dst: UbrAllocateServerShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:710,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:715,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - ubring::SHM*
    - ubring::SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 693
    functionDepth: 6
    functionLinenumber: 693
    functionLinenumberEnd: 717
    functionName: brpc::ubring::UBShmEndpoint::AllocateServerResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - CHECK
    - UbrAllocateServerShm
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateServerResources(ubring::SHM* remote_trx_shm,
      ubring::SHM* local_trx_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:723,1
    - Dst: UbrTrxClose
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:724,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:727,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:730,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 719
    functionDepth: 3
    functionLinenumber: 719
    functionLinenumberEnd: 733
    functionName: brpc::ubring::UBShmEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 1
    functionsReached:
    - UbrTrxClose
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::DeallocateResources()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:737,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:741,1
    - Dst: UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:745,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:752,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:753,1
    - Dst: SocketUniquePtr::_read_buf::append_from_reader
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:762,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:768,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:775,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:776,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:792,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 40
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 735
    functionDepth: 3
    functionLinenumber: 735
    functionLinenumberEnd: 795
    functionName: brpc::ubring::UBShmEndpoint::PollIn
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - butil::gettimeofday_us
    - PLOG
    - berror
    - SocketUniquePtr::user
    - brpc::SetTrackMeAddress
    - CHECK
    - butil::cpuwide_time_us
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::get
    - SocketUniquePtr::SetEOF
    - SocketUniquePtr::SetFailed
    - UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
    - SocketUniquePtr::_read_buf::append_from_reader
    - static_cast<InputMessenger*>
    - SocketUniquePtr::description
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollIn(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:799,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:803,1
    - Dst: UBShmEndpoint*::IsWritable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:804,1
    - Dst: SocketUniquePtr::WakeAsEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:805,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 808
      start: 797
    functionDepth: 3
    functionLinenumber: 797
    functionLinenumberEnd: 808
    functionName: brpc::ubring::UBShmEndpoint::PollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - brpc::SetTrackMeAddress
    - CHECK
    - UBShmEndpoint*::IsWritable
    - SocketUniquePtr::WakeAsEpollOut
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollOut(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:811,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 810
    functionDepth: 0
    functionLinenumber: 810
    functionLinenumberEnd: 814
    functionName: brpc::ubring::UBShmEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::GlobalInitialize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 816
    functionDepth: 1
    functionLinenumber: 816
    functionLinenumberEnd: 820
    functionName: brpc::ubring::UBShmEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBShmEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::GlobalRelease()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:832,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:847,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:849,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:850,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:852,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:854,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:857,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:858,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:863,1
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: brpc::ubring::UBShmEndpoint::PollIn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:872,1
    - Dst: brpc::ubring::UBShmEndpoint::PollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:876,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:880,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:883,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:888,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:894,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:898,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:904,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 57
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 909
      start: 824
    functionDepth: 4
    functionLinenumber: 824
    functionLinenumberEnd: 909
    functionName: brpc::ubring::UBShmEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmEndpoint*>
    - std::unordered_set::emplace
    - brpc::ubring::UBShmEndpoint::PollOut
    - compare_exchange_strong
    - SocketUniquePtr::user
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - brpc::ubring::UBShmEndpoint::PollIn
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int UBShmEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:915,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 911
    functionDepth: 2
    functionLinenumber: 911
    functionLinenumberEnd: 919
    functionName: brpc::ubring::UBShmEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 1
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:922,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:923,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:927,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - events
    argTypes:
    - CqSidOp::OpType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 921
    functionDepth: 2
    functionLinenumber: 921
    functionLinenumberEnd: 929
    functionName: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollerRegisterEvent(CqSidOp::OpType op, uint32_t
      events)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:72,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:73,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:74,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:76,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:77,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:79,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:80,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:82,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:83,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 86
    functionName: brpc::ubring::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet64
    - butil::HostToNet16
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:89,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:91,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:92,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:95,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:96,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:99,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:100,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:103,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:104,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 107
    functionName: brpc::ubring::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - memcpy
    - butil::NetToHost64
    - static_cast<char*>
    - butil::NetToHost16
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: static_cast<unsigned long>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:117,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 122
    functionName: brpc::ubring::HelloMessage::toString
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned long>
    - std::string
    - static_cast<int>
    - std::array::data
    - static_cast<size_t>
    - std::array::size
    - snprintf
    linkageType: ''
    returnType: std::string
    signature: std::string HelloMessage::toString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:126,1
    - Dst: bthread::butex_create_checked<butil::atomic<int>>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: brpc::ubring::UBShmEndpoint::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::id
    - bthread::butex_create_checked<butil::atomic<int>>
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::UBShmEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:135,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: UBShmEndpoint::~UBShmEndpoint()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::~UBShmEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 139
    functionDepth: 4
    functionLinenumber: 139
    functionLinenumberEnd: 146
    functionName: brpc::ubring::UBShmEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBShmEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:157,1
    - Dst: done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:160,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:167,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:170,1
    - Dst: brpc::ubring::UBConnect::Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:171,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 148
    functionDepth: 4
    functionLinenumber: 148
    functionLinenumberEnd: 175
    functionName: brpc::ubring::UBConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::ubring::UBConnect::Run
    - Socket*::id
    - bthread_start_background
    - IsUBAvailable
    linkageType: ''
    returnType: void
    signature: "void UBConnect::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: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: brpc::ubring::UBConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp: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: brpc::ubring::UBConnect::Run
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 2
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void UBConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:191,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:192,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:196,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:203,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:204,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 209
    functionName: brpc::ubring::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - PLOG
    - berror
    - Socket*::description
    - Socket*::MoreReadEvents
    - LOG
    - Socket*::fd
    - Socket*::SetEOF
    - read
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: auto*::GetUBShmEp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:213,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:214,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:219,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:220,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:228,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:230,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:234,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:236,1
    - Dst: UBShmEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:244,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:245,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:247,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:250,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:253,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 211
    functionDepth: 4
    functionLinenumber: 211
    functionLinenumberEnd: 257
    functionName: brpc::ubring::UBShmEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto*::GetUBShmEp
    - UBShmEndpoint*::_read_butex::fetch_add
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - CHECK
    - bthread_attr_set_name
    - LOG
    - bthread::butex_wake
    - Socket*::CreatedByConnect
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - bthread_start_background
    - IsUBAvailable
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: brpc::ubring::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:270,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:274,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:278,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:279,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 269
    functionDepth: 4
    functionLinenumber: 269
    functionLinenumberEnd: 295
    functionName: brpc::ubring::UBShmEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread::butex_wait
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - read
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:298,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:302,1
    - Dst: write
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 319
    functionName: brpc::ubring::UBShmEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - write
    - WaitEpollOut
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:322,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:324,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 321
    functionDepth: 2
    functionLinenumber: 321
    functionLinenumberEnd: 329
    functionName: brpc::ubring::UBShmEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - _nevent::fetch_add
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::TryReadOnTcp()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:332,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:334,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:336,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:344,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: auto::c_str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:346,1
    - Dst: UBShmEndpoint*::AllocateClientResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:360,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:361,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:362,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:363,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:366,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:374,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:377,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:384,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:390,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:393,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:401,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:402,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:403,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:415,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:416,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:434,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:438,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:446,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:447,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:452,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 85
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 458
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::c_str
    - UBShmEndpoint*::ReadFromFd
    - LOG
    - UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
    - butil::HostToNet32
    - LOG_IF
    - UBShmEndpoint*::AllocateClientResources
    - SocketUniquePtr::fd
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - butil::endpoint2str
    - HelloMessage::toString
    - HelloMessage::Serialize
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - memcmp
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::local_side
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:461,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:465,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:470,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:473,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:479,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:480,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:482,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:483,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:486,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:490,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:500,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:505,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:516,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:517,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:521,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:522,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:526,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:528,1
    - Dst: strrchr
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:530,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:534,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:536,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:537,1
    - Dst: UBShmEndpoint*::AllocateServerResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:540,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:541,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:542,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:559,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:560,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:561,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:564,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:584,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:585,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:586,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:593,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:594,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:595,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:600,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:601,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:603,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 97
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 606
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBShmEndpoint*::ReadFromFd
    - strncpy
    - LOG
    - SocketUniquePtr::_read_buf::append
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - snprintf
    - HelloMessage::toString
    - strrchr
    - UBShmEndpoint*::AllocateServerResources
    - HelloMessage::Serialize
    - UBShmEndpoint*::TryReadOnTcp
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::description
    - memcmp
    - UBShmEndpoint*::_socket::fd
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    - UNLIKELY
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:609,1
    - Dst: IsUbrTrxWriteable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:613,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 618
    functionName: brpc::ubring::UBShmEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - IsUbrTrxWriteable
    linkageType: ''
    returnType: bool
    signature: bool UBShmEndpoint::IsWritable() const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:621,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:626,1
    - Dst: butil::IOBuf*::backing_block_num
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:633,1
    - Dst: butil::IOBuf*::backing_block
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:635,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:637,1
    - Dst: UbrTrxWritev
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:648,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:651,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:660,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 620
    functionDepth: 1
    functionLinenumber: 620
    functionLinenumberEnd: 666
    functionName: brpc::ubring::UBShmEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::data
    - butil::StringPiece::size
    - LOG
    - pop_front
    - butil::IOBuf*::backing_block
    - butil::IOBuf*::backing_block_num
    - const_cast<char*>
    - BAIDU_UNLIKELY
    - UNLIKELY
    - UbrTrxWritev
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBShmEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:669,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:674,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:676,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:681,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:682,1
    - Dst: UbrAllocateLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:685,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:689,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - ubring::SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 691
      start: 668
    functionDepth: 6
    functionLinenumber: 668
    functionLinenumberEnd: 691
    functionName: brpc::ubring::UBShmEndpoint::AllocateClientResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - UbrAllocateLocalShm
    - CHECK
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateClientResources(ubring::SHM* local_trx_shm,
      const char* shm_name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:694,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:699,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:701,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:706,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:707,1
    - Dst: UbrAllocateServerShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:710,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:715,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - ubring::SHM*
    - ubring::SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 693
    functionDepth: 6
    functionLinenumber: 693
    functionLinenumberEnd: 717
    functionName: brpc::ubring::UBShmEndpoint::AllocateServerResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - CHECK
    - UbrAllocateServerShm
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateServerResources(ubring::SHM* remote_trx_shm,
      ubring::SHM* local_trx_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:723,1
    - Dst: UbrTrxClose
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:724,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:727,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:730,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 719
    functionDepth: 3
    functionLinenumber: 719
    functionLinenumberEnd: 733
    functionName: brpc::ubring::UBShmEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 2
    functionsReached:
    - UbrTrxClose
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::DeallocateResources()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:737,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:741,1
    - Dst: UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:745,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:752,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:753,1
    - Dst: SocketUniquePtr::_read_buf::append_from_reader
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:762,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:768,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:775,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:776,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:792,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 40
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 735
    functionDepth: 3
    functionLinenumber: 735
    functionLinenumberEnd: 795
    functionName: brpc::ubring::UBShmEndpoint::PollIn
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - butil::gettimeofday_us
    - PLOG
    - berror
    - SocketUniquePtr::user
    - brpc::SetTrackMeAddress
    - CHECK
    - butil::cpuwide_time_us
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::get
    - SocketUniquePtr::SetEOF
    - SocketUniquePtr::SetFailed
    - UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
    - SocketUniquePtr::_read_buf::append_from_reader
    - static_cast<InputMessenger*>
    - SocketUniquePtr::description
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollIn(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:799,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:803,1
    - Dst: UBShmEndpoint*::IsWritable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:804,1
    - Dst: SocketUniquePtr::WakeAsEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:805,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 808
      start: 797
    functionDepth: 3
    functionLinenumber: 797
    functionLinenumberEnd: 808
    functionName: brpc::ubring::UBShmEndpoint::PollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 1
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - brpc::SetTrackMeAddress
    - CHECK
    - UBShmEndpoint*::IsWritable
    - SocketUniquePtr::WakeAsEpollOut
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollOut(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:811,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 810
    functionDepth: 0
    functionLinenumber: 810
    functionLinenumberEnd: 814
    functionName: brpc::ubring::UBShmEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::GlobalInitialize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 816
    functionDepth: 3
    functionLinenumber: 816
    functionLinenumberEnd: 820
    functionName: brpc::ubring::UBShmEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBShmEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::GlobalRelease()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:832,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:847,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:849,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:850,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:852,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:854,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:857,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:858,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:863,1
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: brpc::ubring::UBShmEndpoint::PollIn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:872,1
    - Dst: brpc::ubring::UBShmEndpoint::PollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:876,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:880,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:883,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:888,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:894,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:898,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:904,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 57
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 909
      start: 824
    functionDepth: 4
    functionLinenumber: 824
    functionLinenumberEnd: 909
    functionName: brpc::ubring::UBShmEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmEndpoint*>
    - std::unordered_set::emplace
    - brpc::ubring::UBShmEndpoint::PollOut
    - compare_exchange_strong
    - SocketUniquePtr::user
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - brpc::ubring::UBShmEndpoint::PollIn
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int UBShmEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:915,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 911
    functionDepth: 2
    functionLinenumber: 911
    functionLinenumberEnd: 919
    functionName: brpc::ubring::UBShmEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 2
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:922,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:923,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:927,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - events
    argTypes:
    - CqSidOp::OpType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 921
    functionDepth: 2
    functionLinenumber: 921
    functionLinenumberEnd: 929
    functionName: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 6
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollerRegisterEvent(CqSidOp::OpType op, uint32_t
      events)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:72,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:73,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:74,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:76,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:77,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:79,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:80,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:82,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:83,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 86
    functionName: brpc::ubring::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet64
    - butil::HostToNet16
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:89,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:91,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:92,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:95,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:96,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:99,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:100,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:103,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:104,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 107
    functionName: brpc::ubring::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - memcpy
    - butil::NetToHost64
    - static_cast<char*>
    - butil::NetToHost16
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: static_cast<unsigned long>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:117,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 122
    functionName: brpc::ubring::HelloMessage::toString
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned long>
    - std::string
    - static_cast<int>
    - std::array::data
    - static_cast<size_t>
    - std::array::size
    - snprintf
    linkageType: ''
    returnType: std::string
    signature: std::string HelloMessage::toString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:126,1
    - Dst: bthread::butex_create_checked<butil::atomic<int>>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: brpc::ubring::UBShmEndpoint::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::id
    - bthread::butex_create_checked<butil::atomic<int>>
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::UBShmEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:135,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: UBShmEndpoint::~UBShmEndpoint()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::~UBShmEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 139
    functionDepth: 4
    functionLinenumber: 139
    functionLinenumberEnd: 146
    functionName: brpc::ubring::UBShmEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBShmEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:157,1
    - Dst: done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:160,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:167,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:170,1
    - Dst: brpc::ubring::UBConnect::Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:171,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 148
    functionDepth: 4
    functionLinenumber: 148
    functionLinenumberEnd: 175
    functionName: brpc::ubring::UBConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::ubring::UBConnect::Run
    - Socket*::id
    - bthread_start_background
    - IsUBAvailable
    linkageType: ''
    returnType: void
    signature: "void UBConnect::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: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: brpc::ubring::UBConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp: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: brpc::ubring::UBConnect::Run
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void UBConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:191,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:192,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:196,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:203,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:204,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 209
    functionName: brpc::ubring::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - PLOG
    - berror
    - Socket*::description
    - Socket*::MoreReadEvents
    - LOG
    - Socket*::fd
    - Socket*::SetEOF
    - read
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: auto*::GetUBShmEp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:213,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:214,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:219,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:220,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:228,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:230,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:234,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:236,1
    - Dst: UBShmEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:244,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:245,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:247,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:250,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:253,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 211
    functionDepth: 4
    functionLinenumber: 211
    functionLinenumberEnd: 257
    functionName: brpc::ubring::UBShmEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto*::GetUBShmEp
    - UBShmEndpoint*::_read_butex::fetch_add
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - CHECK
    - bthread_attr_set_name
    - LOG
    - bthread::butex_wake
    - Socket*::CreatedByConnect
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - bthread_start_background
    - IsUBAvailable
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: brpc::ubring::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:270,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:274,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:278,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:279,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 269
    functionDepth: 4
    functionLinenumber: 269
    functionLinenumberEnd: 295
    functionName: brpc::ubring::UBShmEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread::butex_wait
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - read
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:298,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:302,1
    - Dst: write
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 319
    functionName: brpc::ubring::UBShmEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - write
    - WaitEpollOut
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:322,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:324,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 321
    functionDepth: 2
    functionLinenumber: 321
    functionLinenumberEnd: 329
    functionName: brpc::ubring::UBShmEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - _nevent::fetch_add
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::TryReadOnTcp()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:332,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:334,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:336,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:344,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: auto::c_str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:346,1
    - Dst: UBShmEndpoint*::AllocateClientResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:360,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:361,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:362,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:363,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:366,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:374,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:377,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:384,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:390,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:393,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:401,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:402,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:403,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:415,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:416,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:434,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:438,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:446,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:447,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:452,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 85
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 458
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::c_str
    - UBShmEndpoint*::ReadFromFd
    - LOG
    - UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
    - butil::HostToNet32
    - LOG_IF
    - UBShmEndpoint*::AllocateClientResources
    - SocketUniquePtr::fd
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - butil::endpoint2str
    - HelloMessage::toString
    - HelloMessage::Serialize
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - memcmp
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::local_side
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:461,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:465,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:470,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:473,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:479,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:480,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:482,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:483,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:486,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:490,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:500,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:505,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:516,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:517,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:521,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:522,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:526,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:528,1
    - Dst: strrchr
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:530,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:534,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:536,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:537,1
    - Dst: UBShmEndpoint*::AllocateServerResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:540,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:541,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:542,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:559,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:560,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:561,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:564,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:584,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:585,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:586,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:593,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:594,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:595,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:600,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:601,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:603,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 97
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 606
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBShmEndpoint*::ReadFromFd
    - strncpy
    - LOG
    - SocketUniquePtr::_read_buf::append
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - snprintf
    - HelloMessage::toString
    - strrchr
    - UBShmEndpoint*::AllocateServerResources
    - HelloMessage::Serialize
    - UBShmEndpoint*::TryReadOnTcp
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::description
    - memcmp
    - UBShmEndpoint*::_socket::fd
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    - UNLIKELY
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:609,1
    - Dst: IsUbrTrxWriteable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:613,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 618
    functionName: brpc::ubring::UBShmEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - IsUbrTrxWriteable
    linkageType: ''
    returnType: bool
    signature: bool UBShmEndpoint::IsWritable() const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:621,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:626,1
    - Dst: butil::IOBuf*::backing_block_num
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:633,1
    - Dst: butil::IOBuf*::backing_block
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:635,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:637,1
    - Dst: UbrTrxWritev
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:648,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:651,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:660,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 620
    functionDepth: 1
    functionLinenumber: 620
    functionLinenumberEnd: 666
    functionName: brpc::ubring::UBShmEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::data
    - butil::StringPiece::size
    - LOG
    - pop_front
    - butil::IOBuf*::backing_block
    - butil::IOBuf*::backing_block_num
    - const_cast<char*>
    - BAIDU_UNLIKELY
    - UNLIKELY
    - UbrTrxWritev
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBShmEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:669,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:674,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:676,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:681,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:682,1
    - Dst: UbrAllocateLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:685,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:689,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - ubring::SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 691
      start: 668
    functionDepth: 6
    functionLinenumber: 668
    functionLinenumberEnd: 691
    functionName: brpc::ubring::UBShmEndpoint::AllocateClientResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - UbrAllocateLocalShm
    - CHECK
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateClientResources(ubring::SHM* local_trx_shm,
      const char* shm_name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:694,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:699,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:701,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:706,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:707,1
    - Dst: UbrAllocateServerShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:710,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:715,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - ubring::SHM*
    - ubring::SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 693
    functionDepth: 6
    functionLinenumber: 693
    functionLinenumberEnd: 717
    functionName: brpc::ubring::UBShmEndpoint::AllocateServerResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - CHECK
    - UbrAllocateServerShm
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateServerResources(ubring::SHM* remote_trx_shm,
      ubring::SHM* local_trx_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:723,1
    - Dst: UbrTrxClose
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:724,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:727,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:730,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 719
    functionDepth: 3
    functionLinenumber: 719
    functionLinenumberEnd: 733
    functionName: brpc::ubring::UBShmEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - UbrTrxClose
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::DeallocateResources()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:737,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:741,1
    - Dst: UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:745,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:752,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:753,1
    - Dst: SocketUniquePtr::_read_buf::append_from_reader
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:762,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:768,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:775,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:776,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:792,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 40
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 735
    functionDepth: 3
    functionLinenumber: 735
    functionLinenumberEnd: 795
    functionName: brpc::ubring::UBShmEndpoint::PollIn
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - butil::gettimeofday_us
    - PLOG
    - berror
    - SocketUniquePtr::user
    - brpc::SetTrackMeAddress
    - CHECK
    - butil::cpuwide_time_us
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::get
    - SocketUniquePtr::SetEOF
    - SocketUniquePtr::SetFailed
    - UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
    - SocketUniquePtr::_read_buf::append_from_reader
    - static_cast<InputMessenger*>
    - SocketUniquePtr::description
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollIn(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:799,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:803,1
    - Dst: UBShmEndpoint*::IsWritable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:804,1
    - Dst: SocketUniquePtr::WakeAsEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:805,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 808
      start: 797
    functionDepth: 3
    functionLinenumber: 797
    functionLinenumberEnd: 808
    functionName: brpc::ubring::UBShmEndpoint::PollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 2
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - brpc::SetTrackMeAddress
    - CHECK
    - UBShmEndpoint*::IsWritable
    - SocketUniquePtr::WakeAsEpollOut
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollOut(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:811,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 810
    functionDepth: 0
    functionLinenumber: 810
    functionLinenumberEnd: 814
    functionName: brpc::ubring::UBShmEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::GlobalInitialize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 816
    functionDepth: 3
    functionLinenumber: 816
    functionLinenumberEnd: 820
    functionName: brpc::ubring::UBShmEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBShmEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::GlobalRelease()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:832,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:847,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:849,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:850,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:852,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:854,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:857,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:858,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:863,1
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: brpc::ubring::UBShmEndpoint::PollIn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:872,1
    - Dst: brpc::ubring::UBShmEndpoint::PollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:876,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:880,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:883,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:888,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:894,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:898,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:904,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 57
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 909
      start: 824
    functionDepth: 4
    functionLinenumber: 824
    functionLinenumberEnd: 909
    functionName: brpc::ubring::UBShmEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmEndpoint*>
    - std::unordered_set::emplace
    - brpc::ubring::UBShmEndpoint::PollOut
    - compare_exchange_strong
    - SocketUniquePtr::user
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - brpc::ubring::UBShmEndpoint::PollIn
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int UBShmEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:915,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 911
    functionDepth: 2
    functionLinenumber: 911
    functionLinenumberEnd: 919
    functionName: brpc::ubring::UBShmEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:922,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:923,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:927,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - events
    argTypes:
    - CqSidOp::OpType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 921
    functionDepth: 2
    functionLinenumber: 921
    functionLinenumberEnd: 929
    functionName: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 9
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollerRegisterEvent(CqSidOp::OpType op, uint32_t
      events)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:72,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:73,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:74,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:76,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:77,1
    - Dst: butil::HostToNet16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:79,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:80,1
    - Dst: butil::HostToNet64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:82,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:83,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:85,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 71
    functionDepth: 1
    functionLinenumber: 71
    functionLinenumberEnd: 86
    functionName: brpc::ubring::HelloMessage::Serialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - memcpy
    - butil::HostToNet64
    - butil::HostToNet16
    - static_cast<char*>
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Serialize(void* data) const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:89,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:91,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:92,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:95,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:96,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:99,1
    - Dst: butil::NetToHost16
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:100,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:103,1
    - Dst: butil::NetToHost64
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:104,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:106,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 14
    argCount: 1
    argNames:
    - data
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 107
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 107
    functionName: brpc::ubring::HelloMessage::Deserialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - memcpy
    - butil::NetToHost64
    - static_cast<char*>
    - butil::NetToHost16
    linkageType: ''
    returnType: void
    signature: void HelloMessage::Deserialize(void* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: std::array::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:112,1
    - Dst: static_cast<unsigned long>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:117,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:118,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: std::array::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:121,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 109
    functionDepth: 0
    functionLinenumber: 109
    functionLinenumberEnd: 122
    functionName: brpc::ubring::HelloMessage::toString
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<unsigned long>
    - std::string
    - static_cast<int>
    - std::array::data
    - static_cast<size_t>
    - std::array::size
    - snprintf
    linkageType: ''
    returnType: std::string
    signature: std::string HelloMessage::toString() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:126,1
    - Dst: bthread::butex_create_checked<butil::atomic<int>>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:131,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 132
      start: 124
    functionDepth: 0
    functionLinenumber: 124
    functionLinenumberEnd: 132
    functionName: brpc::ubring::UBShmEndpoint::UBShmEndpoint
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::id
    - bthread::butex_create_checked<butil::atomic<int>>
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::UBShmEndpoint(Socket* s)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: Reset
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:135,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:136,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 134
    functionDepth: 2
    functionLinenumber: 134
    functionLinenumberEnd: 137
    functionName: UBShmEndpoint::~UBShmEndpoint()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::~UBShmEndpoint()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:140,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 146
      start: 139
    functionDepth: 4
    functionLinenumber: 139
    functionLinenumberEnd: 146
    functionName: brpc::ubring::UBShmEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBShmEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:151,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:152,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:154,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:157,1
    - Dst: done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:160,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:167,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:168,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:170,1
    - Dst: brpc::ubring::UBConnect::Run
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:171,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:173,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 175
      start: 148
    functionDepth: 4
    functionLinenumber: 148
    functionLinenumberEnd: 175
    functionName: brpc::ubring::UBConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::ubring::UBConnect::Run
    - Socket*::id
    - bthread_start_background
    - IsUBAvailable
    linkageType: ''
    returnType: void
    signature: "void UBConnect::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: 177
      start: 177
    functionDepth: 0
    functionLinenumber: 177
    functionLinenumberEnd: 177
    functionName: brpc::ubring::UBConnect::StopConnect
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBConnect::StopConnect(Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: _done
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp: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: brpc::ubring::UBConnect::Run
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void UBConnect::Run()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:187,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:191,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:192,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:193,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:196,1
    - Dst: Socket*::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:200,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:203,1
    - Dst: Socket*::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:204,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:205,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 21
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 209
      start: 183
    functionDepth: 1
    functionLinenumber: 183
    functionLinenumberEnd: 209
    functionName: brpc::ubring::TryReadOnTcpDuringRdmaEst
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Socket*::SetFailed
    - PLOG
    - berror
    - Socket*::description
    - Socket*::MoreReadEvents
    - LOG
    - Socket*::fd
    - Socket*::SetEOF
    - read
    linkageType: ''
    returnType: void
    signature: void TryReadOnTcpDuringRdmaEst(Socket* s)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:212,1
    - Dst: auto*::GetUBShmEp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:213,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:214,1
    - Dst: Socket*::CreatedByConnect
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:219,1
    - Dst: IsUBAvailable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:220,1
    - Dst: Socket*::ReAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:228,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:230,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:234,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:236,1
    - Dst: UBShmEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:244,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:245,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:247,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:250,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:253,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 38
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 257
      start: 211
    functionDepth: 4
    functionLinenumber: 211
    functionLinenumberEnd: 257
    functionName: brpc::ubring::UBShmEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto*::GetUBShmEp
    - UBShmEndpoint*::_read_butex::fetch_add
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::release
    - CHECK
    - bthread_attr_set_name
    - LOG
    - bthread::butex_wake
    - Socket*::CreatedByConnect
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - bthread_start_background
    - IsUBAvailable
    - Socket*::ReAddress
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ' msg'
    argTypes:
    - HelloMessage
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 258
    functionDepth: 0
    functionLinenumber: 258
    functionLinenumberEnd: 265
    functionName: brpc::ubring::HelloNegotiationValid
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool HelloNegotiationValid(HelloMessage& msg)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:270,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:274,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:275,1
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:278,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:279,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 23
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 295
      start: 269
    functionDepth: 4
    functionLinenumber: 269
    functionLinenumberEnd: 295
    functionName: brpc::ubring::UBShmEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    - bthread::butex_wait
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - read
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:298,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:302,1
    - Dst: write
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:303,1
    - Dst: WaitEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    - Dst: fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:306,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 19
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 319
      start: 297
    functionDepth: 1
    functionLinenumber: 297
    functionLinenumberEnd: 319
    functionName: brpc::ubring::UBShmEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    - butil::milliseconds_from_now
    - fd
    - write
    - WaitEpollOut
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: _nevent::fetch_add
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:322,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:324,1
    - Dst: TryReadOnTcpDuringRdmaEst
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:326,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 329
      start: 321
    functionDepth: 2
    functionLinenumber: 321
    functionLinenumberEnd: 329
    functionName: brpc::ubring::UBShmEndpoint::TryReadOnTcp
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::InputMessenger::OnNewMessages
    - TryReadOnTcpDuringRdmaEst
    - _nevent::fetch_add
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::TryReadOnTcp()
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:332,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:334,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:336,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:342,1
    - Dst: SocketUniquePtr::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:344,1
    - Dst: butil::endpoint2str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: SocketUniquePtr::local_side
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:345,1
    - Dst: auto::c_str
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:346,1
    - Dst: UBShmEndpoint*::AllocateClientResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:348,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:360,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:361,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:362,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:363,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:365,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:366,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:367,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:371,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:374,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:376,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:377,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:378,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:383,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:384,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:385,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:390,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:392,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:393,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:394,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:401,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:402,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:403,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:404,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:414,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:415,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:416,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:421,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:434,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:435,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:438,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:439,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:446,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:447,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:448,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:452,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 85
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 458
      start: 331
    functionDepth: 1
    functionLinenumber: 331
    functionLinenumberEnd: 458
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::c_str
    - UBShmEndpoint*::ReadFromFd
    - LOG
    - UBShmEndpoint*::_ub_ring::UbrMapRemoteShm
    - butil::HostToNet32
    - LOG_IF
    - UBShmEndpoint*::AllocateClientResources
    - SocketUniquePtr::fd
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - butil::endpoint2str
    - HelloMessage::toString
    - HelloMessage::Serialize
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - memcmp
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - SocketUniquePtr::local_side
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:461,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:465,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:470,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:473,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:474,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:478,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:479,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:480,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:482,1
    - Dst: SocketUniquePtr::_read_buf::append
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:483,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:486,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:490,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:492,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:493,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:494,1
    - Dst: HelloMessage::Deserialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:500,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: HelloMessage::toString
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:501,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:505,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:506,1
    - Dst: HelloNegotiationValid
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:516,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:517,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:521,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:522,1
    - Dst: UBShmEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:526,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:528,1
    - Dst: strrchr
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:530,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:534,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:536,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:537,1
    - Dst: UBShmEndpoint*::AllocateServerResources
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:540,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:541,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:542,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:557,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:559,1
    - Dst: HelloMessage::Serialize
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:560,1
    - Dst: UBShmEndpoint*::WriteToFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:561,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:563,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:564,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:565,1
    - Dst: UBShmEndpoint*::ReadFromFd
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:575,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:584,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:585,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:586,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:587,1
    - Dst: UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:593,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:594,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:595,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:600,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:601,1
    - Dst: UBShmEndpoint*::TryReadOnTcp
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:603,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 97
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 606
      start: 460
    functionDepth: 1
    functionLinenumber: 460
    functionLinenumberEnd: 606
    functionName: brpc::ubring::UBShmEndpoint::ProcessHandshakeAtServer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBShmEndpoint*::ReadFromFd
    - strncpy
    - LOG
    - SocketUniquePtr::_read_buf::append
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - memcpy
    - HelloNegotiationValid
    - SocketUniquePtr::SetFailed
    - snprintf
    - HelloMessage::toString
    - strrchr
    - UBShmEndpoint*::AllocateServerResources
    - HelloMessage::Serialize
    - UBShmEndpoint*::TryReadOnTcp
    - UBShmEndpoint*::WriteToFd
    - SocketUniquePtr::description
    - memcmp
    - UBShmEndpoint*::_socket::fd
    - static_cast<UBShmEndpoint*>
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - berror
    - HelloMessage::Deserialize
    - UBShmEndpoint*::_ub_ring::UbrUnlinkLocalShm
    - UNLIKELY
    linkageType: ''
    returnType: void
    signature: void * UBShmEndpoint::ProcessHandshakeAtServer(void* arg)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:609,1
    - Dst: IsUbrTrxWriteable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:613,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 608
    functionDepth: 1
    functionLinenumber: 608
    functionLinenumberEnd: 618
    functionName: brpc::ubring::UBShmEndpoint::IsWritable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_UNLIKELY
    - IsUbrTrxWriteable
    linkageType: ''
    returnType: bool
    signature: bool UBShmEndpoint::IsWritable() const
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:621,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:626,1
    - Dst: butil::IOBuf*::backing_block_num
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:633,1
    - Dst: butil::IOBuf*::backing_block
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:635,1
    - Dst: const_cast<char*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:636,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:637,1
    - Dst: UbrTrxWritev
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:648,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:651,1
    - Dst: pop_front
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:660,1
    CyclomaticComplexity: 12
    EdgeCount: 12
    ICount: 38
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 666
      start: 620
    functionDepth: 1
    functionLinenumber: 620
    functionLinenumberEnd: 666
    functionName: brpc::ubring::UBShmEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::StringPiece::data
    - butil::StringPiece::size
    - LOG
    - pop_front
    - butil::IOBuf*::backing_block
    - butil::IOBuf*::backing_block_num
    - const_cast<char*>
    - BAIDU_UNLIKELY
    - UNLIKELY
    - UbrTrxWritev
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBShmEndpoint::CutFromIOBufList(butil::IOBuf** from, size_t
      ndata)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:669,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:674,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:676,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:681,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:682,1
    - Dst: UbrAllocateLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:685,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:689,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - ubring::SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 691
      start: 668
    functionDepth: 6
    functionLinenumber: 668
    functionLinenumberEnd: 691
    functionName: brpc::ubring::UBShmEndpoint::AllocateClientResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - UbrAllocateLocalShm
    - CHECK
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateClientResources(ubring::SHM* local_trx_shm,
      const char* shm_name)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:694,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:699,1
    - Dst: UBRing::UBRing
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:701,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:706,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:707,1
    - Dst: UbrAllocateServerShm
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:710,1
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:715,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 17
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - ubring::SHM*
    - ubring::SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 717
      start: 693
    functionDepth: 6
    functionLinenumber: 693
    functionLinenumberEnd: 717
    functionName: brpc::ubring::UBShmEndpoint::AllocateServerResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - UBRing::UBRing
    - PLOG
    - Socket::Create
    - CHECK
    - UbrAllocateServerShm
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::AllocateServerResources(ubring::SHM* remote_trx_shm,
      ubring::SHM* local_trx_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:723,1
    - Dst: UbrTrxClose
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:724,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:727,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:730,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 733
      start: 719
    functionDepth: 3
    functionLinenumber: 719
    functionLinenumberEnd: 733
    functionName: brpc::ubring::UBShmEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - UbrTrxClose
    - brpc::SetTrackMeAddress
    - brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    - SocketUniquePtr::SetFailed
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::DeallocateResources()
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:737,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:740,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:741,1
    - Dst: UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:745,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:752,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:753,1
    - Dst: SocketUniquePtr::_read_buf::append_from_reader
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:762,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:768,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:775,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:776,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: berror
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:777,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:784,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:785,1
    - Dst: SocketUniquePtr::SetEOF
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:792,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 40
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 795
      start: 735
    functionDepth: 3
    functionLinenumber: 735
    functionLinenumberEnd: 795
    functionName: brpc::ubring::UBShmEndpoint::PollIn
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - butil::gettimeofday_us
    - PLOG
    - berror
    - SocketUniquePtr::user
    - brpc::SetTrackMeAddress
    - CHECK
    - butil::cpuwide_time_us
    - InputMessenger*::ProcessNewMessage
    - SocketUniquePtr::get
    - SocketUniquePtr::SetEOF
    - SocketUniquePtr::SetFailed
    - UBShmEndpoint*::_ub_ring::IsUbrTrxReadable
    - SocketUniquePtr::_read_buf::append_from_reader
    - static_cast<InputMessenger*>
    - SocketUniquePtr::description
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollIn(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:799,1
    - Dst: static_cast<UBShmTransport*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:802,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:803,1
    - Dst: UBShmEndpoint*::IsWritable
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:804,1
    - Dst: SocketUniquePtr::WakeAsEpollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:805,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - ep
    - ep_event
    argTypes:
    - UBShmEndpoint*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 808
      start: 797
    functionDepth: 3
    functionLinenumber: 797
    functionLinenumberEnd: 808
    functionName: brpc::ubring::UBShmEndpoint::PollOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 3
    functionsReached:
    - SocketUniquePtr::_transport::get
    - static_cast<UBShmTransport*>
    - brpc::SetTrackMeAddress
    - CHECK
    - UBShmEndpoint*::IsWritable
    - SocketUniquePtr::WakeAsEpollOut
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollOut(UBShmEndpoint* ep, uint32_t ep_event)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:811,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 814
      start: 810
    functionDepth: 0
    functionLinenumber: 810
    functionLinenumberEnd: 814
    functionName: brpc::ubring::UBShmEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - std::vector<PollerGroup>
    - butil::Mutex::Mutex
    linkageType: ''
    returnType: int
    signature: int UBShmEndpoint::GlobalInitialize()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:818,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 820
      start: 816
    functionDepth: 3
    functionLinenumber: 816
    functionLinenumberEnd: 820
    functionName: brpc::ubring::UBShmEndpoint::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBShmEndpoint::PollingModeRelease
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::GlobalRelease()
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: compare_exchange_strong
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:832,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:847,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:849,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:850,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:852,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:854,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:857,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:858,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:863,1
    - Dst: static_cast<UBShmEndpoint*>
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:866,1
    - Dst: brpc::ubring::UBShmEndpoint::PollIn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:872,1
    - Dst: brpc::ubring::UBShmEndpoint::PollOut
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:876,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:880,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:883,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:888,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:894,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:898,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:902,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:904,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 57
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 909
      start: 824
    functionDepth: 4
    functionLinenumber: 824
    functionLinenumberEnd: 909
    functionName: brpc::ubring::UBShmEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 0
    functionsReached:
    - static_cast<UBShmEndpoint*>
    - std::unordered_set::emplace
    - brpc::ubring::UBShmEndpoint::PollOut
    - compare_exchange_strong
    - SocketUniquePtr::user
    - auto::release_fn
    - brpc::SetTrackMeAddress
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - brpc::ubring::UBShmEndpoint::PollIn
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int UBShmEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:915,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:917,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 919
      start: 911
    functionDepth: 2
    functionLinenumber: 911
    functionLinenumberEnd: 919
    functionName: brpc::ubring::UBShmEndpoint::PollingModeRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 4
    functionsReached:
    - store
    - bthread_join
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollingModeRelease(bthread_tag_t tag)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:922,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:923,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp:927,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 2
    argNames:
    - op
    - events
    argTypes:
    - CqSidOp::OpType
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 929
      start: 921
    functionDepth: 2
    functionLinenumber: 921
    functionLinenumberEnd: 929
    functionName: brpc::ubring::UBShmEndpoint::PollerRegisterEvent
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_endpoint.cpp
    functionUses: 12
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void UBShmEndpoint::PollerRegisterEvent(CqSidOp::OpType op, uint32_t
      events)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: brpc::ubring::UBRing::UBRing
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::UBRing()
  - 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: UBRing::~UBRing()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::~UBRing()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:46,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:48,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:51,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 1
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::ubring::UBRing::UbrTrxMapShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapShm(SHM *local_shm, SHM *remote_shm)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:60,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:63,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:73,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:84,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:86,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:90,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:91,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:96,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:99,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:103,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:112,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:118,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 59
    functionDepth: 2
    functionLinenumber: 59
    functionLinenumberEnd: 122
    functionName: brpc::ubring::UBRing::UbrTrxClose
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - HasTimedOut
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - ShmFree
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxClose()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:126,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:137,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 142
    functionName: brpc::ubring::UBRing::UbrAddCloseTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddCloseTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: brpc::ubring::UBRing::UbrAddCloseTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:146,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: brpc::ubring::UBRing::UbrAddHBTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:152,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 156
    functionName: brpc::ubring::UBRing::UbrAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - DeleteTimerSafe
    - brpc::ubring::UBRing::UbrAddCloseTimer
    - brpc::ubring::UBRing::UbrAddHBTimer
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:172,1
    - Dst: ATOMIC_SUB
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:175,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:177,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:185,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:189,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:191,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 158
    functionDepth: 1
    functionLinenumber: 158
    functionLinenumberEnd: 196
    functionName: brpc::ubring::UBRing::UbrTrxCloseCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - LOG
    - GetCurNanoSeconds
    - ATOMIC_LOAD
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    - ATOMIC_SUB
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxCloseCallback(void* args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:200,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:208,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 215
    functionName: brpc::ubring::UBRing::UbrAddHBTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddHBTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:218,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:221,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:222,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:223,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:229,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:232,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:235,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:238,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:242,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:246,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:249,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - trx
    - fd
    - type
    argTypes:
    - UbrTrx*
    - int
    - PASSIVE_DISC_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 217
    functionDepth: 2
    functionLinenumber: 217
    functionLinenumberEnd: 251
    functionName: brpc::ubring::UBRing::UbrPassiveClearTrx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - DeleteTimer
    - ShmLocalFree
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrPassiveClearTrx(UbrTrx *trx, int fd, PASSIVE_DISC_TYPE
      type)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:262,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:284,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:286,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 253
    functionDepth: 3
    functionLinenumber: 253
    functionLinenumberEnd: 288
    functionName: brpc::ubring::UBRing::UbrTrxHBCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - LOG_EVERY_SECOND
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxHBCallback(void* args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:292,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:305,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:307,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UBRing::UbrAddAsynClearTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddAsynClearTimer(UbrTrx *trx)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:318,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:323,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 1
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::ubring::UBRing::UbrAsynClearCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - LOG
    linkageType: ''
    returnType: void
    signature: void *UBRing::UbrAsynClearCallback(void *args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:346,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:365,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:366,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 372
    functionName: brpc::ubring::UBRing::UbrTrxSend
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - LOG
    - CalcUbrMsgChunkCnt
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxSend(const void *buf, uint32_t buf_len)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::UbrTrxRecvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    - Dst: static_cast<uint8_t *>
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 374
    functionDepth: 1
    functionLinenumber: 374
    functionLinenumberEnd: 387
    functionName: brpc::ubring::UBRing::UbrTrxRecv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - UNLIKELY
    - static_cast<uint8_t *>
    - brpc::ubring::UBRing::UbrTrxRecvBlockMode
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecv(void *buf, uint32_t buf_len)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:425,1
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:429,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:431,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 2
    argNames:
    - dest
    - buf_len
    argTypes:
    - uint8_t*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 439
    functionName: brpc::ubring::UBRing::UbrTrxRecvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - LIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecvBlockMode(uint8_t *dest, uint32_t buf_len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::WritevHasEnoughSpace
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:451,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:478,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:489,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 441
    functionDepth: 1
    functionLinenumber: 441
    functionLinenumberEnd: 495
    functionName: brpc::ubring::UBRing::UbrTrxWritev
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - brpc::ubring::UBRing::WritevHasEnoughSpace
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxWritev(const struct iovec *iov, int iovcnt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::UbrTrxReadvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:510,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:511,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:512,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 497
    functionDepth: 1
    functionLinenumber: 497
    functionLinenumberEnd: 517
    functionName: brpc::ubring::UBRing::UbrTrxReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::UbrTrxReadvBlockMode
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadv(const struct iovec *iov, int iovcnt)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::StartReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 538
      start: 519
    functionDepth: 1
    functionLinenumber: 519
    functionLinenumberEnd: 538
    functionName: brpc::ubring::UBRing::UbrTrxReadvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::StartReadv
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadvBlockMode(const struct iovec *iov, int iovcnt)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:542,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:543,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:546,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:547,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:550,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 573
    functionName: brpc::ubring::UBRing::IsUbrTrxReadable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxReadable(uint32_t ep_event)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:578,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:582,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:586,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:589,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:590,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:594,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:595,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 615
    functionName: brpc::ubring::UBRing::IsUbrTrxWriteable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxWriteable(uint32_t ep_event)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:620,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - task_type
    - timeout
    argTypes:
    - UbrTaskStep
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 627
    functionName: brpc::ubring::UBRing::UbrSetTimeout
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrSetTimeout(UbrTaskStep task_type, int timeout)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:632,1
    - Dst: ShmMunmap
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:637,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:638,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:639,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:649,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:654,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:657,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 629
    functionDepth: 1
    functionLinenumber: 629
    functionLinenumberEnd: 661
    functionName: brpc::ubring::UBRing::UbrTrxFreeShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - ShmRemoteFree
    - ShmFree
    - LOG
    - ShmMunmap
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxFreeShm(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:665,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:668,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:670,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 663
    functionDepth: 1
    functionLinenumber: 663
    functionLinenumberEnd: 674
    functionName: brpc::ubring::UBRing::UbrUnlinkLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmFree
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrUnlinkLocalShm()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - addr
    - len
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 698
    functionName: brpc::ubring::UBRing::PreWriteAddr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::PreWriteAddr(uint8_t *addr, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tx
    argTypes:
    - UbrTx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 700
    functionDepth: 1
    functionLinenumber: 700
    functionLinenumberEnd: 706
    functionName: brpc::ubring::UBRing::PrewriteUbrTx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrTx(UbrTx *tx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:713,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - rx
    argTypes:
    - UbrRx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 714
    functionName: brpc::ubring::UBRing::PrewriteUbrRx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrRx(UbrRx *rx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:718,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:719,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:723,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - local_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 737
    functionName: brpc::ubring::UBRing::UbrTrxMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapLocalShm(SHM *local_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:742,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:745,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:746,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:756,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - remote_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 760
    functionName: brpc::ubring::UBRing::UbrTrxMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapRemoteShm(SHM *remote_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:764,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:765,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:766,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:774,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:775,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:776,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:779,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:780,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:786,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 762
    functionDepth: 3
    functionLinenumber: 762
    functionLinenumberEnd: 798
    functionName: brpc::ubring::UBRing::UbrServerTrxInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - brpc::ubring::UBRing::UbrAddTimer
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - brpc::ubring::UBRing::UbrTrxMapShm
    - brpc::ubring::UBRing::PrewriteUbrTx
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrServerTrxInit(SHM *local_shm, SHM *remote_shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:801,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:803,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:808,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:809,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:815,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:816,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:817,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: brpc::ubring::UBRing::UbrServerTrxInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:822,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:823,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:824,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 800
    functionDepth: 4
    functionLinenumber: 800
    functionLinenumberEnd: 829
    functionName: brpc::ubring::UBRing::UbrAllocateServerShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmRemoteFree
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    - LOG
    - ShmRemoteMalloc
    - ShmLocalCalloc
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - brpc::ubring::UBRing::UbrServerTrxInit
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateServerShm(SHM* remote_trx_shm, SHM* local_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:834,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:840,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 831
    functionDepth: 1
    functionLinenumber: 831
    functionLinenumberEnd: 845
    functionName: brpc::ubring::UBRing::UbrAllocateLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ApplyAndMapLocalShm
    - LOG
    - UNLIKELY
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateLocalShm(SHM *local_trx_shm, const char *shm_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:849,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:851,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:854,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:855,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 847
    functionDepth: 2
    functionLinenumber: 847
    functionLinenumberEnd: 861
    functionName: brpc::ubring::UBRing::UbrMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - LOG
    - brpc::ubring::UBRing::PrewriteUbrTx
    - brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrMapRemoteShm(SHM *local_trx_shm, const char *local_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:865,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:870,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:876,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:877,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:880,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:881,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:883,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:888,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:889,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:893,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:896,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:897,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:898,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:899,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:900,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 863
    functionDepth: 3
    functionLinenumber: 863
    functionLinenumberEnd: 905
    functionName: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - ShmRemoteFree
    - brpc::ubring::UBRing::UbrAddTimer
    - HasTimedOut
    - LOG
    - GetCurNanoSeconds
    - brpc::ubring::UBRing::ApplyAndMapRemoteShm
    - snprintf
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrMapRemoteShmAddTimer(SHM *local_trx_shm, const
      char *local_name)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:910,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:913,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:919,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:920,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:924,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:925,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:926,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:930,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:933,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:935,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:936,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:937,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:944,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:945,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:946,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 950
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 950
    functionName: brpc::ubring::UBRing::ApplyAndMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - ShmLocalCalloc
    - snprintf
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapLocalShm(SHM *local_trx_shm, const char
      *local_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:954,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:955,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:956,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:959,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:960,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:961,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:962,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - remote_trx_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 967
      start: 952
    functionDepth: 2
    functionLinenumber: 952
    functionLinenumberEnd: 967
    functionName: brpc::ubring::UBRing::ApplyAndMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - ShmRemoteFree
    - LOG
    - ShmRemoteMalloc
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapRemoteShm(SHM *remote_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:978,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 969
    functionDepth: 1
    functionLinenumber: 969
    functionLinenumberEnd: 987
    functionName: brpc::ubring::UBRing::WritevHasEnoughSpace
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - CalcUbrMsgChunkCnt
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::WritevHasEnoughSpace(size_t buf_len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:991,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:992,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1002,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1004,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1006,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - trx
    - start_time
    - close_type
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1014
      start: 989
    functionDepth: 1
    functionLinenumber: 989
    functionLinenumberEnd: 1014
    functionName: brpc::ubring::UBRing::UbrClearResourceCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - DeleteTimerSafe
    - DeleteTimer
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrClearResourceCheck(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrClearResourceCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1018,1
    - Dst: brpc::ubring::UBRing::UbrAddAsynClearTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1025,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - trx
    - start_time
    - close_type
    - op
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1030
      start: 1016
    functionDepth: 2
    functionLinenumber: 1016
    functionLinenumberEnd: 1030
    functionName: brpc::ubring::UBRing::ClearTrxResource
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::UbrClearResourceCheck
    - brpc::ubring::UBRing::UbrAddAsynClearTimer
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ClearTrxResource(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type, int op)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1034,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1035,1
    - Dst: ATOMIC_COMPARE_EXCHANGE_STRONG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1039,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1040,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1044,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1045,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1049
      start: 1032
    functionDepth: 1
    functionLinenumber: 1032
    functionLinenumberEnd: 1049
    functionName: brpc::ubring::UBRing::UbrTrxCloseCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - UNLIKELY
    - LOG
    - ATOMIC_COMPARE_EXCHANGE_STRONG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxCloseCheck(UbrTrx *trx)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1081,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1095,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 4
    argNames:
    - trx
    - iov
    - iovcnt
    - remain_buf_len
    argTypes:
    - UbrTrx*
    - struct iovec*
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1051
    functionDepth: 1
    functionLinenumber: 1051
    functionLinenumberEnd: 1100
    functionName: brpc::ubring::UBRing::StartReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::StartReadv(UbrTrx *trx, const struct iovec *iov, int
      iovcnt, size_t remain_buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: brpc::ubring::UBRing::UBRing
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::UBRing()
  - 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: UBRing::~UBRing()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::~UBRing()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:46,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:48,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:51,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 2
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::ubring::UBRing::UbrTrxMapShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapShm(SHM *local_shm, SHM *remote_shm)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:60,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:63,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:73,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:84,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:86,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:90,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:91,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:96,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:99,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:103,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:112,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:118,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 59
    functionDepth: 3
    functionLinenumber: 59
    functionLinenumberEnd: 122
    functionName: brpc::ubring::UBRing::UbrTrxClose
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - HasTimedOut
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - ShmFree
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxClose()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:126,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:137,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 142
    functionName: brpc::ubring::UBRing::UbrAddCloseTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddCloseTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: brpc::ubring::UBRing::UbrAddCloseTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:146,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: brpc::ubring::UBRing::UbrAddHBTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:152,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 156
    functionName: brpc::ubring::UBRing::UbrAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - DeleteTimerSafe
    - brpc::ubring::UBRing::UbrAddCloseTimer
    - brpc::ubring::UBRing::UbrAddHBTimer
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:172,1
    - Dst: ATOMIC_SUB
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:175,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:177,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:185,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:189,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:191,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 196
    functionName: brpc::ubring::UBRing::UbrTrxCloseCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - LOG
    - GetCurNanoSeconds
    - ATOMIC_LOAD
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    - ATOMIC_SUB
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxCloseCallback(void* args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:200,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:208,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 215
    functionName: brpc::ubring::UBRing::UbrAddHBTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddHBTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:218,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:221,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:222,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:223,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:229,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:232,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:235,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:238,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:242,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:246,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:249,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - trx
    - fd
    - type
    argTypes:
    - UbrTrx*
    - int
    - PASSIVE_DISC_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 217
    functionDepth: 3
    functionLinenumber: 217
    functionLinenumberEnd: 251
    functionName: brpc::ubring::UBRing::UbrPassiveClearTrx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - DeleteTimer
    - ShmLocalFree
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrPassiveClearTrx(UbrTrx *trx, int fd, PASSIVE_DISC_TYPE
      type)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:262,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:284,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:286,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 253
    functionDepth: 3
    functionLinenumber: 253
    functionLinenumberEnd: 288
    functionName: brpc::ubring::UBRing::UbrTrxHBCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - LOG_EVERY_SECOND
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxHBCallback(void* args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:292,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:305,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:307,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UBRing::UbrAddAsynClearTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddAsynClearTimer(UbrTrx *trx)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:318,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:323,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::ubring::UBRing::UbrAsynClearCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - LOG
    linkageType: ''
    returnType: void
    signature: void *UBRing::UbrAsynClearCallback(void *args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:346,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:365,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:366,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 372
    functionName: brpc::ubring::UBRing::UbrTrxSend
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - LOG
    - CalcUbrMsgChunkCnt
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxSend(const void *buf, uint32_t buf_len)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::UbrTrxRecvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    - Dst: static_cast<uint8_t *>
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 374
    functionDepth: 2
    functionLinenumber: 374
    functionLinenumberEnd: 387
    functionName: brpc::ubring::UBRing::UbrTrxRecv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - UNLIKELY
    - static_cast<uint8_t *>
    - brpc::ubring::UBRing::UbrTrxRecvBlockMode
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecv(void *buf, uint32_t buf_len)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:425,1
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:429,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:431,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 2
    argNames:
    - dest
    - buf_len
    argTypes:
    - uint8_t*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 439
    functionName: brpc::ubring::UBRing::UbrTrxRecvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - LIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecvBlockMode(uint8_t *dest, uint32_t buf_len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::WritevHasEnoughSpace
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:451,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:478,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:489,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 441
    functionDepth: 2
    functionLinenumber: 441
    functionLinenumberEnd: 495
    functionName: brpc::ubring::UBRing::UbrTrxWritev
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - brpc::ubring::UBRing::WritevHasEnoughSpace
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxWritev(const struct iovec *iov, int iovcnt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::UbrTrxReadvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:510,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:511,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:512,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 497
    functionDepth: 2
    functionLinenumber: 497
    functionLinenumberEnd: 517
    functionName: brpc::ubring::UBRing::UbrTrxReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::UbrTrxReadvBlockMode
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadv(const struct iovec *iov, int iovcnt)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::StartReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 538
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 538
    functionName: brpc::ubring::UBRing::UbrTrxReadvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::StartReadv
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadvBlockMode(const struct iovec *iov, int iovcnt)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:542,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:543,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:546,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:547,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:550,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 573
    functionName: brpc::ubring::UBRing::IsUbrTrxReadable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxReadable(uint32_t ep_event)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:578,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:582,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:586,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:589,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:590,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:594,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:595,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 615
    functionName: brpc::ubring::UBRing::IsUbrTrxWriteable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxWriteable(uint32_t ep_event)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:620,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - task_type
    - timeout
    argTypes:
    - UbrTaskStep
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 627
    functionName: brpc::ubring::UBRing::UbrSetTimeout
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrSetTimeout(UbrTaskStep task_type, int timeout)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:632,1
    - Dst: ShmMunmap
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:637,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:638,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:639,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:649,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:654,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:657,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 629
    functionDepth: 1
    functionLinenumber: 629
    functionLinenumberEnd: 661
    functionName: brpc::ubring::UBRing::UbrTrxFreeShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 5
    functionsReached:
    - ShmRemoteFree
    - ShmFree
    - LOG
    - ShmMunmap
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxFreeShm(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:665,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:668,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:670,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 663
    functionDepth: 1
    functionLinenumber: 663
    functionLinenumberEnd: 674
    functionName: brpc::ubring::UBRing::UbrUnlinkLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmFree
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrUnlinkLocalShm()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - addr
    - len
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 698
    functionName: brpc::ubring::UBRing::PreWriteAddr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::PreWriteAddr(uint8_t *addr, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tx
    argTypes:
    - UbrTx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 700
    functionDepth: 1
    functionLinenumber: 700
    functionLinenumberEnd: 706
    functionName: brpc::ubring::UBRing::PrewriteUbrTx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrTx(UbrTx *tx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:713,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - rx
    argTypes:
    - UbrRx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 714
    functionName: brpc::ubring::UBRing::PrewriteUbrRx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrRx(UbrRx *rx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:718,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:719,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:723,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - local_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 737
    functionName: brpc::ubring::UBRing::UbrTrxMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapLocalShm(SHM *local_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:742,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:745,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:746,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:756,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - remote_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 760
    functionName: brpc::ubring::UBRing::UbrTrxMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapRemoteShm(SHM *remote_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:764,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:765,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:766,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:774,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:775,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:776,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:779,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:780,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:786,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 762
    functionDepth: 3
    functionLinenumber: 762
    functionLinenumberEnd: 798
    functionName: brpc::ubring::UBRing::UbrServerTrxInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - brpc::ubring::UBRing::UbrAddTimer
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - brpc::ubring::UBRing::UbrTrxMapShm
    - brpc::ubring::UBRing::PrewriteUbrTx
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrServerTrxInit(SHM *local_shm, SHM *remote_shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:801,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:803,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:808,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:809,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:815,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:816,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:817,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: brpc::ubring::UBRing::UbrServerTrxInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:822,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:823,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:824,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 800
    functionDepth: 4
    functionLinenumber: 800
    functionLinenumberEnd: 829
    functionName: brpc::ubring::UBRing::UbrAllocateServerShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmRemoteFree
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    - LOG
    - ShmRemoteMalloc
    - ShmLocalCalloc
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - brpc::ubring::UBRing::UbrServerTrxInit
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateServerShm(SHM* remote_trx_shm, SHM* local_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:834,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:840,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 831
    functionDepth: 3
    functionLinenumber: 831
    functionLinenumberEnd: 845
    functionName: brpc::ubring::UBRing::UbrAllocateLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ApplyAndMapLocalShm
    - LOG
    - UNLIKELY
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateLocalShm(SHM *local_trx_shm, const char *shm_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:849,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:851,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:854,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:855,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 847
    functionDepth: 4
    functionLinenumber: 847
    functionLinenumberEnd: 861
    functionName: brpc::ubring::UBRing::UbrMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - LOG
    - brpc::ubring::UBRing::PrewriteUbrTx
    - brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrMapRemoteShm(SHM *local_trx_shm, const char *local_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:865,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:870,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:876,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:877,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:880,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:881,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:883,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:888,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:889,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:893,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:896,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:897,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:898,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:899,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:900,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 863
    functionDepth: 3
    functionLinenumber: 863
    functionLinenumberEnd: 905
    functionName: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - ShmRemoteFree
    - brpc::ubring::UBRing::UbrAddTimer
    - HasTimedOut
    - LOG
    - GetCurNanoSeconds
    - brpc::ubring::UBRing::ApplyAndMapRemoteShm
    - snprintf
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrMapRemoteShmAddTimer(SHM *local_trx_shm, const
      char *local_name)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:910,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:913,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:919,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:920,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:924,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:925,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:926,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:930,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:933,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:935,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:936,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:937,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:944,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:945,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:946,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 950
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 950
    functionName: brpc::ubring::UBRing::ApplyAndMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - ShmLocalCalloc
    - snprintf
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapLocalShm(SHM *local_trx_shm, const char
      *local_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:954,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:955,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:956,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:959,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:960,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:961,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:962,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - remote_trx_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 967
      start: 952
    functionDepth: 2
    functionLinenumber: 952
    functionLinenumberEnd: 967
    functionName: brpc::ubring::UBRing::ApplyAndMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - ShmRemoteFree
    - LOG
    - ShmRemoteMalloc
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapRemoteShm(SHM *remote_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:978,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 969
    functionDepth: 1
    functionLinenumber: 969
    functionLinenumberEnd: 987
    functionName: brpc::ubring::UBRing::WritevHasEnoughSpace
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - CalcUbrMsgChunkCnt
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::WritevHasEnoughSpace(size_t buf_len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:991,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:992,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1002,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1004,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1006,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - trx
    - start_time
    - close_type
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1014
      start: 989
    functionDepth: 1
    functionLinenumber: 989
    functionLinenumberEnd: 1014
    functionName: brpc::ubring::UBRing::UbrClearResourceCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 1
    functionsReached:
    - DeleteTimerSafe
    - DeleteTimer
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrClearResourceCheck(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrClearResourceCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1018,1
    - Dst: brpc::ubring::UBRing::UbrAddAsynClearTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1025,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - trx
    - start_time
    - close_type
    - op
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1030
      start: 1016
    functionDepth: 2
    functionLinenumber: 1016
    functionLinenumberEnd: 1030
    functionName: brpc::ubring::UBRing::ClearTrxResource
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 6
    functionsReached:
    - brpc::ubring::UBRing::UbrClearResourceCheck
    - brpc::ubring::UBRing::UbrAddAsynClearTimer
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ClearTrxResource(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type, int op)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1034,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1035,1
    - Dst: ATOMIC_COMPARE_EXCHANGE_STRONG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1039,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1040,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1044,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1045,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1049
      start: 1032
    functionDepth: 1
    functionLinenumber: 1032
    functionLinenumberEnd: 1049
    functionName: brpc::ubring::UBRing::UbrTrxCloseCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - UNLIKELY
    - LOG
    - ATOMIC_COMPARE_EXCHANGE_STRONG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxCloseCheck(UbrTrx *trx)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1081,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1095,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 4
    argNames:
    - trx
    - iov
    - iovcnt
    - remain_buf_len
    argTypes:
    - UbrTrx*
    - struct iovec*
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1051
    functionDepth: 1
    functionLinenumber: 1051
    functionLinenumberEnd: 1100
    functionName: brpc::ubring::UBRing::StartReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::StartReadv(UbrTrx *trx, const struct iovec *iov, int
      iovcnt, size_t remain_buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: brpc::ubring::UBRing::UBRing
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::UBRing()
  - 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: UBRing::~UBRing()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::~UBRing()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:46,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:48,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:51,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 2
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::ubring::UBRing::UbrTrxMapShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapShm(SHM *local_shm, SHM *remote_shm)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:60,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:63,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:73,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:84,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:86,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:90,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:91,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:96,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:99,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:103,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:112,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:118,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 59
    functionDepth: 3
    functionLinenumber: 59
    functionLinenumberEnd: 122
    functionName: brpc::ubring::UBRing::UbrTrxClose
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - HasTimedOut
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - ShmFree
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxClose()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:126,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:137,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 142
    functionName: brpc::ubring::UBRing::UbrAddCloseTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddCloseTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: brpc::ubring::UBRing::UbrAddCloseTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:146,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: brpc::ubring::UBRing::UbrAddHBTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:152,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 156
    functionName: brpc::ubring::UBRing::UbrAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - DeleteTimerSafe
    - brpc::ubring::UBRing::UbrAddCloseTimer
    - brpc::ubring::UBRing::UbrAddHBTimer
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:172,1
    - Dst: ATOMIC_SUB
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:175,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:177,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:185,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:189,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:191,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 196
    functionName: brpc::ubring::UBRing::UbrTrxCloseCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - LOG
    - GetCurNanoSeconds
    - ATOMIC_LOAD
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    - ATOMIC_SUB
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxCloseCallback(void* args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:200,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:208,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 215
    functionName: brpc::ubring::UBRing::UbrAddHBTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddHBTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:218,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:221,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:222,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:223,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:229,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:232,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:235,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:238,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:242,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:246,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:249,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - trx
    - fd
    - type
    argTypes:
    - UbrTrx*
    - int
    - PASSIVE_DISC_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 217
    functionDepth: 3
    functionLinenumber: 217
    functionLinenumberEnd: 251
    functionName: brpc::ubring::UBRing::UbrPassiveClearTrx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - DeleteTimer
    - ShmLocalFree
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrPassiveClearTrx(UbrTrx *trx, int fd, PASSIVE_DISC_TYPE
      type)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:262,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:284,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:286,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 253
    functionDepth: 3
    functionLinenumber: 253
    functionLinenumberEnd: 288
    functionName: brpc::ubring::UBRing::UbrTrxHBCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - LOG_EVERY_SECOND
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxHBCallback(void* args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:292,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:305,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:307,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UBRing::UbrAddAsynClearTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddAsynClearTimer(UbrTrx *trx)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:318,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:323,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::ubring::UBRing::UbrAsynClearCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - LOG
    linkageType: ''
    returnType: void
    signature: void *UBRing::UbrAsynClearCallback(void *args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:346,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:365,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:366,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 372
    functionName: brpc::ubring::UBRing::UbrTrxSend
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - LOG
    - CalcUbrMsgChunkCnt
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxSend(const void *buf, uint32_t buf_len)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::UbrTrxRecvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    - Dst: static_cast<uint8_t *>
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 374
    functionDepth: 2
    functionLinenumber: 374
    functionLinenumberEnd: 387
    functionName: brpc::ubring::UBRing::UbrTrxRecv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - UNLIKELY
    - static_cast<uint8_t *>
    - brpc::ubring::UBRing::UbrTrxRecvBlockMode
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecv(void *buf, uint32_t buf_len)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:425,1
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:429,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:431,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 2
    argNames:
    - dest
    - buf_len
    argTypes:
    - uint8_t*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 439
    functionName: brpc::ubring::UBRing::UbrTrxRecvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - LIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecvBlockMode(uint8_t *dest, uint32_t buf_len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::WritevHasEnoughSpace
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:451,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:478,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:489,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 441
    functionDepth: 2
    functionLinenumber: 441
    functionLinenumberEnd: 495
    functionName: brpc::ubring::UBRing::UbrTrxWritev
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - brpc::ubring::UBRing::WritevHasEnoughSpace
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxWritev(const struct iovec *iov, int iovcnt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::UbrTrxReadvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:510,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:511,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:512,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 497
    functionDepth: 2
    functionLinenumber: 497
    functionLinenumberEnd: 517
    functionName: brpc::ubring::UBRing::UbrTrxReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::UbrTrxReadvBlockMode
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadv(const struct iovec *iov, int iovcnt)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::StartReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 538
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 538
    functionName: brpc::ubring::UBRing::UbrTrxReadvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::StartReadv
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadvBlockMode(const struct iovec *iov, int iovcnt)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:542,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:543,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:546,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:547,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:550,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 573
    functionName: brpc::ubring::UBRing::IsUbrTrxReadable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxReadable(uint32_t ep_event)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:578,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:582,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:586,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:589,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:590,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:594,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:595,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 615
    functionName: brpc::ubring::UBRing::IsUbrTrxWriteable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxWriteable(uint32_t ep_event)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:620,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - task_type
    - timeout
    argTypes:
    - UbrTaskStep
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 627
    functionName: brpc::ubring::UBRing::UbrSetTimeout
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrSetTimeout(UbrTaskStep task_type, int timeout)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:632,1
    - Dst: ShmMunmap
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:637,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:638,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:639,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:649,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:654,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:657,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 629
    functionDepth: 1
    functionLinenumber: 629
    functionLinenumberEnd: 661
    functionName: brpc::ubring::UBRing::UbrTrxFreeShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 8
    functionsReached:
    - ShmRemoteFree
    - ShmFree
    - LOG
    - ShmMunmap
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxFreeShm(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:665,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:668,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:670,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 663
    functionDepth: 1
    functionLinenumber: 663
    functionLinenumberEnd: 674
    functionName: brpc::ubring::UBRing::UbrUnlinkLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmFree
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrUnlinkLocalShm()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - addr
    - len
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 698
    functionName: brpc::ubring::UBRing::PreWriteAddr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::PreWriteAddr(uint8_t *addr, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tx
    argTypes:
    - UbrTx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 700
    functionDepth: 1
    functionLinenumber: 700
    functionLinenumberEnd: 706
    functionName: brpc::ubring::UBRing::PrewriteUbrTx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrTx(UbrTx *tx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:713,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - rx
    argTypes:
    - UbrRx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 714
    functionName: brpc::ubring::UBRing::PrewriteUbrRx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrRx(UbrRx *rx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:718,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:719,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:723,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - local_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 737
    functionName: brpc::ubring::UBRing::UbrTrxMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 5
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapLocalShm(SHM *local_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:742,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:745,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:746,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:756,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - remote_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 760
    functionName: brpc::ubring::UBRing::UbrTrxMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 5
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapRemoteShm(SHM *remote_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:764,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:765,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:766,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:774,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:775,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:776,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:779,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:780,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:786,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 762
    functionDepth: 3
    functionLinenumber: 762
    functionLinenumberEnd: 798
    functionName: brpc::ubring::UBRing::UbrServerTrxInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - brpc::ubring::UBRing::UbrAddTimer
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - brpc::ubring::UBRing::UbrTrxMapShm
    - brpc::ubring::UBRing::PrewriteUbrTx
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrServerTrxInit(SHM *local_shm, SHM *remote_shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:801,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:803,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:808,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:809,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:815,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:816,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:817,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: brpc::ubring::UBRing::UbrServerTrxInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:822,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:823,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:824,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 800
    functionDepth: 4
    functionLinenumber: 800
    functionLinenumberEnd: 829
    functionName: brpc::ubring::UBRing::UbrAllocateServerShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmRemoteFree
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    - LOG
    - ShmRemoteMalloc
    - ShmLocalCalloc
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - brpc::ubring::UBRing::UbrServerTrxInit
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateServerShm(SHM* remote_trx_shm, SHM* local_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:834,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:840,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 831
    functionDepth: 3
    functionLinenumber: 831
    functionLinenumberEnd: 845
    functionName: brpc::ubring::UBRing::UbrAllocateLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ApplyAndMapLocalShm
    - LOG
    - UNLIKELY
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateLocalShm(SHM *local_trx_shm, const char *shm_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:849,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:851,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:854,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:855,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 847
    functionDepth: 4
    functionLinenumber: 847
    functionLinenumberEnd: 861
    functionName: brpc::ubring::UBRing::UbrMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - LOG
    - brpc::ubring::UBRing::PrewriteUbrTx
    - brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrMapRemoteShm(SHM *local_trx_shm, const char *local_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:865,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:870,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:876,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:877,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:880,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:881,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:883,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:888,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:889,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:893,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:896,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:897,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:898,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:899,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:900,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 863
    functionDepth: 3
    functionLinenumber: 863
    functionLinenumberEnd: 905
    functionName: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - ShmRemoteFree
    - brpc::ubring::UBRing::UbrAddTimer
    - HasTimedOut
    - LOG
    - GetCurNanoSeconds
    - brpc::ubring::UBRing::ApplyAndMapRemoteShm
    - snprintf
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrMapRemoteShmAddTimer(SHM *local_trx_shm, const
      char *local_name)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:910,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:913,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:919,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:920,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:924,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:925,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:926,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:930,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:933,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:935,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:936,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:937,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:944,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:945,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:946,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 950
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 950
    functionName: brpc::ubring::UBRing::ApplyAndMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - ShmLocalCalloc
    - snprintf
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapLocalShm(SHM *local_trx_shm, const char
      *local_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:954,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:955,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:956,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:959,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:960,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:961,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:962,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - remote_trx_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 967
      start: 952
    functionDepth: 2
    functionLinenumber: 952
    functionLinenumberEnd: 967
    functionName: brpc::ubring::UBRing::ApplyAndMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - ShmRemoteFree
    - LOG
    - ShmRemoteMalloc
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapRemoteShm(SHM *remote_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:978,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 969
    functionDepth: 1
    functionLinenumber: 969
    functionLinenumberEnd: 987
    functionName: brpc::ubring::UBRing::WritevHasEnoughSpace
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - CalcUbrMsgChunkCnt
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::WritevHasEnoughSpace(size_t buf_len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:991,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:992,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1002,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1004,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1006,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - trx
    - start_time
    - close_type
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1014
      start: 989
    functionDepth: 1
    functionLinenumber: 989
    functionLinenumberEnd: 1014
    functionName: brpc::ubring::UBRing::UbrClearResourceCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 2
    functionsReached:
    - DeleteTimerSafe
    - DeleteTimer
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrClearResourceCheck(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrClearResourceCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1018,1
    - Dst: brpc::ubring::UBRing::UbrAddAsynClearTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1025,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - trx
    - start_time
    - close_type
    - op
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1030
      start: 1016
    functionDepth: 2
    functionLinenumber: 1016
    functionLinenumberEnd: 1030
    functionName: brpc::ubring::UBRing::ClearTrxResource
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 9
    functionsReached:
    - brpc::ubring::UBRing::UbrClearResourceCheck
    - brpc::ubring::UBRing::UbrAddAsynClearTimer
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ClearTrxResource(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type, int op)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1034,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1035,1
    - Dst: ATOMIC_COMPARE_EXCHANGE_STRONG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1039,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1040,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1044,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1045,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1049
      start: 1032
    functionDepth: 1
    functionLinenumber: 1032
    functionLinenumberEnd: 1049
    functionName: brpc::ubring::UBRing::UbrTrxCloseCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 6
    functionsReached:
    - UNLIKELY
    - LOG
    - ATOMIC_COMPARE_EXCHANGE_STRONG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxCloseCheck(UbrTrx *trx)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1081,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1095,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 4
    argNames:
    - trx
    - iov
    - iovcnt
    - remain_buf_len
    argTypes:
    - UbrTrx*
    - struct iovec*
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1051
    functionDepth: 1
    functionLinenumber: 1051
    functionLinenumberEnd: 1100
    functionName: brpc::ubring::UBRing::StartReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::StartReadv(UbrTrx *trx, const struct iovec *iov, int
      iovcnt, size_t remain_buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: brpc::ubring::UBRing::UBRing
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::UBRing()
  - 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: UBRing::~UBRing()
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::~UBRing()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:46,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:48,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:51,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:52,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:53,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 44
    functionDepth: 2
    functionLinenumber: 44
    functionLinenumberEnd: 57
    functionName: brpc::ubring::UBRing::UbrTrxMapShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapShm(SHM *local_shm, SHM *remote_shm)
  - BBCount: 13
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:60,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:63,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:73,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:84,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:85,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:86,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:90,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:91,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:95,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:96,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:99,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:103,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:107,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:112,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:118,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 51
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 122
      start: 59
    functionDepth: 3
    functionLinenumber: 59
    functionLinenumberEnd: 122
    functionName: brpc::ubring::UBRing::UbrTrxClose
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - HasTimedOut
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - ShmFree
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxClose()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:125,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:126,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:136,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:137,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 142
    functionName: brpc::ubring::UBRing::UbrAddCloseTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddCloseTimer()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: brpc::ubring::UBRing::UbrAddCloseTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:145,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:146,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: brpc::ubring::UBRing::UbrAddHBTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:150,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:151,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:152,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 156
      start: 144
    functionDepth: 2
    functionLinenumber: 144
    functionLinenumberEnd: 156
    functionName: brpc::ubring::UBRing::UbrAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 6
    functionsReached:
    - LOG
    - DeleteTimerSafe
    - brpc::ubring::UBRing::UbrAddCloseTimer
    - brpc::ubring::UBRing::UbrAddHBTimer
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:160,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:172,1
    - Dst: ATOMIC_SUB
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:175,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:177,1
    - Dst: ATOMIC_LOAD
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:185,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:189,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:191,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 28
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 196
      start: 158
    functionDepth: 3
    functionLinenumber: 158
    functionLinenumberEnd: 196
    functionName: brpc::ubring::UBRing::UbrTrxCloseCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - LOG
    - GetCurNanoSeconds
    - ATOMIC_LOAD
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    - ATOMIC_SUB
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxCloseCallback(void* args)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:199,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:200,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:208,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:210,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 198
    functionDepth: 1
    functionLinenumber: 198
    functionLinenumberEnd: 215
    functionName: brpc::ubring::UBRing::UbrAddHBTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddHBTimer()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxCloseCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:218,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:219,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:221,1
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:222,1
    - Dst: brpc::ubring::UBRing::ClearTrxResource
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:223,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:229,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:232,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:235,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:238,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:242,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:246,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:249,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 3
    argNames:
    - trx
    - fd
    - type
    argTypes:
    - UbrTrx*
    - int
    - PASSIVE_DISC_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 217
    functionDepth: 3
    functionLinenumber: 217
    functionLinenumberEnd: 251
    functionName: brpc::ubring::UBRing::UbrPassiveClearTrx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::ClearTrxResource
    - bthread_usleep
    - DeleteTimer
    - ShmLocalFree
    - brpc::ubring::UBRing::UbrTrxCloseCheck
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - LOG
    - GetCurNanoSeconds
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrPassiveClearTrx(UbrTrx *trx, int fd, PASSIVE_DISC_TYPE
      type)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: brpc::ubring::UBRing::UbrTrxCallbackCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:255,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:261,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:262,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:284,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:285,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:286,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 26
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 288
      start: 253
    functionDepth: 3
    functionLinenumber: 253
    functionLinenumberEnd: 288
    functionName: brpc::ubring::UBRing::UbrTrxHBCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - LOG_EVERY_SECOND
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxCallbackCheck
    linkageType: ''
    returnType: void
    signature: void * UBRing::UbrTrxHBCallback(void* args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:292,1
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:305,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:306,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:307,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 290
    functionDepth: 1
    functionLinenumber: 290
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UBRing::UbrAddAsynClearTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrAddAsynClearTimer(UbrTrx *trx)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:318,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:322,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:323,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:326,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:327,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 330
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 330
    functionName: brpc::ubring::UBRing::UbrAsynClearCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - UNLIKELY
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - LOG
    linkageType: ''
    returnType: void
    signature: void *UBRing::UbrAsynClearCallback(void *args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:334,1
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:346,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:365,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:366,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 372
      start: 332
    functionDepth: 1
    functionLinenumber: 332
    functionLinenumberEnd: 372
    functionName: brpc::ubring::UBRing::UbrTrxSend
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - LOG
    - CalcUbrMsgChunkCnt
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxSend(const void *buf, uint32_t buf_len)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:377,1
    - Dst: brpc::ubring::UBRing::UbrTrxRecvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    - Dst: static_cast<uint8_t *>
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:386,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - buf
    - buf_len
    argTypes:
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 387
      start: 374
    functionDepth: 2
    functionLinenumber: 374
    functionLinenumberEnd: 387
    functionName: brpc::ubring::UBRing::UbrTrxRecv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - UNLIKELY
    - static_cast<uint8_t *>
    - brpc::ubring::UBRing::UbrTrxRecvBlockMode
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecv(void *buf, uint32_t buf_len)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:392,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:405,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:425,1
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:429,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:431,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 2
    argNames:
    - dest
    - buf_len
    argTypes:
    - uint8_t*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 439
      start: 389
    functionDepth: 1
    functionLinenumber: 389
    functionLinenumberEnd: 439
    functionName: brpc::ubring::UBRing::UbrTrxRecvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - LIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrTrxRecvBlockMode(uint8_t *dest, uint32_t buf_len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::CheckTrxSendPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:443,1
    - Dst: brpc::ubring::UBRing::WritevHasEnoughSpace
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:451,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:478,1
    - Dst: Copy64Byte
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:489,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 36
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 495
      start: 441
    functionDepth: 2
    functionLinenumber: 441
    functionLinenumberEnd: 495
    functionName: brpc::ubring::UBRing::UbrTrxWritev
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - Copy64Byte
    - brpc::ubring::UBRing::CheckTrxSendPreCheck
    - memcpy
    - brpc::ubring::UBRing::WritevHasEnoughSpace
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxWritev(const struct iovec *iov, int iovcnt)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:500,1
    - Dst: brpc::ubring::UBRing::UbrTrxReadvBlockMode
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:510,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:511,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:512,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 517
      start: 497
    functionDepth: 2
    functionLinenumber: 497
    functionLinenumberEnd: 517
    functionName: brpc::ubring::UBRing::UbrTrxReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::UbrTrxReadvBlockMode
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadv(const struct iovec *iov, int iovcnt)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvParam
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:522,1
    - Dst: brpc::ubring::UBRing::StartReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:532,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - struct iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 538
      start: 519
    functionDepth: 2
    functionLinenumber: 519
    functionLinenumberEnd: 538
    functionName: brpc::ubring::UBRing::UbrTrxReadvBlockMode
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBRing::CheckTrxRecvParam
    - brpc::ubring::UBRing::StartReadv
    - UNLIKELY
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::UbrTrxReadvBlockMode(const struct iovec *iov, int iovcnt)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:542,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:543,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:546,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:547,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:550,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 573
      start: 540
    functionDepth: 1
    functionLinenumber: 540
    functionLinenumberEnd: 573
    functionName: brpc::ubring::UBRing::IsUbrTrxReadable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxReadable(uint32_t ep_event)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:578,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:581,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:582,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:585,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:586,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:589,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:590,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:594,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:595,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 31
    argCount: 1
    argNames:
    - ep_event
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 615
      start: 575
    functionDepth: 1
    functionLinenumber: 575
    functionLinenumberEnd: 615
    functionName: brpc::ubring::UBRing::IsUbrTrxWriteable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::IsUbrTrxWriteable(uint32_t ep_event)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:620,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:625,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 2
    argNames:
    - task_type
    - timeout
    argTypes:
    - UbrTaskStep
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 627
      start: 617
    functionDepth: 1
    functionLinenumber: 617
    functionLinenumberEnd: 627
    functionName: brpc::ubring::UBRing::UbrSetTimeout
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrSetTimeout(UbrTaskStep task_type, int timeout)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:632,1
    - Dst: ShmMunmap
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:637,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:638,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:639,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:643,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:644,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:646,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:649,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:654,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:657,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 25
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 661
      start: 629
    functionDepth: 1
    functionLinenumber: 629
    functionLinenumberEnd: 661
    functionName: brpc::ubring::UBRing::UbrTrxFreeShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 11
    functionsReached:
    - ShmRemoteFree
    - ShmFree
    - LOG
    - ShmMunmap
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxFreeShm(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:665,1
    - Dst: ShmFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:668,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:670,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 9
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 674
      start: 663
    functionDepth: 1
    functionLinenumber: 663
    functionLinenumberEnd: 674
    functionName: brpc::ubring::UBRing::UbrUnlinkLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmFree
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrUnlinkLocalShm()
  - BBCount: 5
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 2
    argNames:
    - addr
    - len
    argTypes:
    - uint8_t*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 698
      start: 676
    functionDepth: 0
    functionLinenumber: 676
    functionLinenumberEnd: 698
    functionName: brpc::ubring::UBRing::PreWriteAddr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UBRing::PreWriteAddr(uint8_t *addr, size_t len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:705,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - tx
    argTypes:
    - UbrTx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 706
      start: 700
    functionDepth: 1
    functionLinenumber: 700
    functionLinenumberEnd: 706
    functionName: brpc::ubring::UBRing::PrewriteUbrTx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 6
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrTx(UbrTx *tx)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::PreWriteAddr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:713,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - rx
    argTypes:
    - UbrRx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 714
      start: 708
    functionDepth: 1
    functionLinenumber: 708
    functionLinenumberEnd: 714
    functionName: brpc::ubring::UBRing::PrewriteUbrRx
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 6
    functionsReached:
    - brpc::ubring::UBRing::PreWriteAddr
    linkageType: ''
    returnType: void
    signature: void UBRing::PrewriteUbrRx(UbrRx *rx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:718,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:719,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:722,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:723,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:733,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - local_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 716
    functionDepth: 1
    functionLinenumber: 716
    functionLinenumberEnd: 737
    functionName: brpc::ubring::UBRing::UbrTrxMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 7
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapLocalShm(SHM *local_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:741,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:742,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:745,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:746,1
    - Dst: Aligned64Offset
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:756,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 1
    argNames:
    - remote_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 760
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 760
    functionName: brpc::ubring::UBRing::UbrTrxMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 7
    functionsReached:
    - Aligned64Offset
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxMapRemoteShm(SHM *remote_shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxMapShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:764,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:765,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:766,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:774,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:775,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:776,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:779,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:780,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:785,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:786,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 27
    argCount: 2
    argNames:
    - local_shm
    - remote_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 798
      start: 762
    functionDepth: 3
    functionLinenumber: 762
    functionLinenumberEnd: 798
    functionName: brpc::ubring::UBRing::UbrServerTrxInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - brpc::ubring::UBRing::UbrAddTimer
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - brpc::ubring::UBRing::UbrTrxMapShm
    - brpc::ubring::UBRing::PrewriteUbrTx
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrServerTrxInit(SHM *local_shm, SHM *remote_shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:801,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:802,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:803,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:807,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:808,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:809,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:814,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:815,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:816,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:817,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: brpc::ubring::UBRing::UbrServerTrxInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:821,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:822,1
    - Dst: brpc::ubring::UBRing::UbrTrxFreeShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:823,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:824,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 2
    argNames:
    - remote_trx_shm
    - local_trx_shm
    argTypes:
    - SHM*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 829
      start: 800
    functionDepth: 4
    functionLinenumber: 800
    functionLinenumberEnd: 829
    functionName: brpc::ubring::UBRing::UbrAllocateServerShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - ShmRemoteFree
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    - LOG
    - ShmRemoteMalloc
    - ShmLocalCalloc
    - brpc::ubring::UBRing::UbrTrxFreeShm
    - brpc::ubring::UBRing::UbrSetSleepTask
    - brpc::ubring::UBRing::UbrServerTrxInit
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateServerShm(SHM* remote_trx_shm, SHM* local_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:833,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:834,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:839,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:840,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - shm_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 845
      start: 831
    functionDepth: 3
    functionLinenumber: 831
    functionLinenumberEnd: 845
    functionName: brpc::ubring::UBRing::UbrAllocateLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::ApplyAndMapLocalShm
    - LOG
    - UNLIKELY
    - brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrAllocateLocalShm(SHM *local_trx_shm, const char *shm_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:849,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:850,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:851,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrRx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:854,1
    - Dst: brpc::ubring::UBRing::PrewriteUbrTx
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:855,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 861
      start: 847
    functionDepth: 4
    functionLinenumber: 847
    functionLinenumberEnd: 861
    functionName: brpc::ubring::UBRing::UbrMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::PrewriteUbrRx
    - LOG
    - brpc::ubring::UBRing::PrewriteUbrTx
    - brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    - UNLIKELY
    linkageType: ''
    returnType: int
    signature: int UBRing::UbrMapRemoteShm(SHM *local_trx_shm, const char *local_name)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:865,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:870,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:876,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:877,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:880,1
    - Dst: brpc::ubring::UBRing::ApplyAndMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:881,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:882,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:883,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: brpc::ubring::UBRing::UbrAddTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:887,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:888,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:889,1
    - Dst: brpc::ubring::UBRing::UbrSetSleepTask
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:893,1
    - Dst: HasTimedOut
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:896,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:897,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:898,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:899,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:900,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 24
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 905
      start: 863
    functionDepth: 3
    functionLinenumber: 863
    functionLinenumberEnd: 905
    functionName: brpc::ubring::UBRing::UbrMapRemoteShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - ShmRemoteFree
    - brpc::ubring::UBRing::UbrAddTimer
    - HasTimedOut
    - LOG
    - GetCurNanoSeconds
    - brpc::ubring::UBRing::ApplyAndMapRemoteShm
    - snprintf
    - brpc::ubring::UBRing::UbrSetSleepTask
    - DeleteTimerSafe
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrMapRemoteShmAddTimer(SHM *local_trx_shm, const
      char *local_name)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:909,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:910,1
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:913,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:919,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:920,1
    - Dst: ShmLocalCalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:924,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:925,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:926,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:930,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapLocalShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:933,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:934,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:935,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:936,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:937,1
    - Dst: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:942,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:944,1
    - Dst: ShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:945,1
    - Dst: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:946,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 34
    argCount: 2
    argNames:
    - local_trx_shm
    - local_name
    argTypes:
    - SHM*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 950
      start: 907
    functionDepth: 2
    functionLinenumber: 907
    functionLinenumberEnd: 950
    functionName: brpc::ubring::UBRing::ApplyAndMapLocalShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxMapLocalShm
    - ShmLocalFree
    - brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    - brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    - LOG
    - ShmLocalCalloc
    - snprintf
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapLocalShm(SHM *local_trx_shm, const char
      *local_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:954,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:955,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:956,1
    - Dst: brpc::ubring::UBRing::UbrTrxMapRemoteShm
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:959,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:960,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:961,1
    - Dst: ShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:962,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 13
    argCount: 1
    argNames:
    - remote_trx_shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 967
      start: 952
    functionDepth: 2
    functionLinenumber: 952
    functionLinenumberEnd: 967
    functionName: brpc::ubring::UBRing::ApplyAndMapRemoteShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - ShmRemoteFree
    - LOG
    - ShmRemoteMalloc
    - brpc::ubring::UBRing::UbrTrxMapRemoteShm
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ApplyAndMapRemoteShm(SHM *remote_trx_shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: CalcUbrMsgChunkCnt
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:976,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:978,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 1
    argNames:
    - buf_len
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 987
      start: 969
    functionDepth: 1
    functionLinenumber: 969
    functionLinenumberEnd: 987
    functionName: brpc::ubring::UBRing::WritevHasEnoughSpace
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - CalcUbrMsgChunkCnt
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::WritevHasEnoughSpace(size_t buf_len)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:991,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:992,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1002,1
    - Dst: DeleteTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1004,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1006,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 3
    argNames:
    - trx
    - start_time
    - close_type
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1014
      start: 989
    functionDepth: 1
    functionLinenumber: 989
    functionLinenumberEnd: 1014
    functionName: brpc::ubring::UBRing::UbrClearResourceCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 3
    functionsReached:
    - DeleteTimerSafe
    - DeleteTimer
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrClearResourceCheck(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrClearResourceCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1018,1
    - Dst: brpc::ubring::UBRing::UbrAddAsynClearTimer
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1023,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1025,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 4
    argNames:
    - trx
    - start_time
    - close_type
    - op
    argTypes:
    - UbrTrx*
    - uint64_t
    - UbrCloseType
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1030
      start: 1016
    functionDepth: 2
    functionLinenumber: 1016
    functionLinenumberEnd: 1030
    functionName: brpc::ubring::UBRing::ClearTrxResource
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 12
    functionsReached:
    - brpc::ubring::UBRing::UbrClearResourceCheck
    - brpc::ubring::UBRing::UbrAddAsynClearTimer
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::ClearTrxResource(UbrTrx *trx, uint64_t start_time,
      UbrCloseType close_type, int op)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1034,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1035,1
    - Dst: ATOMIC_COMPARE_EXCHANGE_STRONG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1039,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1040,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1044,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1045,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1049
      start: 1032
    functionDepth: 1
    functionLinenumber: 1032
    functionLinenumberEnd: 1049
    functionName: brpc::ubring::UBRing::UbrTrxCloseCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    - ATOMIC_COMPARE_EXCHANGE_STRONG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRing::UbrTrxCloseCheck(UbrTrx *trx)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: brpc::ubring::UBRing::CheckTrxRecvPreCheck
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1059,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1081,1
    - Dst: brpc::ubring::UBRing::UpdateDataQTail
      Src: /src/brpc/src/brpc/ubshm/ub_ring.cpp:1095,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 35
    argCount: 4
    argNames:
    - trx
    - iov
    - iovcnt
    - remain_buf_len
    argTypes:
    - UbrTrx*
    - struct iovec*
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1100
      start: 1051
    functionDepth: 1
    functionLinenumber: 1051
    functionLinenumberEnd: 1100
    functionName: brpc::ubring::UBRing::StartReadv
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.cpp
    functionUses: 4
    functionsReached:
    - memcpy
    - brpc::ubring::UBRing::CheckTrxRecvPreCheck
    - UNLIKELY
    - brpc::ubring::UBRing::UpdateDataQTail
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t UBRing::StartReadv(UbrTrx *trx, const struct iovec *iov, int
      iovcnt, size_t remain_buf_len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 2
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: brpc::ubring::UBRing::ReadV
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxReadv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadV(const iovec* iov, int iovcnt) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - task_type
    argTypes:
    - UbrTaskStep
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 95
    functionName: brpc::ubring::UBRing::UbrSetSleepTask
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 12
    functionsReached:
    - sleep
    linkageType: ''
    returnType: void
    signature: void UbrSetSleepTask(UbrTaskStep task_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:104,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - listener_name
    - local_name
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: brpc::ubring::UBRing::CheckTrxConnectParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxConnectParam(const char *listener_name, const char
      *local_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:120,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 126
    functionName: brpc::ubring::UBRing::CheckTrxSendPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxSendPreCheck(UbrTrx *trx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:130,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:140,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:143,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:144,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:148,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 3
    argNames:
    - trx
    - buf
    - buf_len
    argTypes:
    - UbrTrx*
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 152
    functionName: brpc::ubring::UBRing::CheckTrxRecvParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 16
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvParam(UbrTrx *trx, const void *buf, uint32_t
      buf_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 161
    functionName: brpc::ubring::UBRing::CheckTrxRecvPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvPreCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::ubring::UBRing::UpdateDataQTail
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UpdateDataQTail(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:171,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:175,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:179,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:183,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::UBRing::UbrTrxCallbackCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbrTrxCallbackCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 2
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: brpc::ubring::UBRing::ReadV
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxReadv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadV(const iovec* iov, int iovcnt) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - task_type
    argTypes:
    - UbrTaskStep
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 95
    functionName: brpc::ubring::UBRing::UbrSetSleepTask
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 12
    functionsReached:
    - sleep
    linkageType: ''
    returnType: void
    signature: void UbrSetSleepTask(UbrTaskStep task_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:104,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - listener_name
    - local_name
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: brpc::ubring::UBRing::CheckTrxConnectParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxConnectParam(const char *listener_name, const char
      *local_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:120,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 126
    functionName: brpc::ubring::UBRing::CheckTrxSendPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxSendPreCheck(UbrTrx *trx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:130,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:140,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:143,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:144,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:148,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 3
    argNames:
    - trx
    - buf
    - buf_len
    argTypes:
    - UbrTrx*
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 152
    functionName: brpc::ubring::UBRing::CheckTrxRecvParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 16
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvParam(UbrTrx *trx, const void *buf, uint32_t
      buf_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 161
    functionName: brpc::ubring::UBRing::CheckTrxRecvPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvPreCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::ubring::UBRing::UpdateDataQTail
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UpdateDataQTail(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:171,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:175,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:179,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:183,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::UBRing::UbrTrxCallbackCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbrTrxCallbackCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 2
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: brpc::ubring::UBRing::ReadV
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxReadv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadV(const iovec* iov, int iovcnt) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - task_type
    argTypes:
    - UbrTaskStep
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 95
    functionName: brpc::ubring::UBRing::UbrSetSleepTask
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 12
    functionsReached:
    - sleep
    linkageType: ''
    returnType: void
    signature: void UbrSetSleepTask(UbrTaskStep task_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:104,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - listener_name
    - local_name
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: brpc::ubring::UBRing::CheckTrxConnectParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxConnectParam(const char *listener_name, const char
      *local_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:120,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 126
    functionName: brpc::ubring::UBRing::CheckTrxSendPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxSendPreCheck(UbrTrx *trx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:130,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:140,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:143,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:144,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:148,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 3
    argNames:
    - trx
    - buf
    - buf_len
    argTypes:
    - UbrTrx*
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 152
    functionName: brpc::ubring::UBRing::CheckTrxRecvParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 16
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvParam(UbrTrx *trx, const void *buf, uint32_t
      buf_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 161
    functionName: brpc::ubring::UBRing::CheckTrxRecvPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvPreCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::ubring::UBRing::UpdateDataQTail
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UpdateDataQTail(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:171,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:175,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:179,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:183,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::UBRing::UbrTrxCallbackCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbrTrxCallbackCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRing::UbrTrxReadv
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:41,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - iov
    - iovcnt
    argTypes:
    - iovec*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 42
      start: 40
    functionDepth: 2
    functionLinenumber: 40
    functionLinenumberEnd: 42
    functionName: brpc::ubring::UBRing::ReadV
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - brpc::ubring::UBRing::UbrTrxReadv
    linkageType: ''
    returnType: ssize_t
    signature: ssize_t ReadV(const iovec* iov, int iovcnt) override
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: sleep
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:93,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - task_type
    argTypes:
    - UbrTaskStep
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 95
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 95
    functionName: brpc::ubring::UBRing::UbrSetSleepTask
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 12
    functionsReached:
    - sleep
    linkageType: ''
    returnType: void
    signature: void UbrSetSleepTask(UbrTaskStep task_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:103,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:104,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - listener_name
    - local_name
    argTypes:
    - char*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 97
    functionDepth: 1
    functionLinenumber: 97
    functionLinenumberEnd: 108
    functionName: brpc::ubring::UBRing::CheckTrxConnectParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxConnectParam(const char *listener_name, const char
      *local_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:120,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:121,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 118
    functionDepth: 1
    functionLinenumber: 118
    functionLinenumberEnd: 126
    functionName: brpc::ubring::UBRing::CheckTrxSendPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxSendPreCheck(UbrTrx *trx)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:129,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:130,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:139,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:140,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:143,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:144,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:148,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 22
    argCount: 3
    argNames:
    - trx
    - buf
    - buf_len
    argTypes:
    - UbrTrx*
    - void*
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 152
    functionName: brpc::ubring::UBRing::CheckTrxRecvParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 16
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvParam(UbrTrx *trx, const void *buf, uint32_t
      buf_len)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:156,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:157,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 154
    functionDepth: 1
    functionLinenumber: 154
    functionLinenumberEnd: 161
    functionName: brpc::ubring::UBRing::CheckTrxRecvPreCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckTrxRecvPreCheck(UbrTrx *trx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 166
    functionName: brpc::ubring::UBRing::UpdateDataQTail
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void UpdateDataQTail(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:171,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:174,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:175,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:178,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:179,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring.h:183,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 1
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::UBRing::UbrTrxCallbackCheck
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring.h
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbrTrxCallbackCheck(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:40,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - capacity
    - deal_msg_max_cnt
    argTypes:
    - uint32_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::GetUbrDealMsgMaxCnt(const uint32_t capacity,
      uint32_t *deal_msg_max_cnt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::ubring::UBRingManager::UbrMgrDefault
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrDefault()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRingManager::UbrMgrDefault
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:61,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:62,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:63,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:68,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:70,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:73,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:74,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:79,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:80,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 60
    functionDepth: 1
    functionLinenumber: 60
    functionLinenumberEnd: 82
    functionName: brpc::ubring::UBRingManager::UbrMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - brpc::ubring::UBRingManager::UbrMgrDefault
    - brpc::ubring::UBRingManager::UbrMgrFini
    - LOG
    - memset
    - brpc::ubring::UBRingManager::LinkInfoInit
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:86,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:87,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:88,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:91,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 96
    functionName: brpc::ubring::UBRingManager::UbrMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 5
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - brpc::ubring::UBRingManager::LinkInfoFini
    linkageType: ''
    returnType: void
    signature: void UBRingManager::UbrMgrFini()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:105,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:111,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:129,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 131
    functionName: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - memset
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::AcquireUbrTrxFromMgr(UbrTrx **trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:145,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:157,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 164
    functionName: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 20
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::ReleaseUbrTrxFromMgr(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:171,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:172,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:176,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:182,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:183,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 166
    functionDepth: 1
    functionLinenumber: 166
    functionLinenumberEnd: 184
    functionName: brpc::ubring::UBRingManager::LinkInfoInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 1
    functionsReached:
    - malloc
    - memset
    - brpc::ubring::UBRingManager::LinkInfoFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoInit(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:188,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:192,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:193,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 198
    functionName: brpc::ubring::UBRingManager::LinkInfoFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 2
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoFini(void)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:207,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:213,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:215,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - listener_name
    - trx
    argTypes:
    - char*
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UBRingManager::AcquireLinkInfoToMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - strncpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::AcquireLinkInfoToMgr(const char *listener_name,
      UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:229,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 234
    functionName: brpc::ubring::UBRingManager::ReleaseLinkInfoFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::ReleaseLinkInfoFromMgr(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:239,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:246,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:253,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:257,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:258,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - shm_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 236
    functionDepth: 3
    functionLinenumber: 236
    functionLinenumberEnd: 262
    functionName: brpc::ubring::UBRingManager::UbEventCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - strcmp
    linkageType: ''
    returnType: int32_t
    signature: int32_t UBRingManager::UbEventCallback(const char *shm_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:40,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - capacity
    - deal_msg_max_cnt
    argTypes:
    - uint32_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::GetUbrDealMsgMaxCnt(const uint32_t capacity,
      uint32_t *deal_msg_max_cnt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::ubring::UBRingManager::UbrMgrDefault
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrDefault()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRingManager::UbrMgrDefault
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:61,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:62,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:63,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:68,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:70,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:73,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:74,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:79,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:80,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 82
    functionName: brpc::ubring::UBRingManager::UbrMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - brpc::ubring::UBRingManager::UbrMgrDefault
    - brpc::ubring::UBRingManager::UbrMgrFini
    - LOG
    - memset
    - brpc::ubring::UBRingManager::LinkInfoInit
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:86,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:87,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:88,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:91,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 96
    functionName: brpc::ubring::UBRingManager::UbrMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 6
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - brpc::ubring::UBRingManager::LinkInfoFini
    linkageType: ''
    returnType: void
    signature: void UBRingManager::UbrMgrFini()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:105,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:111,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:129,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 131
    functionName: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - memset
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::AcquireUbrTrxFromMgr(UbrTrx **trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:145,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:157,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 164
    functionName: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 20
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::ReleaseUbrTrxFromMgr(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:171,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:172,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:176,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:182,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:183,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 166
    functionDepth: 2
    functionLinenumber: 166
    functionLinenumberEnd: 184
    functionName: brpc::ubring::UBRingManager::LinkInfoInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - memset
    - brpc::ubring::UBRingManager::LinkInfoFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoInit(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:188,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:192,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:193,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 198
    functionName: brpc::ubring::UBRingManager::LinkInfoFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 4
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoFini(void)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:207,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:213,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:215,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - listener_name
    - trx
    argTypes:
    - char*
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UBRingManager::AcquireLinkInfoToMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - strncpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::AcquireLinkInfoToMgr(const char *listener_name,
      UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:229,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 234
    functionName: brpc::ubring::UBRingManager::ReleaseLinkInfoFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::ReleaseLinkInfoFromMgr(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:239,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:246,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:253,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:257,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:258,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - shm_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 236
    functionDepth: 3
    functionLinenumber: 236
    functionLinenumberEnd: 262
    functionName: brpc::ubring::UBRingManager::UbEventCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - strcmp
    linkageType: ''
    returnType: int32_t
    signature: int32_t UBRingManager::UbEventCallback(const char *shm_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:40,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - capacity
    - deal_msg_max_cnt
    argTypes:
    - uint32_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::GetUbrDealMsgMaxCnt(const uint32_t capacity,
      uint32_t *deal_msg_max_cnt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::ubring::UBRingManager::UbrMgrDefault
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrDefault()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRingManager::UbrMgrDefault
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:61,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:62,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:63,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:68,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:70,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:73,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:74,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:79,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:80,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 82
    functionName: brpc::ubring::UBRingManager::UbrMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - brpc::ubring::UBRingManager::UbrMgrDefault
    - brpc::ubring::UBRingManager::UbrMgrFini
    - LOG
    - memset
    - brpc::ubring::UBRingManager::LinkInfoInit
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:86,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:87,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:88,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:91,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 96
    functionName: brpc::ubring::UBRingManager::UbrMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 7
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - brpc::ubring::UBRingManager::LinkInfoFini
    linkageType: ''
    returnType: void
    signature: void UBRingManager::UbrMgrFini()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:105,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:111,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:129,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 131
    functionName: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - memset
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::AcquireUbrTrxFromMgr(UbrTrx **trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:145,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:157,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 164
    functionName: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 20
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::ReleaseUbrTrxFromMgr(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:171,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:172,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:176,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:182,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:183,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 166
    functionDepth: 2
    functionLinenumber: 166
    functionLinenumberEnd: 184
    functionName: brpc::ubring::UBRingManager::LinkInfoInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 3
    functionsReached:
    - malloc
    - memset
    - brpc::ubring::UBRingManager::LinkInfoFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoInit(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:188,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:192,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:193,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 198
    functionName: brpc::ubring::UBRingManager::LinkInfoFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 6
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoFini(void)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:207,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:213,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:215,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - listener_name
    - trx
    argTypes:
    - char*
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UBRingManager::AcquireLinkInfoToMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - strncpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::AcquireLinkInfoToMgr(const char *listener_name,
      UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:229,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 234
    functionName: brpc::ubring::UBRingManager::ReleaseLinkInfoFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::ReleaseLinkInfoFromMgr(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:239,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:246,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:253,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:257,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:258,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - shm_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 236
    functionDepth: 3
    functionLinenumber: 236
    functionLinenumberEnd: 262
    functionName: brpc::ubring::UBRingManager::UbEventCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - strcmp
    linkageType: ''
    returnType: int32_t
    signature: int32_t UBRingManager::UbEventCallback(const char *shm_name)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:40,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:43,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:44,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - capacity
    - deal_msg_max_cnt
    argTypes:
    - uint32_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 38
    functionDepth: 1
    functionLinenumber: 38
    functionLinenumberEnd: 49
    functionName: brpc::ubring::UBRingManager::GetUbrDealMsgMaxCnt
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::GetUbrDealMsgMaxCnt(const uint32_t capacity,
      uint32_t *deal_msg_max_cnt)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 58
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 58
    functionName: brpc::ubring::UBRingManager::UbrMgrDefault
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrDefault()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBRingManager::UbrMgrDefault
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:61,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:62,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:63,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:68,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:70,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:71,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:73,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:74,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:78,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:79,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoInit
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:80,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 60
    functionDepth: 2
    functionLinenumber: 60
    functionLinenumberEnd: 82
    functionName: brpc::ubring::UBRingManager::UbrMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - brpc::ubring::UBRingManager::UbrMgrDefault
    - brpc::ubring::UBRingManager::UbrMgrFini
    - LOG
    - memset
    - brpc::ubring::UBRingManager::LinkInfoInit
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::UbrMgrInit()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:86,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:87,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:88,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:91,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:95,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 96
      start: 84
    functionDepth: 2
    functionLinenumber: 84
    functionLinenumberEnd: 96
    functionName: brpc::ubring::UBRingManager::UbrMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - brpc::ubring::UBRingManager::LinkInfoFini
    linkageType: ''
    returnType: void
    signature: void UBRingManager::UbrMgrFini()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:99,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:100,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:104,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:105,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:109,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:111,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:129,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 131
      start: 98
    functionDepth: 1
    functionLinenumber: 98
    functionLinenumberEnd: 131
    functionName: brpc::ubring::UBRingManager::AcquireUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - memset
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::AcquireUbrTrxFromMgr(UbrTrx **trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:134,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:135,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:144,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:145,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:157,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 26
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 164
      start: 133
    functionDepth: 1
    functionLinenumber: 133
    functionLinenumberEnd: 164
    functionName: brpc::ubring::UBRingManager::ReleaseUbrTrxFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 20
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UBRingManager::ReleaseUbrTrxFromMgr(UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:171,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:172,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:176,1
    - Dst: brpc::ubring::UBRingManager::LinkInfoFini
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:178,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:182,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:183,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 166
    functionDepth: 2
    functionLinenumber: 166
    functionLinenumberEnd: 184
    functionName: brpc::ubring::UBRingManager::LinkInfoInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - memset
    - brpc::ubring::UBRingManager::LinkInfoFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoInit(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:188,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:192,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:193,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:194,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 198
      start: 186
    functionDepth: 1
    functionLinenumber: 186
    functionLinenumberEnd: 198
    functionName: brpc::ubring::UBRingManager::LinkInfoFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 8
    functionsReached:
    - FREE_PTR
    - LOCK_GUARD
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::LinkInfoFini(void)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:202,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:207,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:213,1
    - Dst: strncpy
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:215,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 15
    argCount: 2
    argNames:
    - listener_name
    - trx
    argTypes:
    - char*
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 200
    functionDepth: 1
    functionLinenumber: 200
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UBRingManager::AcquireLinkInfoToMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - strncpy
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::AcquireLinkInfoToMgr(const char *listener_name,
      UbrTrx *trx)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:229,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 1
    argNames:
    - trx
    argTypes:
    - UbrTrx*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 234
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 234
    functionName: brpc::ubring::UBRingManager::ReleaseLinkInfoFromMgr
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UBRingManager::ReleaseLinkInfoFromMgr(UbrTrx *trx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:239,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:242,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:246,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:253,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:257,1
    - Dst: brpc::ubring::UBRing::UbrPassiveClearTrx
      Src: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp:258,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 21
    argCount: 1
    argNames:
    - shm_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 262
      start: 236
    functionDepth: 3
    functionLinenumber: 236
    functionLinenumberEnd: 262
    functionName: brpc::ubring::UBRingManager::UbEventCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_ring_manager.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UBRing::UbrPassiveClearTrx
    - LOG
    - strcmp
    linkageType: ''
    returnType: int32_t
    signature: int32_t UBRingManager::UbEventCallback(const char *shm_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:40,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:41,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:42,1
    - Dst: brpc::ubring::ShmMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 39
    functionDepth: 2
    functionLinenumber: 39
    functionLinenumberEnd: 44
    functionName: brpc::ubring::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::ShmMgrFini
    - store
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    - brpc::ubring::UBRingManager::UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:47,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 3
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::ubring::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - exit
    - brpc::ubring::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:52,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:57,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:58,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:59,1
    - Dst: TimerInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:62,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:63,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:64,1
    - Dst: brpc::ubring::ShmMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:67,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:68,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:69,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:73,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:75,1
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 51
    functionDepth: 4
    functionLinenumber: 51
    functionLinenumberEnd: 79
    functionName: brpc::ubring::GlobalUBInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::ExitWithError
    - PLOG
    - store
    - TimerInit
    - LOG
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - BAIDU_UNLIKELY
    - brpc::ubring::ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:86,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::ubring::IsUBAvailable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsUBAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::ubring::GlobalDisableUb
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void GlobalDisableUb()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 106
    functionName: brpc::ubring::SupportedByUB
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByUB(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:112,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: 117
      start: 108
    functionDepth: 5
    functionLinenumber: 108
    functionLinenumberEnd: 117
    functionName: brpc::ubring::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBShmEndpoint::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: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:40,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:41,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:42,1
    - Dst: brpc::ubring::ShmMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 39
    functionDepth: 2
    functionLinenumber: 39
    functionLinenumberEnd: 44
    functionName: brpc::ubring::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::ShmMgrFini
    - store
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    - brpc::ubring::UBRingManager::UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:47,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 3
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::ubring::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 1
    functionsReached:
    - exit
    - brpc::ubring::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:52,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:57,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:58,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:59,1
    - Dst: TimerInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:62,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:63,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:64,1
    - Dst: brpc::ubring::ShmMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:67,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:68,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:69,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:73,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:75,1
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 51
    functionDepth: 4
    functionLinenumber: 51
    functionLinenumberEnd: 79
    functionName: brpc::ubring::GlobalUBInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::ExitWithError
    - PLOG
    - store
    - TimerInit
    - LOG
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - BAIDU_UNLIKELY
    - brpc::ubring::ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:86,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::ubring::IsUBAvailable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsUBAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::ubring::GlobalDisableUb
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void GlobalDisableUb()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 106
    functionName: brpc::ubring::SupportedByUB
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByUB(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:112,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: 117
      start: 108
    functionDepth: 5
    functionLinenumber: 108
    functionLinenumberEnd: 117
    functionName: brpc::ubring::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBShmEndpoint::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: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:40,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:41,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:42,1
    - Dst: brpc::ubring::ShmMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 39
    functionDepth: 2
    functionLinenumber: 39
    functionLinenumberEnd: 44
    functionName: brpc::ubring::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::ShmMgrFini
    - store
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    - brpc::ubring::UBRingManager::UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:47,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 3
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::ubring::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - brpc::ubring::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:52,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:57,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:58,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:59,1
    - Dst: TimerInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:62,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:63,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:64,1
    - Dst: brpc::ubring::ShmMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:67,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:68,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:69,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:73,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:75,1
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 51
    functionDepth: 4
    functionLinenumber: 51
    functionLinenumberEnd: 79
    functionName: brpc::ubring::GlobalUBInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::ExitWithError
    - PLOG
    - store
    - TimerInit
    - LOG
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - BAIDU_UNLIKELY
    - brpc::ubring::ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:86,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::ubring::IsUBAvailable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsUBAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::ubring::GlobalDisableUb
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void GlobalDisableUb()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 106
    functionName: brpc::ubring::SupportedByUB
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByUB(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:112,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: 117
      start: 108
    functionDepth: 5
    functionLinenumber: 108
    functionLinenumberEnd: 117
    functionName: brpc::ubring::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBShmEndpoint::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: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:40,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:41,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:42,1
    - Dst: brpc::ubring::ShmMgrFini
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:43,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 39
    functionDepth: 2
    functionLinenumber: 39
    functionLinenumberEnd: 44
    functionName: brpc::ubring::GlobalRelease
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::ShmMgrFini
    - store
    - brpc::ubring::UBShmEndpoint::GlobalRelease
    - brpc::ubring::UBRingManager::UbrMgrFini
    linkageType: ''
    returnType: void
    signature: void GlobalRelease()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::GlobalRelease
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:47,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:48,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 3
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: brpc::ubring::ExitWithError
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 3
    functionsReached:
    - exit
    - brpc::ubring::GlobalRelease
    linkageType: ''
    returnType: void
    signature: void ExitWithError()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:52,1
    - Dst: brpc::ubring::UBRingManager::UbrMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:57,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:58,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:59,1
    - Dst: TimerInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:62,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:63,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:64,1
    - Dst: brpc::ubring::ShmMgrInit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:67,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:68,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:69,1
    - Dst: brpc::ubring::UBShmEndpoint::GlobalInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:73,1
    - Dst: brpc::ubring::ExitWithError
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:75,1
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:78,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 21
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 79
      start: 51
    functionDepth: 4
    functionLinenumber: 51
    functionLinenumberEnd: 79
    functionName: brpc::ubring::GlobalUBInitializeOrDieImpl
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::ExitWithError
    - PLOG
    - store
    - TimerInit
    - LOG
    - brpc::ubring::UBShmEndpoint::GlobalInitialize
    - BAIDU_UNLIKELY
    - brpc::ubring::ShmMgrInit
    - brpc::ubring::UBRingManager::UbrMgrInit
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDieImpl()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:84,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:86,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 83
    functionDepth: 1
    functionLinenumber: 83
    functionLinenumberEnd: 89
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:92,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    functionName: brpc::ubring::IsUBAvailable
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - load
    linkageType: ''
    returnType: bool
    signature: bool IsUBAvailable()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: exchange
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:97,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 99
      start: 95
    functionDepth: 1
    functionLinenumber: 95
    functionLinenumberEnd: 99
    functionName: brpc::ubring::GlobalDisableUb
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - exchange
    linkageType: ''
    returnType: void
    signature: void GlobalDisableUb()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: std::string::compare
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:102,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - protocol
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 101
    functionDepth: 0
    functionLinenumber: 101
    functionLinenumberEnd: 106
    functionName: brpc::ubring::SupportedByUB
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - std::string::compare
    linkageType: ''
    returnType: bool
    signature: bool SupportedByUB(std::string protocol)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UBShmEndpoint::PollingModeInitialize
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:112,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: 117
      start: 108
    functionDepth: 5
    functionLinenumber: 108
    functionLinenumberEnd: 117
    functionName: brpc::ubring::InitPollingModeWithTag
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UBShmEndpoint::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: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:130,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:130,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:130,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:130,1
    - Dst: exit
      Src: /src/brpc/src/brpc/ubshm/ub_helper.cpp:132,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 129
    functionDepth: 1
    functionLinenumber: 129
    functionLinenumberEnd: 133
    functionName: brpc::ubring::GlobalUBInitializeOrDie
    functionSourceFile: /src/brpc/src/brpc/ubshm/ub_helper.cpp
    functionUses: 2
    functionsReached:
    - exit
    - LOG
    linkageType: ''
    returnType: void
    signature: void GlobalUBInitializeOrDie()
  - 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: LIKELY
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 250
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LIKELY(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 29
      start: 28
    functionDepth: 0
    functionLinenumber: 28
    functionLinenumberEnd: 29
    functionName: UNLIKELY
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 241
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UNLIKELY(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - x
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 32
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 32
    functionName: UNREFERENCE_PARAM
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UNREFERENCE_PARAM(x)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 51
      start: 50
    functionDepth: 0
    functionLinenumber: 50
    functionLinenumberEnd: 51
    functionName: ATOMIC_INIT
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_INIT(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 52
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 52
    functionName: ATOMIC_STORE
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_STORE(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - var
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 53
    functionName: ATOMIC_LOAD
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_LOAD(var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 53
    functionDepth: 0
    functionLinenumber: 53
    functionLinenumberEnd: 54
    functionName: ATOMIC_ADD
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_ADD(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 55
      start: 54
    functionDepth: 0
    functionLinenumber: 54
    functionLinenumberEnd: 55
    functionName: ATOMIC_SUB
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_SUB(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - var
    - ','
    - expected
    - ','
    - desired
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 57
    functionName: ATOMIC_COMPARE_EXCHANGE_STRONG
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_COMPARE_EXCHANGE_STRONG(var, expected, desired)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 64
      start: 63
    functionDepth: 0
    functionLinenumber: 63
    functionLinenumberEnd: 64
    functionName: ATOMIC_INIT
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_INIT(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 64
    functionDepth: 0
    functionLinenumber: 64
    functionLinenumberEnd: 65
    functionName: ATOMIC_STORE
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_STORE(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - var
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 66
    functionName: ATOMIC_LOAD
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_LOAD(var)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 66
    functionDepth: 0
    functionLinenumber: 66
    functionLinenumberEnd: 67
    functionName: ATOMIC_ADD
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_ADD(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 5
    argNames:
    - (
    - var
    - ','
    - value
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 68
    functionName: ATOMIC_SUB
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_SUB(var, value)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - var
    - ','
    - expected
    - ','
    - desired
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 70
    functionName: ATOMIC_COMPARE_EXCHANGE_STRONG
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ATOMIC_COMPARE_EXCHANGE_STRONG(var, expected, desired)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 72
    functionDepth: 0
    functionLinenumber: 72
    functionLinenumberEnd: 73
    functionName: ISB
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: ISB()
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 2
    argNames:
    - (
    - )
    argTypes:
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 74
    functionName: DSB
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: DSB()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/common/common.h:112,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - dst
    - src
    argTypes:
    - int8_t*
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 92
    functionDepth: 0
    functionLinenumber: 92
    functionLinenumberEnd: 115
    functionName: Copy64Byte
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 8
    functionsReached:
    - memcpy
    linkageType: ''
    returnType: int
    signature: int Copy64Byte(int8_t *dst, int8_t *src)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: clock_gettime
      Src: /src/brpc/src/brpc/ubshm/common/common.h:126,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 129
      start: 124
    functionDepth: 1
    functionLinenumber: 124
    functionLinenumberEnd: 129
    functionName: GetCurNanoSeconds
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 16
    functionsReached:
    - clock_gettime
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t GetCurNanoSeconds(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 138
      start: 131
    functionDepth: 0
    functionLinenumber: 131
    functionLinenumberEnd: 138
    functionName: FREE_PTR
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: FREE_PTR(ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - addr
    argTypes:
    - uint8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 171
      start: 169
    functionDepth: 0
    functionLinenumber: 169
    functionLinenumberEnd: 171
    functionName: Aligned64Offset
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 8
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t Aligned64Offset(uint8_t *addr)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: GetCurNanoSeconds
      Src: /src/brpc/src/brpc/ubshm/common/common.h:175,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/common/common.h:176,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - start_time
    - timeout
    argTypes:
    - uint64_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 180
      start: 173
    functionDepth: 2
    functionLinenumber: 173
    functionLinenumberEnd: 180
    functionName: HasTimedOut
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/common.h
    functionUses: 8
    functionsReached:
    - LOG
    - GetCurNanoSeconds
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE HasTimedOut(const uint64_t start_time, const uint32_t timeout)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/common/thread_lock.h:33,1
    - Dst: pthread_mutex_unlock
      Src: /src/brpc/src/brpc/ubshm/common/thread_lock.h:34,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/common/thread_lock.h:36,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - mtx
    argTypes:
    - pthread_mutex_t**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 38
      start: 31
    functionDepth: 5
    functionLinenumber: 31
    functionLinenumberEnd: 38
    functionName: UnlockMutex
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/thread_lock.h
    functionUses: 0
    functionsReached:
    - pthread_mutex_unlock
    - LIKELY
    - LOG
    linkageType: ''
    returnType: void
    signature: void UnlockMutex(pthread_mutex_t **mtx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 3
    argNames:
    - (
    - mtx_ptr
    - )
    argTypes:
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 45
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 45
    functionName: LOCK_GUARD
    functionSourceFile: /src/brpc/src/brpc/ubshm/common/thread_lock.h
    functionUses: 16
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: LOCK_GUARD(mtx_ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ubsm_shmem_opts
    argTypes:
    - ubsmem_options_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 34
      start: 31
    functionDepth: 0
    functionLinenumber: 31
    functionLinenumberEnd: 34
    functionName: ubsmem_init_attributes
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_init_attributes(ubsmem_options_t *ubsm_shmem_opts)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ubsm_shmem_opts
    argTypes:
    - ubsmem_options_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 36
    functionDepth: 0
    functionLinenumber: 36
    functionLinenumberEnd: 39
    functionName: ubsmem_initialize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_initialize(const ubsmem_options_t *ubsm_shmem_opts)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 44
      start: 41
    functionDepth: 0
    functionLinenumber: 41
    functionLinenumberEnd: 44
    functionName: ubsmem_finalize
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_finalize(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - level
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 49
    functionName: ubsmem_set_logger_level
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_set_logger_level(int level)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 54
      start: 51
    functionDepth: 0
    functionLinenumber: 51
    functionLinenumberEnd: 54
    functionName: ubsmem_set_extern_logger
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_set_extern_logger(void (*func)(int level, const char *msg))
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 1
    argNames:
    - regions
    argTypes:
    - ubsmem_regions_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 65
      start: 56
    functionDepth: 0
    functionLinenumber: 56
    functionLinenumberEnd: 65
    functionName: ubsmem_lookup_regions
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_lookup_regions(ubsmem_regions_t* regions)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - region_name
    - size
    - reg_attr
    argTypes:
    - char*
    - size_t
    - ubsmem_region_attributes_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 70
      start: 67
    functionDepth: 0
    functionLinenumber: 67
    functionLinenumberEnd: 70
    functionName: ubsmem_create_region
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_create_region(const char *region_name, size_t size, const
      ubsmem_region_attributes_t *reg_attr)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - region_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 76
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 76
    functionName: ubsmem_destroy_region
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_destroy_region(const char *region_name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 5
    argNames:
    - region_name
    - name
    - size
    - mode
    - flags
    argTypes:
    - char*
    - char*
    - size_t
    - mode_t
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 81
      start: 78
    functionDepth: 0
    functionLinenumber: 78
    functionLinenumberEnd: 81
    functionName: ubsmem_shmem_allocate
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_shmem_allocate(const char *region_name, const char *name,
      size_t size, mode_t mode, uint64_t flags)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 86
      start: 83
    functionDepth: 0
    functionLinenumber: 83
    functionLinenumberEnd: 86
    functionName: ubsmem_shmem_deallocate
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_shmem_deallocate(const char *name)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 7
    argNames:
    - addr
    - length
    - prot
    - flags
    - name
    - offset
    - local_ptr
    argTypes:
    - void*
    - size_t
    - int
    - int
    - char*
    - off_t
    - void**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 88
    functionDepth: 0
    functionLinenumber: 88
    functionLinenumberEnd: 92
    functionName: ubsmem_shmem_map
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: "int ubsmem_shmem_map(void *addr, size_t length, int prot, int flags,
      const char *name, off_t offset,\n    void **local_ptr)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - local_ptr
    - length
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 97
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 97
    functionName: ubsmem_shmem_unmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_shmem_unmap(void *local_ptr, size_t length)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - register_func
    argTypes:
    - shmem_faults_func
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 102
      start: 99
    functionDepth: 0
    functionLinenumber: 99
    functionLinenumberEnd: 102
    functionName: ubsmem_shmem_faults_register
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_shmem_faults_register(shmem_faults_func register_func)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - nid
    argTypes:
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 108
      start: 104
    functionDepth: 0
    functionLinenumber: 104
    functionLinenumberEnd: 108
    functionName: ubsmem_local_nid_query
    functionSourceFile: /src/brpc/src/brpc/ubshm/ubs_mem/ubshmem_stub.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: int
    signature: int ubsmem_local_nid_query(uint32_t *nid)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:76,1
    - Dst: ftruncate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:82,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:83,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:84,1
    - Dst: brpc::ubring::ReserveIpcShm
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:88,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:89,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:90,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:96,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:98,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:99,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:103,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 105
    functionName: brpc::ubring::IpcShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - close
    - brpc::ubring::ReserveIpcShm
    - shm_open
    - LOG
    - ftruncate
    - shm_unlink
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:110,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 123
    functionName: brpc::ubring::IpcShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmMunmap(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:128,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:131,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:135,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:139,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 143
    functionName: brpc::ubring::IpcShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:148,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:154,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:159,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:166,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 176
    functionName: brpc::ubring::IpcShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalFree(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:182,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:186,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:187,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:193,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:195,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 178
    functionDepth: 2
    functionLinenumber: 178
    functionLinenumberEnd: 201
    functionName: brpc::ubring::IpcShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:207,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:211,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:212,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:218,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:220,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:225,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 227
    functionName: brpc::ubring::IpcShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMmap(SHM *shm, int prot)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:232,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 245
    functionName: brpc::ubring::IpcShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 1
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 1
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:76,1
    - Dst: ftruncate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:82,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:83,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:84,1
    - Dst: brpc::ubring::ReserveIpcShm
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:88,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:89,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:90,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:96,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:98,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:99,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:103,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 105
    functionName: brpc::ubring::IpcShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - close
    - brpc::ubring::ReserveIpcShm
    - shm_open
    - LOG
    - ftruncate
    - shm_unlink
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:110,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 123
    functionName: brpc::ubring::IpcShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmMunmap(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:128,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:131,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:135,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:139,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 143
    functionName: brpc::ubring::IpcShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:148,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:154,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:159,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:166,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 176
    functionName: brpc::ubring::IpcShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalFree(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:182,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:186,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:187,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:193,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:195,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 178
    functionDepth: 2
    functionLinenumber: 178
    functionLinenumberEnd: 201
    functionName: brpc::ubring::IpcShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:207,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:211,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:212,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:218,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:220,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:225,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 227
    functionName: brpc::ubring::IpcShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMmap(SHM *shm, int prot)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:232,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 245
    functionName: brpc::ubring::IpcShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 2
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 2
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 4
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:76,1
    - Dst: ftruncate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:82,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:83,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:84,1
    - Dst: brpc::ubring::ReserveIpcShm
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:88,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:89,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:90,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:96,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:98,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:99,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:103,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 105
    functionName: brpc::ubring::IpcShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - close
    - brpc::ubring::ReserveIpcShm
    - shm_open
    - LOG
    - ftruncate
    - shm_unlink
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:110,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 123
    functionName: brpc::ubring::IpcShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmMunmap(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:128,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:131,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:135,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:139,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 143
    functionName: brpc::ubring::IpcShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:148,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:154,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:159,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:166,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 176
    functionName: brpc::ubring::IpcShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalFree(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:182,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:186,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:187,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:193,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:195,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 178
    functionDepth: 2
    functionLinenumber: 178
    functionLinenumberEnd: 201
    functionName: brpc::ubring::IpcShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:207,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:211,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:212,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:218,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:220,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:225,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 227
    functionName: brpc::ubring::IpcShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMmap(SHM *shm, int prot)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:232,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 245
    functionName: brpc::ubring::IpcShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 3
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 6
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: posix_fallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:37,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:39,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:44,1
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:45,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 48
      start: 34
    functionDepth: 1
    functionLinenumber: 34
    functionLinenumberEnd: 48
    functionName: brpc::ubring::ReserveIpcShm
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 3
    functionsReached:
    - UNREFERENCE_PARAM
    - posix_fallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ReserveIpcShm(int fd, const SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: fstat
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:53,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:54,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:58,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - fd
    - shm
    argTypes:
    - int
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 63
      start: 50
    functionDepth: 1
    functionLinenumber: 50
    functionLinenumberEnd: 63
    functionName: brpc::ubring::CheckIpcShmSize
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 6
    functionsReached:
    - LOG
    - fstat
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CheckIpcShmSize(int fd, const SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:69,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:72,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:76,1
    - Dst: ftruncate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:80,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:82,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:83,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:84,1
    - Dst: brpc::ubring::ReserveIpcShm
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:88,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:89,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:90,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:96,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:98,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:99,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:103,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 30
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 105
      start: 67
    functionDepth: 2
    functionLinenumber: 67
    functionLinenumberEnd: 105
    functionName: brpc::ubring::IpcShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - close
    - brpc::ubring::ReserveIpcShm
    - shm_open
    - LOG
    - ftruncate
    - shm_unlink
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:110,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:114,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:116,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:121,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 123
      start: 107
    functionDepth: 1
    functionLinenumber: 107
    functionLinenumberEnd: 123
    functionName: brpc::ubring::IpcShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmMunmap(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:128,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:131,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:135,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:139,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 143
      start: 125
    functionDepth: 1
    functionLinenumber: 125
    functionLinenumberEnd: 143
    functionName: brpc::ubring::IpcShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:148,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:152,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:154,1
    - Dst: shm_unlink
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:159,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:162,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:166,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:170,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:174,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 176
      start: 145
    functionDepth: 1
    functionLinenumber: 145
    functionLinenumberEnd: 176
    functionName: brpc::ubring::IpcShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - shm_unlink
    - LOG_EVERY_SECOND
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalFree(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:182,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:186,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:187,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:191,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:193,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:195,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:199,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 201
      start: 178
    functionDepth: 2
    functionLinenumber: 178
    functionLinenumberEnd: 201
    functionName: brpc::ubring::IpcShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: shm_open
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:207,1
    - Dst: brpc::ubring::CheckIpcShmSize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:211,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:212,1
    - Dst: mmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:218,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:220,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:224,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:225,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 19
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 227
      start: 203
    functionDepth: 2
    functionLinenumber: 203
    functionLinenumberEnd: 227
    functionName: brpc::ubring::IpcShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - mmap
    - shm_open
    - LOG
    - close
    - brpc::ubring::CheckIpcShmSize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmLocalMmap(SHM *shm, int prot)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:232,1
    - Dst: munmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:238,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp:243,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 245
      start: 229
    functionDepth: 1
    functionLinenumber: 229
    functionLinenumberEnd: 245
    functionName: brpc::ubring::IpcShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ipc.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - munmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IpcShmRemoteFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:35,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 57
    functionName: brpc::ubring::CheckInputShmParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - strlen
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckInputShmParam(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:61,1
    - Dst: brpc::ubring::UbsShmInit
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:72,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 74
    functionName: brpc::ubring::ShmMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UbsShmInit
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMgrInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmFini
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:83,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 84
    functionName: brpc::ubring::ShmMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UbsShmFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void ShmMgrFini(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - SHM_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: brpc::ubring::SetShmType
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetShmType(SHM_TYPE type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:92,1
    - Dst: brpc::ubring::IpcShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:99,1
    - Dst: brpc::ubring::UbsShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:106,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 90
    functionDepth: 3
    functionLinenumber: 90
    functionLinenumberEnd: 109
    functionName: brpc::ubring::ShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmLocalMalloc
    - brpc::ubring::UbsShmLocalMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::ShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:112,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:114,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:118,1
    - Dst: brpc::ubring::ShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:119,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 4
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::ubring::ShmLocalCalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - memset
    - brpc::ubring::ShmLocalMalloc
    - brpc::ubring::ShmFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalCalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:128,1
    - Dst: brpc::ubring::IpcShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:135,1
    - Dst: brpc::ubring::UbsShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 145
    functionName: brpc::ubring::ShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalFree
    - brpc::ubring::IpcShmLocalFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:149,1
    - Dst: brpc::ubring::IpcShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:156,1
    - Dst: brpc::ubring::UbsShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:163,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 147
    functionDepth: 3
    functionLinenumber: 147
    functionLinenumberEnd: 166
    functionName: brpc::ubring::ShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmRemoteMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    - brpc::ubring::UbsShmRemoteMalloc
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteMalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:170,1
    - Dst: brpc::ubring::IpcShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:177,1
    - Dst: brpc::ubring::UbsShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 2
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::ShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UbsShmRemoteFree
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::IpcShmRemoteFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:191,1
    - Dst: brpc::ubring::IpcShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:198,1
    - Dst: brpc::ubring::UbsShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:205,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 189
    functionDepth: 3
    functionLinenumber: 189
    functionLinenumberEnd: 208
    functionName: brpc::ubring::ShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalMmap
    - UNLIKELY
    - brpc::ubring::IpcShmLocalMmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMmap(SHM *shm, int prot)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:212,1
    - Dst: brpc::ubring::IpcShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:219,1
    - Dst: brpc::ubring::UbsShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:226,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 229
    functionName: brpc::ubring::ShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::IpcShmMunmap
    - brpc::ubring::UbsShmMunmap
    - LOG
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:233,1
    - Dst: brpc::ubring::IpcShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:240,1
    - Dst: brpc::ubring::UbsShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:247,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 250
    functionName: brpc::ubring::ShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 1
    functionsReached:
    - brpc::ubring::UbsShmFree
    - LOG
    - brpc::ubring::IpcShmFree
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:35,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 57
    functionName: brpc::ubring::CheckInputShmParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 7
    functionsReached:
    - strlen
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckInputShmParam(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:61,1
    - Dst: brpc::ubring::UbsShmInit
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:72,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 74
    functionName: brpc::ubring::ShmMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UbsShmInit
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMgrInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmFini
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:83,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 84
    functionName: brpc::ubring::ShmMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UbsShmFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void ShmMgrFini(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - SHM_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: brpc::ubring::SetShmType
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetShmType(SHM_TYPE type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:92,1
    - Dst: brpc::ubring::IpcShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:99,1
    - Dst: brpc::ubring::UbsShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:106,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 90
    functionDepth: 3
    functionLinenumber: 90
    functionLinenumberEnd: 109
    functionName: brpc::ubring::ShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmLocalMalloc
    - brpc::ubring::UbsShmLocalMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::ShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:112,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:114,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:118,1
    - Dst: brpc::ubring::ShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:119,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 4
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::ubring::ShmLocalCalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - memset
    - brpc::ubring::ShmLocalMalloc
    - brpc::ubring::ShmFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalCalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:128,1
    - Dst: brpc::ubring::IpcShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:135,1
    - Dst: brpc::ubring::UbsShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 145
    functionName: brpc::ubring::ShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalFree
    - brpc::ubring::IpcShmLocalFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:149,1
    - Dst: brpc::ubring::IpcShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:156,1
    - Dst: brpc::ubring::UbsShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:163,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 147
    functionDepth: 3
    functionLinenumber: 147
    functionLinenumberEnd: 166
    functionName: brpc::ubring::ShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmRemoteMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    - brpc::ubring::UbsShmRemoteMalloc
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteMalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:170,1
    - Dst: brpc::ubring::IpcShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:177,1
    - Dst: brpc::ubring::UbsShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 2
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::ShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UbsShmRemoteFree
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::IpcShmRemoteFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:191,1
    - Dst: brpc::ubring::IpcShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:198,1
    - Dst: brpc::ubring::UbsShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:205,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 189
    functionDepth: 3
    functionLinenumber: 189
    functionLinenumberEnd: 208
    functionName: brpc::ubring::ShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalMmap
    - UNLIKELY
    - brpc::ubring::IpcShmLocalMmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMmap(SHM *shm, int prot)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:212,1
    - Dst: brpc::ubring::IpcShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:219,1
    - Dst: brpc::ubring::UbsShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:226,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 229
    functionName: brpc::ubring::ShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::IpcShmMunmap
    - brpc::ubring::UbsShmMunmap
    - LOG
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:233,1
    - Dst: brpc::ubring::IpcShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:240,1
    - Dst: brpc::ubring::UbsShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:247,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 250
    functionName: brpc::ubring::ShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 2
    functionsReached:
    - brpc::ubring::UbsShmFree
    - LOG
    - brpc::ubring::IpcShmFree
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:35,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 57
    functionName: brpc::ubring::CheckInputShmParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 14
    functionsReached:
    - strlen
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckInputShmParam(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:61,1
    - Dst: brpc::ubring::UbsShmInit
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:72,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 74
    functionName: brpc::ubring::ShmMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UbsShmInit
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMgrInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmFini
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:83,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 84
    functionName: brpc::ubring::ShmMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UbsShmFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void ShmMgrFini(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - SHM_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: brpc::ubring::SetShmType
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetShmType(SHM_TYPE type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:92,1
    - Dst: brpc::ubring::IpcShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:99,1
    - Dst: brpc::ubring::UbsShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:106,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 90
    functionDepth: 3
    functionLinenumber: 90
    functionLinenumberEnd: 109
    functionName: brpc::ubring::ShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmLocalMalloc
    - brpc::ubring::UbsShmLocalMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::ShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:112,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:114,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:118,1
    - Dst: brpc::ubring::ShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:119,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 4
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::ubring::ShmLocalCalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - memset
    - brpc::ubring::ShmLocalMalloc
    - brpc::ubring::ShmFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalCalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:128,1
    - Dst: brpc::ubring::IpcShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:135,1
    - Dst: brpc::ubring::UbsShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 145
    functionName: brpc::ubring::ShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalFree
    - brpc::ubring::IpcShmLocalFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:149,1
    - Dst: brpc::ubring::IpcShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:156,1
    - Dst: brpc::ubring::UbsShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:163,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 147
    functionDepth: 3
    functionLinenumber: 147
    functionLinenumberEnd: 166
    functionName: brpc::ubring::ShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmRemoteMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    - brpc::ubring::UbsShmRemoteMalloc
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteMalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:170,1
    - Dst: brpc::ubring::IpcShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:177,1
    - Dst: brpc::ubring::UbsShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 2
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::ShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UbsShmRemoteFree
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::IpcShmRemoteFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:191,1
    - Dst: brpc::ubring::IpcShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:198,1
    - Dst: brpc::ubring::UbsShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:205,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 189
    functionDepth: 3
    functionLinenumber: 189
    functionLinenumberEnd: 208
    functionName: brpc::ubring::ShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalMmap
    - UNLIKELY
    - brpc::ubring::IpcShmLocalMmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMmap(SHM *shm, int prot)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:212,1
    - Dst: brpc::ubring::IpcShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:219,1
    - Dst: brpc::ubring::UbsShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:226,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 229
    functionName: brpc::ubring::ShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::IpcShmMunmap
    - brpc::ubring::UbsShmMunmap
    - LOG
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:233,1
    - Dst: brpc::ubring::IpcShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:240,1
    - Dst: brpc::ubring::UbsShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:247,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 250
    functionName: brpc::ubring::ShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 3
    functionsReached:
    - brpc::ubring::UbsShmFree
    - LOG
    - brpc::ubring::IpcShmFree
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:35,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:39,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:41,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:47,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:52,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 57
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 57
    functionName: brpc::ubring::CheckInputShmParam
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 21
    functionsReached:
    - strlen
    - LOG
    linkageType: ''
    returnType: bool
    signature: bool CheckInputShmParam(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:60,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:61,1
    - Dst: brpc::ubring::UbsShmInit
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:67,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:68,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:72,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 74
      start: 59
    functionDepth: 1
    functionLinenumber: 59
    functionLinenumberEnd: 74
    functionName: brpc::ubring::ShmMgrInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - UNLIKELY
    - brpc::ubring::UbsShmInit
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMgrInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmFini
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:78,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:79,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:83,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 76
    functionDepth: 1
    functionLinenumber: 76
    functionLinenumberEnd: 84
    functionName: brpc::ubring::ShmMgrFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UbsShmFini
    - LOG
    linkageType: ''
    returnType: void
    signature: void ShmMgrFini(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - SHM_TYPE
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 88
      start: 86
    functionDepth: 0
    functionLinenumber: 86
    functionLinenumberEnd: 88
    functionName: brpc::ubring::SetShmType
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void SetShmType(SHM_TYPE type)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:91,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:92,1
    - Dst: brpc::ubring::IpcShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:99,1
    - Dst: brpc::ubring::UbsShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:106,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 109
      start: 90
    functionDepth: 3
    functionLinenumber: 90
    functionLinenumberEnd: 109
    functionName: brpc::ubring::ShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmLocalMalloc
    - brpc::ubring::UbsShmLocalMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMalloc(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::ShmLocalMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:112,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:113,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:114,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:118,1
    - Dst: brpc::ubring::ShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:119,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:122,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 124
      start: 111
    functionDepth: 4
    functionLinenumber: 111
    functionLinenumberEnd: 124
    functionName: brpc::ubring::ShmLocalCalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - memset
    - brpc::ubring::ShmLocalMalloc
    - brpc::ubring::ShmFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalCalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:127,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:128,1
    - Dst: brpc::ubring::IpcShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:135,1
    - Dst: brpc::ubring::UbsShmLocalFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:138,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:142,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 145
      start: 126
    functionDepth: 2
    functionLinenumber: 126
    functionLinenumberEnd: 145
    functionName: brpc::ubring::ShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalFree
    - brpc::ubring::IpcShmLocalFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:148,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:149,1
    - Dst: brpc::ubring::IpcShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:156,1
    - Dst: brpc::ubring::UbsShmRemoteMalloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:159,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:163,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 166
      start: 147
    functionDepth: 3
    functionLinenumber: 147
    functionLinenumberEnd: 166
    functionName: brpc::ubring::ShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::IpcShmRemoteMalloc
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    - brpc::ubring::UbsShmRemoteMalloc
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteMalloc(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:170,1
    - Dst: brpc::ubring::IpcShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:177,1
    - Dst: brpc::ubring::UbsShmRemoteFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:180,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:184,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 187
      start: 168
    functionDepth: 2
    functionLinenumber: 168
    functionLinenumberEnd: 187
    functionName: brpc::ubring::ShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::UbsShmRemoteFree
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::IpcShmRemoteFree
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmRemoteFree(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:190,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:191,1
    - Dst: brpc::ubring::IpcShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:198,1
    - Dst: brpc::ubring::UbsShmLocalMmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:205,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 208
      start: 189
    functionDepth: 3
    functionLinenumber: 189
    functionLinenumberEnd: 208
    functionName: brpc::ubring::ShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - brpc::ubring::CheckInputShmParam
    - brpc::ubring::UbsShmLocalMmap
    - UNLIKELY
    - brpc::ubring::IpcShmLocalMmap
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmLocalMmap(SHM *shm, int prot)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:212,1
    - Dst: brpc::ubring::IpcShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:219,1
    - Dst: brpc::ubring::UbsShmMunmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:222,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:226,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 229
      start: 210
    functionDepth: 2
    functionLinenumber: 210
    functionLinenumberEnd: 229
    functionName: brpc::ubring::ShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 0
    functionsReached:
    - brpc::ubring::IpcShmMunmap
    - brpc::ubring::UbsShmMunmap
    - LOG
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: brpc::ubring::CheckInputShmParam
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:232,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:233,1
    - Dst: brpc::ubring::IpcShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:240,1
    - Dst: brpc::ubring::UbsShmFree
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:243,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp:247,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 250
      start: 231
    functionDepth: 2
    functionLinenumber: 231
    functionLinenumberEnd: 250
    functionName: brpc::ubring::ShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_mgr.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::UbsShmFree
    - LOG
    - brpc::ubring::IpcShmFree
    - brpc::ubring::CheckInputShmParam
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ShmFree(SHM *shm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlmopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:59,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlclose
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 90
    functionName: brpc::ubring::UbsShmInterfacesLoad
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - dlclose
    - dlerror
    - dlmopen
    - dlopen
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInterfacesLoad(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: UBRING_MK_UBSM_OPTIONAL
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM_OPTIONAL(ret, fn, args)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 84
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:97,1
    - Dst: ubsmem_lookup_regions
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:104,1
    - Dst: strcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:110,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:111,1
    - Dst: ubsmem_create_region
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:120,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - region_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 125
    functionName: brpc::ubring::CreateUbsShmRegion
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - strcmp
    - strcpy
    - ubsmem_create_region
    - LOG
    - ubsmem_lookup_regions
    - snprintf
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CreateUbsShmRegion(const char *region_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: brpc::ubring::AquireFlagIfWrDelayComp
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t AquireFlagIfWrDelayComp(const uint64_t flag)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:137,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:138,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:145,1
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:146,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:153,1
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:158,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:160,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:170,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 172
    functionName: brpc::ubring::UbsShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_allocate
    - LOG
    - brpc::ubring::AquireFlagIfWrDelayComp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:178,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:185,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:193,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 174
    functionDepth: 1
    functionLinenumber: 174
    functionLinenumberEnd: 195
    functionName: brpc::ubring::UbsShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:200,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:218,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UbsShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:226,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:233,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:237,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:241,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 222
    functionDepth: 1
    functionLinenumber: 222
    functionLinenumberEnd: 253
    functionName: brpc::ubring::UbsShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 265
    functionName: brpc::ubring::UbsShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteMalloc(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 277
    functionName: brpc::ubring::UbsShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMmap(SHM *shm, int prot)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:283,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:290,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:298,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 279
    functionDepth: 1
    functionLinenumber: 279
    functionLinenumberEnd: 300
    functionName: brpc::ubring::UbsShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteFree(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - level
    - msg
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UbsMemLoggerPrint
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UbsMemLoggerPrint(int level, const char *msg)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmInterfacesLoad
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:319,1
    - Dst: gethostname
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:324,1
    - Dst: ubsmem_set_extern_logger
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:330,1
    - Dst: ubsmem_set_logger_level
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:336,1
    - Dst: ubsmem_init_attributes
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:341,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:343,1
    - Dst: ubsmem_initialize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:349,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: ubsmem_local_nid_query
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:354,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: ubsmem_shmem_faults_register
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:359,1
    - Dst: brpc::ubring::CreateUbsShmRegion
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:363,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:364,1
    - Dst: brpc::ubring::InitShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:373,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 314
    functionDepth: 2
    functionLinenumber: 314
    functionLinenumberEnd: 375
    functionName: brpc::ubring::UbsShmInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_local_nid_query
    - ubsmem_set_logger_level
    - LOG
    - brpc::ubring::CreateUbsShmRegion
    - ubsmem_set_extern_logger
    - ubsmem_initialize
    - ubsmem_shmem_faults_register
    - ubsmem_init_attributes
    - brpc::ubring::UbsShmInterfacesLoad
    - UNLIKELY
    - gethostname
    - brpc::ubring::InitShmTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_finalize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:379,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:381,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: brpc::ubring::DestroyShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:386,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 377
    functionDepth: 1
    functionLinenumber: 377
    functionLinenumberEnd: 392
    functionName: brpc::ubring::UbsShmFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::DestroyShmTimer
    - LOG
    - UNLIKELY
    - ubsmem_finalize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFini(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:407,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 410
    functionName: brpc::ubring::DeleteShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - FREE_PTR
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeleteShmToList(ShmList* shm_list)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:416,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:424,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:436,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:438,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:440,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:441,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:444,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:445,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 412
    functionDepth: 2
    functionLinenumber: 412
    functionLinenumberEnd: 449
    functionName: brpc::ubring::UbsShmCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::DeleteShmToList
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - LOCK_GUARD
    linkageType: ''
    returnType: void
    signature: void *UbsShmCallback(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:458,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:459,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 466
    functionName: brpc::ubring::UbsShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmAddTimer(ShmList *shm_list)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:472,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:480,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:481,1
    - Dst: brpc::ubring::UbsShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:486,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 468
    functionDepth: 2
    functionLinenumber: 468
    functionLinenumberEnd: 491
    functionName: brpc::ubring::InitShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - malloc
    - FREE_PTR
    - pthread_mutex_init
    - LOG
    - brpc::ubring::UbsShmAddTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE InitShmTimer(ShmList **shm_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:497,1
    - Dst: free
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:505,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:508,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:509,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 493
    functionDepth: 2
    functionLinenumber: 493
    functionLinenumberEnd: 511
    functionName: brpc::ubring::DestroyShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - FREE_PTR
    - free
    - LOG
    - DeleteTimerSafe
    - pthread_mutex_destroy
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE DestroyShmTimer(ShmList *shm_list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:516,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:519,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:523,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 513
    functionDepth: 1
    functionLinenumber: 513
    functionLinenumberEnd: 529
    functionName: brpc::ubring::IsExistInShmList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    - strcmp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IsExistInShmList(ShmList *shm_list, const SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:534,1
    - Dst: brpc::ubring::IsExistInShmList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:539,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:545,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:549,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:550,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:561,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 531
    functionDepth: 2
    functionLinenumber: 531
    functionLinenumberEnd: 563
    functionName: brpc::ubring::AddShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - malloc
    - memcpy
    - LOG
    - brpc::ubring::IsExistInShmList
    - LOCK_GUARD
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE AddShmToList(ShmList *shm_list, SHM *shm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlmopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:59,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlclose
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 90
    functionName: brpc::ubring::UbsShmInterfacesLoad
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - LOG
    - dlclose
    - dlerror
    - dlmopen
    - dlopen
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInterfacesLoad(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: UBRING_MK_UBSM_OPTIONAL
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM_OPTIONAL(ret, fn, args)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 84
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:97,1
    - Dst: ubsmem_lookup_regions
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:104,1
    - Dst: strcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:110,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:111,1
    - Dst: ubsmem_create_region
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:120,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - region_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 125
    functionName: brpc::ubring::CreateUbsShmRegion
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - strcmp
    - strcpy
    - ubsmem_create_region
    - LOG
    - ubsmem_lookup_regions
    - snprintf
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CreateUbsShmRegion(const char *region_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: brpc::ubring::AquireFlagIfWrDelayComp
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t AquireFlagIfWrDelayComp(const uint64_t flag)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:137,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:138,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:145,1
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:146,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:153,1
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:158,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:160,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:170,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 172
    functionName: brpc::ubring::UbsShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_allocate
    - LOG
    - brpc::ubring::AquireFlagIfWrDelayComp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:178,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:185,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:193,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 174
    functionDepth: 3
    functionLinenumber: 174
    functionLinenumberEnd: 195
    functionName: brpc::ubring::UbsShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:200,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:218,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UbsShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:226,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:233,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:237,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:241,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 253
    functionName: brpc::ubring::UbsShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 265
    functionName: brpc::ubring::UbsShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteMalloc(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 277
    functionName: brpc::ubring::UbsShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMmap(SHM *shm, int prot)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:283,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:290,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:298,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 279
    functionDepth: 3
    functionLinenumber: 279
    functionLinenumberEnd: 300
    functionName: brpc::ubring::UbsShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteFree(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - level
    - msg
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UbsMemLoggerPrint
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UbsMemLoggerPrint(int level, const char *msg)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmInterfacesLoad
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:319,1
    - Dst: gethostname
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:324,1
    - Dst: ubsmem_set_extern_logger
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:330,1
    - Dst: ubsmem_set_logger_level
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:336,1
    - Dst: ubsmem_init_attributes
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:341,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:343,1
    - Dst: ubsmem_initialize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:349,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: ubsmem_local_nid_query
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:354,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: ubsmem_shmem_faults_register
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:359,1
    - Dst: brpc::ubring::CreateUbsShmRegion
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:363,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:364,1
    - Dst: brpc::ubring::InitShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:373,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 375
    functionName: brpc::ubring::UbsShmInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_local_nid_query
    - ubsmem_set_logger_level
    - LOG
    - brpc::ubring::CreateUbsShmRegion
    - ubsmem_set_extern_logger
    - ubsmem_initialize
    - ubsmem_shmem_faults_register
    - ubsmem_init_attributes
    - brpc::ubring::UbsShmInterfacesLoad
    - UNLIKELY
    - gethostname
    - brpc::ubring::InitShmTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_finalize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:379,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:381,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: brpc::ubring::DestroyShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:386,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 377
    functionDepth: 3
    functionLinenumber: 377
    functionLinenumberEnd: 392
    functionName: brpc::ubring::UbsShmFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::DestroyShmTimer
    - LOG
    - UNLIKELY
    - ubsmem_finalize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFini(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:407,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 410
    functionName: brpc::ubring::DeleteShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - FREE_PTR
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeleteShmToList(ShmList* shm_list)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:416,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:424,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:436,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:438,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:440,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:441,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:444,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:445,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 412
    functionDepth: 2
    functionLinenumber: 412
    functionLinenumberEnd: 449
    functionName: brpc::ubring::UbsShmCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::DeleteShmToList
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - LOCK_GUARD
    linkageType: ''
    returnType: void
    signature: void *UbsShmCallback(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:458,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:459,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 466
    functionName: brpc::ubring::UbsShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmAddTimer(ShmList *shm_list)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:472,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:480,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:481,1
    - Dst: brpc::ubring::UbsShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:486,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 468
    functionDepth: 2
    functionLinenumber: 468
    functionLinenumberEnd: 491
    functionName: brpc::ubring::InitShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - malloc
    - FREE_PTR
    - pthread_mutex_init
    - LOG
    - brpc::ubring::UbsShmAddTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE InitShmTimer(ShmList **shm_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:497,1
    - Dst: free
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:505,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:508,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:509,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 493
    functionDepth: 2
    functionLinenumber: 493
    functionLinenumberEnd: 511
    functionName: brpc::ubring::DestroyShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - FREE_PTR
    - free
    - LOG
    - DeleteTimerSafe
    - pthread_mutex_destroy
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE DestroyShmTimer(ShmList *shm_list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:516,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:519,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:523,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 513
    functionDepth: 1
    functionLinenumber: 513
    functionLinenumberEnd: 529
    functionName: brpc::ubring::IsExistInShmList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 1
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    - strcmp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IsExistInShmList(ShmList *shm_list, const SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:534,1
    - Dst: brpc::ubring::IsExistInShmList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:539,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:545,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:549,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:550,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:561,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 531
    functionDepth: 2
    functionLinenumber: 531
    functionLinenumberEnd: 563
    functionName: brpc::ubring::AddShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 6
    functionsReached:
    - malloc
    - memcpy
    - LOG
    - brpc::ubring::IsExistInShmList
    - LOCK_GUARD
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE AddShmToList(ShmList *shm_list, SHM *shm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlmopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:59,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlclose
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 90
    functionName: brpc::ubring::UbsShmInterfacesLoad
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - dlclose
    - dlerror
    - dlmopen
    - dlopen
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInterfacesLoad(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: UBRING_MK_UBSM_OPTIONAL
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM_OPTIONAL(ret, fn, args)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 84
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:97,1
    - Dst: ubsmem_lookup_regions
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:104,1
    - Dst: strcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:110,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:111,1
    - Dst: ubsmem_create_region
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:120,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - region_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 125
    functionName: brpc::ubring::CreateUbsShmRegion
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - strcmp
    - strcpy
    - ubsmem_create_region
    - LOG
    - ubsmem_lookup_regions
    - snprintf
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CreateUbsShmRegion(const char *region_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: brpc::ubring::AquireFlagIfWrDelayComp
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t AquireFlagIfWrDelayComp(const uint64_t flag)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:137,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:138,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:145,1
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:146,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:153,1
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:158,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:160,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:170,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 172
    functionName: brpc::ubring::UbsShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_allocate
    - LOG
    - brpc::ubring::AquireFlagIfWrDelayComp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:178,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:185,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:193,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 174
    functionDepth: 3
    functionLinenumber: 174
    functionLinenumberEnd: 195
    functionName: brpc::ubring::UbsShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:200,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:218,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UbsShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:226,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:233,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:237,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:241,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 253
    functionName: brpc::ubring::UbsShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 265
    functionName: brpc::ubring::UbsShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteMalloc(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 277
    functionName: brpc::ubring::UbsShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMmap(SHM *shm, int prot)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:283,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:290,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:298,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 279
    functionDepth: 3
    functionLinenumber: 279
    functionLinenumberEnd: 300
    functionName: brpc::ubring::UbsShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteFree(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - level
    - msg
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UbsMemLoggerPrint
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UbsMemLoggerPrint(int level, const char *msg)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmInterfacesLoad
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:319,1
    - Dst: gethostname
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:324,1
    - Dst: ubsmem_set_extern_logger
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:330,1
    - Dst: ubsmem_set_logger_level
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:336,1
    - Dst: ubsmem_init_attributes
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:341,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:343,1
    - Dst: ubsmem_initialize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:349,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: ubsmem_local_nid_query
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:354,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: ubsmem_shmem_faults_register
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:359,1
    - Dst: brpc::ubring::CreateUbsShmRegion
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:363,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:364,1
    - Dst: brpc::ubring::InitShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:373,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 375
    functionName: brpc::ubring::UbsShmInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_local_nid_query
    - ubsmem_set_logger_level
    - LOG
    - brpc::ubring::CreateUbsShmRegion
    - ubsmem_set_extern_logger
    - ubsmem_initialize
    - ubsmem_shmem_faults_register
    - ubsmem_init_attributes
    - brpc::ubring::UbsShmInterfacesLoad
    - UNLIKELY
    - gethostname
    - brpc::ubring::InitShmTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_finalize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:379,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:381,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: brpc::ubring::DestroyShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:386,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 377
    functionDepth: 3
    functionLinenumber: 377
    functionLinenumberEnd: 392
    functionName: brpc::ubring::UbsShmFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::DestroyShmTimer
    - LOG
    - UNLIKELY
    - ubsmem_finalize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFini(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:407,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 410
    functionName: brpc::ubring::DeleteShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - FREE_PTR
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeleteShmToList(ShmList* shm_list)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:416,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:424,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:436,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:438,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:440,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:441,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:444,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:445,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 412
    functionDepth: 2
    functionLinenumber: 412
    functionLinenumberEnd: 449
    functionName: brpc::ubring::UbsShmCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::DeleteShmToList
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - LOCK_GUARD
    linkageType: ''
    returnType: void
    signature: void *UbsShmCallback(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:458,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:459,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 466
    functionName: brpc::ubring::UbsShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmAddTimer(ShmList *shm_list)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:472,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:480,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:481,1
    - Dst: brpc::ubring::UbsShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:486,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 468
    functionDepth: 2
    functionLinenumber: 468
    functionLinenumberEnd: 491
    functionName: brpc::ubring::InitShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - malloc
    - FREE_PTR
    - pthread_mutex_init
    - LOG
    - brpc::ubring::UbsShmAddTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE InitShmTimer(ShmList **shm_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:497,1
    - Dst: free
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:505,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:508,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:509,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 493
    functionDepth: 2
    functionLinenumber: 493
    functionLinenumberEnd: 511
    functionName: brpc::ubring::DestroyShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - FREE_PTR
    - free
    - LOG
    - DeleteTimerSafe
    - pthread_mutex_destroy
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE DestroyShmTimer(ShmList *shm_list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:516,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:519,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:523,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 513
    functionDepth: 1
    functionLinenumber: 513
    functionLinenumberEnd: 529
    functionName: brpc::ubring::IsExistInShmList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 2
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    - strcmp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IsExistInShmList(ShmList *shm_list, const SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:534,1
    - Dst: brpc::ubring::IsExistInShmList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:539,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:545,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:549,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:550,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:561,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 531
    functionDepth: 2
    functionLinenumber: 531
    functionLinenumberEnd: 563
    functionName: brpc::ubring::AddShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 9
    functionsReached:
    - malloc
    - memcpy
    - LOG
    - brpc::ubring::IsExistInShmList
    - LOCK_GUARD
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE AddShmToList(ShmList *shm_list, SHM *shm)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 40
      start: 39
    functionDepth: 0
    functionLinenumber: 39
    functionLinenumberEnd: 40
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: dlmopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:59,1
    - Dst: dlopen
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:61,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlerror
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:64,1
    - Dst: dlclose
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:86,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 90
      start: 54
    functionDepth: 1
    functionLinenumber: 54
    functionLinenumberEnd: 90
    functionName: brpc::ubring::UbsShmInterfacesLoad
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - LOG
    - dlclose
    - dlerror
    - dlmopen
    - dlopen
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInterfacesLoad(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 68
    functionDepth: 0
    functionLinenumber: 68
    functionLinenumberEnd: 72
    functionName: UBRING_MK_UBSM_OPTIONAL
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM_OPTIONAL(ret, fn, args)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 1
    argCount: 7
    argNames:
    - (
    - ret
    - ','
    - fn
    - ','
    - args
    - )
    argTypes:
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    - auto
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 84
      start: 73
    functionDepth: 0
    functionLinenumber: 73
    functionLinenumberEnd: 84
    functionName: UBRING_MK_UBSM
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: auto
    signature: UBRING_MK_UBSM(ret, fn, args)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: snprintf
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:94,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:97,1
    - Dst: ubsmem_lookup_regions
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:102,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:104,1
    - Dst: strcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:110,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:111,1
    - Dst: ubsmem_create_region
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:115,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:117,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:120,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 25
    argCount: 1
    argNames:
    - region_name
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 125
      start: 92
    functionDepth: 1
    functionLinenumber: 92
    functionLinenumberEnd: 125
    functionName: brpc::ubring::CreateUbsShmRegion
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - strcmp
    - strcpy
    - ubsmem_create_region
    - LOG
    - ubsmem_lookup_regions
    - snprintf
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE CreateUbsShmRegion(const char *region_name)
  - BBCount: 2
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - flag
    argTypes:
    - uint64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 133
    functionName: brpc::ubring::AquireFlagIfWrDelayComp
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: uint64_t
    signature: uint64_t AquireFlagIfWrDelayComp(const uint64_t flag)
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:137,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:138,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:141,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:145,1
    - Dst: ubsmem_shmem_allocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:146,1
    - Dst: brpc::ubring::AquireFlagIfWrDelayComp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:149,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:153,1
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:158,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:160,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:164,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:170,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 31
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 172
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 172
    functionName: brpc::ubring::UbsShmLocalMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_allocate
    - LOG
    - brpc::ubring::AquireFlagIfWrDelayComp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMalloc(SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:178,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:182,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:185,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:186,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:193,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 195
      start: 174
    functionDepth: 3
    functionLinenumber: 174
    functionLinenumberEnd: 195
    functionName: brpc::ubring::UbsShmMunmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmMunmap(SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:200,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:205,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:211,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:214,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:218,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 20
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 220
      start: 197
    functionDepth: 1
    functionLinenumber: 197
    functionLinenumberEnd: 220
    functionName: brpc::ubring::UbsShmFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFree(SHM *shm)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:226,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:230,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:233,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:234,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:237,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:241,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:244,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:251,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 253
      start: 222
    functionDepth: 3
    functionLinenumber: 222
    functionLinenumberEnd: 253
    functionName: brpc::ubring::UbsShmLocalFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalFree(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:257,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:259,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:263,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 255
    functionDepth: 1
    functionLinenumber: 255
    functionLinenumberEnd: 265
    functionName: brpc::ubring::UbsShmRemoteMalloc
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteMalloc(SHM *shm)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_shmem_map
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:271,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:275,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - shm
    - prot
    argTypes:
    - SHM*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 277
      start: 267
    functionDepth: 1
    functionLinenumber: 267
    functionLinenumberEnd: 277
    functionName: brpc::ubring::UbsShmLocalMmap
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_map
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmLocalMmap(SHM *shm, int prot)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:283,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:287,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:290,1
    - Dst: brpc::ubring::AddShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:291,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:294,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:298,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - shm
    argTypes:
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 300
      start: 279
    functionDepth: 3
    functionLinenumber: 279
    functionLinenumberEnd: 300
    functionName: brpc::ubring::UbsShmRemoteFree
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_shmem_unmap
    - LOG
    - brpc::ubring::AddShmToList
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmRemoteFree(SHM *shm)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:305,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:307,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:309,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 10
    argCount: 2
    argNames:
    - level
    - msg
    argTypes:
    - int
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 312
      start: 302
    functionDepth: 1
    functionLinenumber: 302
    functionLinenumberEnd: 312
    functionName: brpc::ubring::UbsMemLoggerPrint
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void UbsMemLoggerPrint(int level, const char *msg)
  - BBCount: 11
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ubring::UbsShmInterfacesLoad
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:317,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:319,1
    - Dst: gethostname
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:323,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:324,1
    - Dst: ubsmem_set_extern_logger
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:328,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:330,1
    - Dst: ubsmem_set_logger_level
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:334,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:336,1
    - Dst: ubsmem_init_attributes
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:341,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:343,1
    - Dst: ubsmem_initialize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:347,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:349,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: ubsmem_local_nid_query
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:353,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:354,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: ubsmem_shmem_faults_register
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:358,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:359,1
    - Dst: brpc::ubring::CreateUbsShmRegion
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:363,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:364,1
    - Dst: brpc::ubring::InitShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:368,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:369,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:373,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 46
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 375
      start: 314
    functionDepth: 3
    functionLinenumber: 314
    functionLinenumberEnd: 375
    functionName: brpc::ubring::UbsShmInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - ubsmem_local_nid_query
    - ubsmem_set_logger_level
    - LOG
    - brpc::ubring::CreateUbsShmRegion
    - ubsmem_set_extern_logger
    - ubsmem_initialize
    - ubsmem_shmem_faults_register
    - ubsmem_init_attributes
    - brpc::ubring::UbsShmInterfacesLoad
    - UNLIKELY
    - gethostname
    - brpc::ubring::InitShmTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmInit(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ubsmem_finalize
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:379,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:381,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: brpc::ubring::DestroyShmTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:385,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:386,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:390,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 377
    functionDepth: 3
    functionLinenumber: 377
    functionLinenumberEnd: 392
    functionName: brpc::ubring::UbsShmFini
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - brpc::ubring::DestroyShmTimer
    - LOG
    - UNLIKELY
    - ubsmem_finalize
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmFini(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:407,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:408,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 410
      start: 394
    functionDepth: 1
    functionLinenumber: 394
    functionLinenumberEnd: 410
    functionName: brpc::ubring::DeleteShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - FREE_PTR
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeleteShmToList(ShmList* shm_list)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:415,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:416,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:420,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:424,1
    - Dst: ubsmem_shmem_unmap
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:428,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:436,1
    - Dst: ubsmem_shmem_deallocate
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:438,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:440,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:441,1
    - Dst: brpc::ubring::DeleteShmToList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:444,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:445,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 29
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 449
      start: 412
    functionDepth: 2
    functionLinenumber: 412
    functionLinenumberEnd: 449
    functionName: brpc::ubring::UbsShmCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 0
    functionsReached:
    - UNLIKELY
    - brpc::ubring::DeleteShmToList
    - ubsmem_shmem_deallocate
    - ubsmem_shmem_unmap
    - LOG
    - LOCK_GUARD
    linkageType: ''
    returnType: void
    signature: void *UbsShmCallback(void* args)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: TimerStart
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:458,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:459,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:460,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 466
      start: 451
    functionDepth: 1
    functionLinenumber: 451
    functionLinenumberEnd: 466
    functionName: brpc::ubring::UbsShmAddTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - TimerStart
    - UNLIKELY
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE UbsShmAddTimer(ShmList *shm_list)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:472,1
    - Dst: pthread_mutex_init
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:479,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:480,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:481,1
    - Dst: brpc::ubring::UbsShmAddTimer
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:485,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:486,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:487,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList**
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 491
      start: 468
    functionDepth: 2
    functionLinenumber: 468
    functionLinenumberEnd: 491
    functionName: brpc::ubring::InitShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - FREE_PTR
    - pthread_mutex_init
    - LOG
    - brpc::ubring::UbsShmAddTimer
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE InitShmTimer(ShmList **shm_list)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:495,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:497,1
    - Dst: free
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:505,1
    - Dst: pthread_mutex_destroy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:508,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:509,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 14
    argCount: 1
    argNames:
    - shm_list
    argTypes:
    - ShmList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 511
      start: 493
    functionDepth: 2
    functionLinenumber: 493
    functionLinenumberEnd: 511
    functionName: brpc::ubring::DestroyShmTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 4
    functionsReached:
    - FREE_PTR
    - free
    - LOG
    - DeleteTimerSafe
    - pthread_mutex_destroy
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE DestroyShmTimer(ShmList *shm_list)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:515,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:516,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:519,1
    - Dst: strcmp
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:523,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 529
      start: 513
    functionDepth: 1
    functionLinenumber: 513
    functionLinenumberEnd: 529
    functionName: brpc::ubring::IsExistInShmList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 3
    functionsReached:
    - LOCK_GUARD
    - UNLIKELY
    - LOG
    - strcmp
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE IsExistInShmList(ShmList *shm_list, const SHM *shm)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:534,1
    - Dst: brpc::ubring::IsExistInShmList
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:538,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:539,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:543,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:545,1
    - Dst: memcpy
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:549,1
    - Dst: LOCK_GUARD
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:550,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp:561,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 27
    argCount: 2
    argNames:
    - shm_list
    - shm
    argTypes:
    - ShmList*
    - SHM*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 563
      start: 531
    functionDepth: 2
    functionLinenumber: 531
    functionLinenumberEnd: 563
    functionName: brpc::ubring::AddShmToList
    functionSourceFile: /src/brpc/src/brpc/ubshm/shm/shm_ubs.cpp
    functionUses: 12
    functionsReached:
    - malloc
    - memcpy
    - LOG
    - brpc::ubring::IsExistInShmList
    - LOCK_GUARD
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE AddShmToList(ShmList *shm_list, SHM *shm)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:51,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:56,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:66,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:69,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:72,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:73,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:77,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:79,1
    - Dst: std::atomic_fetch_sub
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:80,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 1
    argNames:
    - fd
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 82
      start: 46
    functionDepth: 1
    functionLinenumber: 46
    functionLinenumberEnd: 82
    functionName: DeleteTimerInner
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - pthread_spin_unlock
    - pthread_spin_lock
    - std::atomic_fetch_sub
    - kevent
    - close
    - read
    - epoll_ctl
    - EV_SET
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE DeleteTimerInner(uint32_t fd)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: epoll_create1
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:86,1
    - Dst: kqueue
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:88,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:90,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:91,1
    - Dst: pthread_create
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:95,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:96,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:97,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 12
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 101
      start: 84
    functionDepth: 1
    functionLinenumber: 84
    functionLinenumberEnd: 101
    functionName: StartTimeEpoll
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - epoll_create1
    - pthread_create
    - LOG
    - kqueue
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE StartTimeEpoll(void)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:105,1
    - Dst: pthread_spin_init
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:110,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:113,1
    - Dst: pthread_spin_destroy
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:115,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 15
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 103
    functionDepth: 1
    functionLinenumber: 103
    functionLinenumberEnd: 121
    functionName: TimerSpinLocksInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - pthread_spin_init
    - LOG
    - pthread_spin_destroy
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE TimerSpinLocksInit(void)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: UnifiedCallback
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:124,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - timer_fd
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 126
      start: 123
    functionDepth: 1
    functionLinenumber: 123
    functionLinenumberEnd: 126
    functionName: ExecuteCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - UnifiedCallback
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE ExecuteCallback(int32_t timer_fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:129,1
    - Dst: TimerSpinLocksInit
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:131,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:133,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 128
    functionDepth: 2
    functionLinenumber: 128
    functionLinenumberEnd: 137
    functionName: TimerCtxMapCompletion
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - TimerSpinLocksInit
    - memset
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE TimerCtxMapCompletion(void)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:144,1
    - Dst: getrlimit
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:147,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:148,1
    - Dst: malloc
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:154,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:155,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:156,1
    - Dst: TimerCtxMapCompletion
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:160,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:162,1
    - Dst: free
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:163,1
    - Dst: StartTimeEpoll
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:169,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:171,1
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:172,1
    - Dst: FREE_PTR
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:173,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 32
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 179
      start: 139
    functionDepth: 3
    functionLinenumber: 139
    functionLinenumberEnd: 179
    functionName: TimerInit
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 4
    functionsReached:
    - malloc
    - LIKELY
    - FREE_PTR
    - store
    - LOG
    - free
    - getrlimit
    - StartTimeEpoll
    - TimerCtxMapCompletion
    - UNLIKELY
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE TimerInit(void)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:183,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:188,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:198,1
    - Dst: cb
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:200,1
    - Dst: DeleteTimerInner
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:203,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 15
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 206
      start: 181
    functionDepth: 2
    functionLinenumber: 181
    functionLinenumberEnd: 206
    functionName: UnifiedCallback
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 1
    functionsReached:
    - pthread_spin_lock
    - pthread_spin_unlock
    - DeleteTimerInner
    - cb
    linkageType: ''
    returnType: void
    signature: void *UnifiedCallback(void *args)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: UNREFERENCE_PARAM
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:218,1
    - Dst: epoll_wait
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:223,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:227,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:230,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:233,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:239,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:253,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:255,1
    - Dst: TimerFdCtxValidate
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:259,1
    - Dst: ExecuteCallback
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:263,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:265,1
    - Dst: DeleteTimerInner
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:266,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 37
    argCount: 1
    argNames:
    - args
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 272
      start: 208
    functionDepth: 2
    functionLinenumber: 208
    functionLinenumberEnd: 272
    functionName: TimerEpoll
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - UNREFERENCE_PARAM
    - kevent
    - TimerFdCtxValidate
    - LOG
    - ExecuteCallback
    - LOG_EVERY_SECOND
    - read
    - UNLIKELY
    - epoll_wait
    - DeleteTimerInner
    linkageType: ''
    returnType: void
    signature: void *TimerEpoll(void *args)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: pthread_spin_lock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:279,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:284,1
    - Dst: pthread_spin_unlock
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:294,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:297,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:300,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:301,1
    - Dst: read
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:305,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:307,1
    - Dst: std::atomic_fetch_sub
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:308,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 23
    argCount: 1
    argNames:
    - fd
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 274
    functionDepth: 1
    functionLinenumber: 274
    functionLinenumberEnd: 309
    functionName: DeleteTimerSafe
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 24
    functionsReached:
    - pthread_spin_unlock
    - pthread_spin_lock
    - std::atomic_fetch_sub
    - kevent
    - close
    - read
    - epoll_ctl
    - EV_SET
    linkageType: ''
    returnType: void
    signature: void DeleteTimerSafe(uint32_t fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:313,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 1
    argNames:
    - fd
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 311
    functionDepth: 1
    functionLinenumber: 311
    functionLinenumberEnd: 318
    functionName: DeleteTimer
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 8
    functionsReached:
    - LOG
    linkageType: ''
    returnType: void
    signature: void DeleteTimer(uint32_t fd)
  - BBCount: 17
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:322,1
    - Dst: timerfd_create
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:327,1
    - Dst: timerfd_create_macosx
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:329,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:332,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:333,1
    - Dst: LIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:342,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:352,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:357,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:359,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:362,1
    - Dst: CloseTimerFd
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:363,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:364,1
    - Dst: std::atomic_fetch_add
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:368,1
    - Dst: timerfd_settime
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:371,1
    - Dst: timerfd_settime_macosx
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:373,1
    - Dst: UNLIKELY
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:376,1
    - Dst: epoll_ctl
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:378,1
    - Dst: EV_SET
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:381,1
    - Dst: kevent
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:384,1
    - Dst: CloseTimerFd
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:386,1
    - Dst: std::atomic_fetch_sub
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:387,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:388,1
    - Dst: std::atomic_load
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:396,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:405,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:406,1
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:416,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:420,1
    - Dst: pthread_join
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:426,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:441,1
    - Dst: pipe
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:451,1
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:461,1
    CyclomaticComplexity: 19
    EdgeCount: 19
    ICount: 90
    argCount: 3
    argNames:
    - time
    - (*cb)(void *)
    - args
    argTypes:
    - itimerspec*
    - void*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 468
      start: 320
    functionDepth: 2
    functionLinenumber: 320
    functionLinenumberEnd: 468
    functionName: TimerStart
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 16
    functionsReached:
    - pthread_join
    - CloseTimerFd
    - LOG
    - epoll_ctl
    - timerfd_settime
    - timerfd_create_macosx
    - timerfd_create
    - kevent
    - std::atomic_fetch_add
    - DeleteTimerSafe
    - std::atomic_fetch_sub
    - memset
    - timerfd_settime_macosx
    - LIKELY
    - pipe
    - std::atomic_load
    - close
    - UNLIKELY
    - EV_SET
    linkageType: ''
    returnType: int32_t
    signature: int32_t TimerStart(const itimerspec *time, void *(*cb)(void *), void
      *args)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::atomic_load
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:396,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 397
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 397
    functionName: GetActiveTimerNum
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - std::atomic_load
    linkageType: ''
    returnType: uint32_t
    signature: uint32_t GetActiveTimerNum(void)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:405,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:406,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 1
    argNames:
    - fd
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 409
      start: 399
    functionDepth: 1
    functionLinenumber: 399
    functionLinenumberEnd: 409
    functionName: CloseTimerFd
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 1
    functionsReached:
    - close
    - LOG
    linkageType: ''
    returnType: void
    signature: void CloseTimerFd(int fd)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: DeleteTimerSafe
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:416,1
    - Dst: close
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:420,1
    - Dst: pthread_join
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:424,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:426,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 429
      start: 411
    functionDepth: 2
    functionLinenumber: 411
    functionLinenumberEnd: 429
    functionName: TimerModuleDestroy
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 0
    functionsReached:
    - DeleteTimerSafe
    - close
    - pthread_join
    - LOG
    linkageType: ''
    returnType: void
    signature: void TimerModuleDestroy(void)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:433,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:437,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:441,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 1
    argNames:
    - fd
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 446
      start: 431
    functionDepth: 1
    functionLinenumber: 431
    functionLinenumberEnd: 446
    functionName: TimerFdCtxValidate
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 1
    functionsReached:
    - LOG
    linkageType: ''
    returnType: RETURN_CODE
    signature: RETURN_CODE TimerFdCtxValidate(uint32_t fd)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pipe
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:451,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - clockid
    - flags
    argTypes:
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 455
      start: 449
    functionDepth: 0
    functionLinenumber: 449
    functionLinenumberEnd: 455
    functionName: timerfd_create_macosx
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 1
    functionsReached:
    - pipe
    linkageType: ''
    returnType: int
    signature: int timerfd_create_macosx(int clockid, int flags)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp:461,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 4
    argNames:
    - fd
    - flags
    - new_value
    - old_value
    argTypes:
    - int
    - int
    - itimerspec*
    - itimerspec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 464
      start: 457
    functionDepth: 0
    functionLinenumber: 457
    functionLinenumberEnd: 464
    functionName: timerfd_settime_macosx
    functionSourceFile: /src/brpc/src/brpc/ubshm/timer/timer_mgr.cpp
    functionUses: 1
    functionsReached:
    - memset
    linkageType: ''
    returnType: int
    signature: "int timerfd_settime_macosx(int fd, int flags,\n                                   const
      itimerspec *new_value,\n                                   itimerspec *old_value)"
  - 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: 1
    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
    - Controller*::add_flag
    - butil::subtle::NoBarrier_AtomicIncrement
    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:
    - brpc::ServerPrivateAccessor::FindServicePropertyByName
    - find
    - 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: 1
    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
    - Controller*::add_flag
    - butil::subtle::NoBarrier_AtomicIncrement
    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:
    - brpc::ServerPrivateAccessor::FindServicePropertyByName
    - find
    - 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: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: brpc::SupportsPeerNameVerification
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SupportsPeerNameVerification()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:61,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:63,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - c_str
    - strncmp
    - 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: 81
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 81
    functionName: brpc::SSLStateToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToString(SSLState s)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:85,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:86,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:86,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:88,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:88,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:89,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:90,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:90,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:90,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:92,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:96,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:96,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:96,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:98,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:98,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:101,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 106
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - butil::StringPiece::size
    - brpc::size
    - LOG
    - data
    - strncasecmp
    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:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 112
    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:116,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:117,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:123,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:129,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:130,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:136,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 142
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - certificate::substr
    - private_key::find
    - IsPemString
    - private_key::substr
    - certificate::find
    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:147,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:148,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:156,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:158,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ssl
    - where
    - ret
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 144
    functionDepth: 3
    functionLinenumber: 144
    functionLinenumberEnd: 161
    functionName: brpc::SSLInfoCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - SSL_get_app_data
    - LOG
    - SocketUniquePtr::ssl_state
    - SocketUniquePtr::SetFailed
    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:197,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: 201
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 201
    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: 3
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:208,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:212,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:214,1
    - Dst: setvbuf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:217,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 221
    functionName: brpc::InitSSLKeyLogFile
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - setvbuf
    - LOG
    - fopen
    - getenv
    linkageType: ''
    returnType: void
    signature: void InitSSLKeyLogFile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:229,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ssl
    - line
    argTypes:
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 230
    functionName: brpc::SSLKeyLogCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - fprintf
    linkageType: ''
    returnType: void
    signature: void SSLKeyLogCallback(const SSL* ssl, const char* line)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:233,1
    - Dst: SSL_CTX_set_keylog_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:235,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: brpc::MaybeSetKeyLogCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_CTX_set_keylog_callback
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void MaybeSetKeyLogCallback(SSL_CTX* ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 241
    functionName: brpc::MaybeSetKeyLogCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MaybeSetKeyLogCallback(SSL_CTX* ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_privatekey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:247,1
    - Dst: EVP_PKEY_base_id
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:248,1
    - Dst: EVP_PKEY_bits
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:253,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - ssl
    - exp
    - keylen
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 265
    functionName: brpc::SSLGetDHCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_get_privatekey
    - EVP_PKEY_bits
    - EVP_PKEY_base_id
    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:270,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:270,1
    - Dst: X509_get_ext_d2i
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:271,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:273,1
    - Dst: sk_GENERAL_NAME_num
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:273,1
    - Dst: sk_GENERAL_NAME_value
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:275,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:277,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:280,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:281,1
    - Dst: sk_GENERAL_NAME_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:285,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:290,1
    - Dst: X509_NAME_get_index_by_NID
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:291,1
    - Dst: X509_NAME_get_entry
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:293,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:294,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:295,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:298,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:299,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 302
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - sk_GENERAL_NAME_num
    - X509_get_ext_d2i
    - STACK_OF
    - X509_NAME_get_index_by_NID
    - X509_NAME_get_entry
    - std::vector<std::string>*::push_back
    - X509_get_subject_name
    - ASN1_STRING_to_UTF8
    - static_cast<size_t>
    - sk_GENERAL_NAME_pop_free
    - sk_GENERAL_NAME_value
    - X509_NAME_ENTRY_get_data
    - OPENSSL_free
    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:307,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 309
    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:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 317
    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:323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 325
    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:331,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 333
    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:341,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:343,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:343,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:345,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:345,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:346,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:346,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:347,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:348,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:348,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:353,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:355,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:356,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:356,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:362,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:363,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:364,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:364,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:364,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:366,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:366,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:366,1
    - Dst: BIO_read_filename
      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
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:368,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:369,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:369,1
    - Dst: PEM_read_bio_X509_AUX
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:374,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:376,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:377,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:377,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:382,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:383,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:384,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:384,1
    - Dst: SSL_CTX_clear_chain_certs
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:390,1
    - Dst: sk_X509_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:393,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:398,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:398,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:400,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:401,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:401,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:402,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:407,1
    - Dst: ERR_GET_LIB
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:408,1
    - Dst: ERR_GET_REASON
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:409,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:410,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:411,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:414,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:418,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:419,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:419,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:424,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:424,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: 427
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 427
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - std::unique_ptr::get
    - ERR_GET_REASON
    - PEM_read_bio_X509_AUX
    - LOG
    - sk_X509_pop_free
    - PEM_read_bio_X509
    - ERR_GET_LIB
    - X509_free
    - BIO_new
    - SSL_CTX_add_extra_chain_cert
    - std::unique_ptr::unique_ptr
    - c_str
    - SSL_CTX_use_certificate
    - brpc::ExtractHostnames
    - ERR_clear_error
    - std::unique_ptr::reset
    - brpc::SSLError
    - SSL_CTX_check_private_key
    - PEM_read_bio_PrivateKey
    - SSL_CTX_use_PrivateKey
    - BIO_read_filename
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - ERR_get_error
    - BIO_new_mem_buf
    - SSL_CTX_clear_chain_certs
    - BIO_s_file
    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: 19
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_set_options
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:463,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:467,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:469,1
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:470,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:471,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:472,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:472,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:477,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:479,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:486,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:488,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:491,1
    - Dst: SSL_CTX_set_verify_depth
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:494,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:496,1
    - Dst: X509_get_default_cert_area
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:497,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:497,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:499,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:499,1
    - Dst: ca_file_path::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:501,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:502,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:504,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:505,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:505,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:509,1
    - Dst: SSL_CTX_get0_param
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:511,1
    - Dst: inet_pton
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:514,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:514,1
    - Dst: inet_pton
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:515,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:515,1
    - Dst: X509_VERIFY_PARAM_set1_ip_asc
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:517,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:518,1
    - Dst: X509_VERIFY_PARAM_set1_host
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:520,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:524,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:526,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:530,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:535,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:536,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:539,1
    - Dst: SSL_CTX_set_info_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:542,1
    - Dst: SSL_CTX_set_msg_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:545,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 73
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 549
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - X509_VERIFY_PARAM_set1_ip_asc
    - SSL_CTX_set_msg_callback
    - SSL_CTX_set_options
    - std::string::empty
    - inet_pton
    - std::string
    - X509_get_default_cert_area
    - SSL_CTX_set_info_callback
    - c_str
    - std::string::c_str
    - SSL_CTX_get0_param
    - SSL_CTX_load_verify_locations
    - brpc::SSLError
    - SSL_CTX_set_verify
    - SSL_CTX_set_mode
    - expected_peer_name::empty
    - expected_peer_name::c_str
    - X509_VERIFY_PARAM_set1_host
    - ERR_get_error
    - brpc::empty
    - SSL_CTX_set_verify_depth
    - ca_file_path::empty
    - SSL_CTX_set_cipher_list
    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:554,1
    - Dst: SSL_select_next_proto
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:560,1
    - Dst: const_cast<unsigned char**>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:561,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,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: 566
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 566
    functionName: brpc::ServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - std::string*::data
    - SSL_select_next_proto
    - const_cast<unsigned char**>
    - std::string*::size
    - static_cast<const std::string*>
    - reinterpret_cast<const 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:570,1
    - Dst: SSL_VERSION_NUMBER
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:575,1
    - Dst: SSL_CTX_set_alpn_select_cb
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:576,1
    - Dst: const_cast<std::string*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ssl_ctx
    - alpns
    argTypes:
    - SSL_CTX*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 583
    functionName: brpc::SetServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_CTX_set_alpn_select_cb
    - SSL_VERSION_NUMBER
    - const_cast<std::string*>
    - LOG
    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:589,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:589,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:589,1
    - Dst: brpc::MaybeSetKeyLogCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:592,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:592,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:594,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:595,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:595,1
    - Dst: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:601,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:603,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:603,1
    - Dst: alpn_protocols::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:608,1
    - Dst: brpc::BuildALPNProtocolList
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:610,1
    - Dst: SSL_CTX_set_alpn_protos
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: std::vector::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:616,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:616,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:617,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 585
    functionDepth: 1
    functionLinenumber: 585
    functionLinenumberEnd: 618
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 9
    functionsReached:
    - std::unique_ptr::get
    - brpc::MaybeSetKeyLogCallback
    - client_cert::certificate::empty
    - std::vector::data
    - ERR_get_error
    - brpc::ParseSSLProtocols
    - SSL_CTX_set_alpn_protos
    - brpc::SSLError
    - LOG
    - std::unique_ptr::release
    - brpc::LoadCertificate
    - SSL_CTX_set_session_cache_mode
    - alpn_protocols::empty
    - brpc::BuildALPNProtocolList
    - std::vector::size
    - brpc::SetSSLOptions
    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:628,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:628,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:628,1
    - Dst: brpc::MaybeSetKeyLogCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:631,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:631,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:633,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:633,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:642,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:642,1
    - Dst: SSL_CTX_get_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:649,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:649,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:651,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:651,1
    - Dst: SSL_CTX_set_timeout
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:655,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:655,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:656,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:656,1
    - Dst: SSL_CTX_set_tmp_dh_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:659,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:659,1
    - Dst: OBJ_sn2nid
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:663,1
    - Dst: ecdhe_curve_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:663,1
    - Dst: EC_KEY_new_by_curve_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:664,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:665,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    - Dst: SSL_CTX_set_tmp_ecdh
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:670,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:670,1
    - Dst: EC_KEY_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:671,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:677,1
    - Dst: brpc::SetServerALPNCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:678,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:678,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:682,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 34
    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: 683
      start: 620
    functionDepth: 2
    functionLinenumber: 620
    functionLinenumberEnd: 683
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - std::unique_ptr::get
    - std::unique_ptr::release
    - LOG
    - std::string*::empty
    - OBJ_sn2nid
    - brpc::MaybeSetKeyLogCallback
    - SSL_CTX_sess_set_cache_size
    - ecdhe_curve_name::c_str
    - brpc::SetSSLOptions
    - SSL_CTX_get_mode
    - SSL_CTX_set_tmp_dh_callback
    - brpc::SSLError
    - brpc::LoadCertificate
    - SSL_CTX_set_mode
    - EC_KEY_new_by_curve_name
    - SSL_CTX_set_tmp_ecdh
    - brpc::SetServerALPNCallback
    - ERR_get_error
    - EC_KEY_free
    - SSL_CTX_set_timeout
    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:687,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:690,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:695,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:696,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:696,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:696,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:697,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:702,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:704,1
    - Dst: SSL_set_app_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:706,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: 708
      start: 685
    functionDepth: 1
    functionLinenumber: 685
    functionLinenumberEnd: 708
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - SSL_new
    - ERR_get_error
    - brpc::SSLError
    - LOG
    - SSL_set_connect_state
    - SSL_set_app_data
    - SSL_free
    - SSL_set_accept_state
    - 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:712,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:712,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:713,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:713,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:715,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:715,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:716,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:717,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:717,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:718,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:720,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:720,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:721,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:722,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:723,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:723,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:724,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:725,1
    - Dst: SSL_set_bio
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - ssl
    - fd
    - bufsize
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 727
    functionName: brpc::AddBIOBuffer
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_set_bio
    - BIO_f_buffer
    - BIO_set_fd
    - BIO_new
    - BIO_push
    - BIO_s_fd
    - BIO_set_buffer_size
    - 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:746,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 729
    functionDepth: 0
    functionLinenumber: 729
    functionLinenumberEnd: 767
    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:775,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:775,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - CRYPTO_THREADID*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 776
    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:779,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 780
    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:798,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:800,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - mode
    - n
    - file
    - line
    argTypes:
    - int
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 802
    functionName: brpc::SSLLockCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - lock
    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:807,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:807,1
    - Dst: CRYPTO_set_locking_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:808,1
    - Dst: CRYPTO_THREADID_set_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:810,1
    - Dst: CRYPTO_set_id_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 805
    functionDepth: 0
    functionLinenumber: 805
    functionLinenumberEnd: 816
    functionName: brpc::SSLThreadInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::Mutex::Mutex
    - CRYPTO_num_locks
    - CRYPTO_set_locking_callback
    - CRYPTO_THREADID_set_callback
    - CRYPTO_set_id_callback
    linkageType: ''
    returnType: int
    signature: int SSLThreadInit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:821,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:828,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:830,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:833,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:835,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:836,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:839,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 841
    functionName: brpc::SSLGetDH1024
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH1024()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:844,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:851,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:853,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:856,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:858,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:859,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:862,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 843
    functionDepth: 1
    functionLinenumber: 843
    functionLinenumberEnd: 864
    functionName: brpc::SSLGetDH2048
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - get_rfc3526_prime_2048
    - BN_free
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH2048()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:867,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:874,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:876,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:879,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:881,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:882,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:885,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 887
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 887
    functionName: brpc::SSLGetDH4096
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - BN_free
    - get_rfc3526_prime_4096
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH4096()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:890,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:897,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:899,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:902,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:904,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:905,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:908,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 889
    functionDepth: 1
    functionLinenumber: 889
    functionLinenumberEnd: 910
    functionName: brpc::SSLGetDH8192
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - BN_free
    - get_rfc3526_prime_8192
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH8192()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SSLGetDH1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:916,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:917,1
    - Dst: brpc::SSLGetDH2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:920,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:921,1
    - Dst: brpc::SSLGetDH4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:924,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:925,1
    - Dst: brpc::SSLGetDH8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:928,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:929,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 934
      start: 914
    functionDepth: 2
    functionLinenumber: 914
    functionLinenumberEnd: 934
    functionName: brpc::SSLDHInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::SSLGetDH1024
    - brpc::SSLGetDH8192
    - brpc::SSLGetDH4096
    - LOG
    - brpc::SSLGetDH2048
    linkageType: ''
    returnType: int
    signature: int SSLDHInit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:940,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:945,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:946,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:947,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sep
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 936
    functionDepth: 1
    functionLinenumber: 936
    functionLinenumberEnd: 949
    functionName: brpc::GetNextLevelSeparator
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - strlen
    - std::string::append
    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:952,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:953,1
    - Dst: SSL_get_verify_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:954,1
    - Dst: SSL_get_peer_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:956,1
    - Dst: brpc::GetNextLevelSeparator
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:959,1
    - Dst: brpc::Print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:963,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:963,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 951
    functionDepth: 2
    functionLinenumber: 951
    functionLinenumberEnd: 969
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - brpc::Print
    - brpc::GetNextLevelSeparator
    - std::string::c_str
    - SSL_get_version
    - SSL_get_verify_mode
    - 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:972,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:972,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:976,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:977,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:977,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:978,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:979,1
    - Dst: X509_get_notBefore
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:979,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:980,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:981,1
    - Dst: X509_get_notAfter
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:981,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:983,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:985,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:986,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:987,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:987,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:990,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:991,1
    - Dst: X509_get_issuer_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:991,1
    - Dst: BIO_get_mem_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:994,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:995,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 3
    argNames:
    - ' os'
    - cert
    - sep
    argTypes:
    - std::ostream
    - X509*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 996
      start: 971
    functionDepth: 1
    functionLinenumber: 971
    functionLinenumberEnd: 996
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - brpc::ExtractHostnames
    - BIO_new
    - X509_get_notAfter
    - butil::BasicStringPiece::BasicStringPiece
    - X509_get_subject_name
    - BIO_printf
    - X509_get_notBefore
    - BIO_get_mem_data
    - X509_NAME_print
    - std::vector::size
    - X509_get_issuer_name
    - c_str
    - BIO_s_mem
    - ASN1_TIME_print
    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:999,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1001,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1002,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1007,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1008,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1011,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1011,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1012,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1012,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' protocol'
    argTypes:
    - AdaptiveProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1013
    functionName: brpc::ALPNProtocolToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::starts_with
    - name
    - std::string
    - butil::StringPiece::size
    - butil::StringPiece::data
    - butil::StringPiece::substr
    - butil::StringPiece::set
    - static_cast<char>
    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:1021,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1022,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1023,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1027,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1030,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1031,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1032,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1033,1
    - Dst: std::copy
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1035,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1036,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1037,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1038,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1040,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: 1043
      start: 1015
    functionDepth: 2
    functionLinenumber: 1015
    functionLinenumberEnd: 1043
    functionName: brpc::BuildALPNProtocolList
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - begin
    - std::copy
    - end
    - static_cast<unsigned char>
    - LOG
    - brpc::size
    - resize
    linkageType: ''
    returnType: bool
    signature: "bool BuildALPNProtocolList(\n    const std::vector<std::string>& alpn_protocols,\n
      \   std::vector<unsigned char>& result\n)"
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 49
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 49
    functionName: brpc::SupportsPeerNameVerification
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SupportsPeerNameVerification()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:61,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:63,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:63,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 67
      start: 60
    functionDepth: 0
    functionLinenumber: 60
    functionLinenumberEnd: 67
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - c_str
    - strncmp
    - 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: 81
      start: 69
    functionDepth: 0
    functionLinenumber: 69
    functionLinenumberEnd: 81
    functionName: brpc::SSLStateToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: char
    signature: char * SSLStateToString(SSLState s)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:85,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:86,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:86,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:88,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:88,1
    - Dst: butil::StringPiece::trim_spaces
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:89,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:90,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:90,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:90,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:92,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:92,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:92,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:94,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:96,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:96,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:96,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:98,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:98,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:101,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 23
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 106
      start: 83
    functionDepth: 2
    functionLinenumber: 83
    functionLinenumberEnd: 106
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - butil::StringPiece::size
    - brpc::size
    - LOG
    - data
    - strncasecmp
    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:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 112
      start: 108
    functionDepth: 0
    functionLinenumber: 108
    functionLinenumberEnd: 112
    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:116,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:117,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:123,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:129,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:130,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:136,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 114
    functionDepth: 0
    functionLinenumber: 114
    functionLinenumberEnd: 142
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - certificate::substr
    - private_key::find
    - IsPemString
    - private_key::substr
    - certificate::find
    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:147,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:148,1
    - Dst: SocketUniquePtr::ssl_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:154,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:156,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:158,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 3
    argNames:
    - ssl
    - where
    - ret
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 161
      start: 144
    functionDepth: 3
    functionLinenumber: 144
    functionLinenumberEnd: 161
    functionName: brpc::SSLInfoCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - brpc::SetTrackMeAddress
    - SSL_get_app_data
    - LOG
    - SocketUniquePtr::ssl_state
    - SocketUniquePtr::SetFailed
    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:197,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: 201
      start: 163
    functionDepth: 0
    functionLinenumber: 163
    functionLinenumberEnd: 201
    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: 3
    BranchProfiles: []
    Callsites:
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:208,1
    - Dst: fopen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:212,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:214,1
    - Dst: setvbuf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:217,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 207
    functionDepth: 1
    functionLinenumber: 207
    functionLinenumberEnd: 221
    functionName: brpc::InitSSLKeyLogFile
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - setvbuf
    - LOG
    - fopen
    - getenv
    linkageType: ''
    returnType: void
    signature: void InitSSLKeyLogFile()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fprintf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:229,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 2
    argNames:
    - ssl
    - line
    argTypes:
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 230
      start: 223
    functionDepth: 0
    functionLinenumber: 223
    functionLinenumberEnd: 230
    functionName: brpc::SSLKeyLogCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - fprintf
    linkageType: ''
    returnType: void
    signature: void SSLKeyLogCallback(const SSL* ssl, const char* line)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:233,1
    - Dst: SSL_CTX_set_keylog_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:235,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 232
    functionDepth: 0
    functionLinenumber: 232
    functionLinenumberEnd: 237
    functionName: brpc::MaybeSetKeyLogCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - SSL_CTX_set_keylog_callback
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void MaybeSetKeyLogCallback(SSL_CTX* ctx)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 241
      start: 239
    functionDepth: 0
    functionLinenumber: 239
    functionLinenumberEnd: 241
    functionName: brpc::MaybeSetKeyLogCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void MaybeSetKeyLogCallback(SSL_CTX* ctx)
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: SSL_get_privatekey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:247,1
    - Dst: EVP_PKEY_base_id
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:248,1
    - Dst: EVP_PKEY_bits
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:253,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 3
    argNames:
    - ssl
    - exp
    - keylen
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 265
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 265
    functionName: brpc::SSLGetDHCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_get_privatekey
    - EVP_PKEY_bits
    - EVP_PKEY_base_id
    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:270,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:270,1
    - Dst: X509_get_ext_d2i
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:271,1
    - Dst: static_cast<size_t>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:273,1
    - Dst: sk_GENERAL_NAME_num
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:273,1
    - Dst: sk_GENERAL_NAME_value
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:275,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:277,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:280,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:281,1
    - Dst: sk_GENERAL_NAME_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:285,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:290,1
    - Dst: X509_NAME_get_index_by_NID
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:291,1
    - Dst: X509_NAME_get_entry
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:293,1
    - Dst: ASN1_STRING_to_UTF8
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:294,1
    - Dst: X509_NAME_ENTRY_get_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:295,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:298,1
    - Dst: OPENSSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:299,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 19
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 302
      start: 268
    functionDepth: 0
    functionLinenumber: 268
    functionLinenumberEnd: 302
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - sk_GENERAL_NAME_num
    - X509_get_ext_d2i
    - STACK_OF
    - X509_NAME_get_index_by_NID
    - X509_NAME_get_entry
    - std::vector<std::string>*::push_back
    - X509_get_subject_name
    - ASN1_STRING_to_UTF8
    - static_cast<size_t>
    - sk_GENERAL_NAME_pop_free
    - sk_GENERAL_NAME_value
    - X509_NAME_ENTRY_get_data
    - OPENSSL_free
    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:307,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 309
      start: 305
    functionDepth: 0
    functionLinenumber: 305
    functionLinenumberEnd: 309
    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:315,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 313
    functionDepth: 0
    functionLinenumber: 313
    functionLinenumberEnd: 317
    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:323,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 325
      start: 321
    functionDepth: 0
    functionLinenumber: 321
    functionLinenumberEnd: 325
    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:331,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 333
      start: 329
    functionDepth: 0
    functionLinenumber: 329
    functionLinenumberEnd: 333
    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:341,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:343,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:343,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:345,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:345,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:346,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:346,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:347,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:348,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:348,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:353,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:354,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:355,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:356,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:356,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:362,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:363,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:364,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:364,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:364,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:366,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:366,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:366,1
    - Dst: BIO_read_filename
      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
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:367,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:368,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:369,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:369,1
    - Dst: PEM_read_bio_X509_AUX
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:374,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:374,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:376,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:377,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:377,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:382,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:382,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:383,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:384,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:384,1
    - Dst: SSL_CTX_clear_chain_certs
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:390,1
    - Dst: sk_X509_pop_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:393,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:398,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:398,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:399,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:400,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:401,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:401,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:402,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:407,1
    - Dst: ERR_GET_LIB
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:408,1
    - Dst: ERR_GET_REASON
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:409,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:410,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:411,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:414,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:417,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:418,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:419,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:419,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:424,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:424,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: 427
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 427
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - std::unique_ptr::get
    - ERR_GET_REASON
    - PEM_read_bio_X509_AUX
    - LOG
    - sk_X509_pop_free
    - PEM_read_bio_X509
    - ERR_GET_LIB
    - X509_free
    - BIO_new
    - SSL_CTX_add_extra_chain_cert
    - std::unique_ptr::unique_ptr
    - c_str
    - SSL_CTX_use_certificate
    - brpc::ExtractHostnames
    - ERR_clear_error
    - std::unique_ptr::reset
    - brpc::SSLError
    - SSL_CTX_check_private_key
    - PEM_read_bio_PrivateKey
    - SSL_CTX_use_PrivateKey
    - BIO_read_filename
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - ERR_get_error
    - BIO_new_mem_buf
    - SSL_CTX_clear_chain_certs
    - BIO_s_file
    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: 19
    BranchProfiles: []
    Callsites:
    - Dst: SSL_CTX_set_options
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:463,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:467,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:469,1
    - Dst: SSL_CTX_set_cipher_list
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:470,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:471,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:472,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:472,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:477,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:479,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:483,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:486,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:488,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:491,1
    - Dst: SSL_CTX_set_verify_depth
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:494,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:496,1
    - Dst: X509_get_default_cert_area
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:497,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:497,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:499,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:499,1
    - Dst: ca_file_path::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:500,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:501,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:502,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:502,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:504,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:505,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:505,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:509,1
    - Dst: SSL_CTX_get0_param
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:511,1
    - Dst: inet_pton
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:514,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:514,1
    - Dst: inet_pton
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:515,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:515,1
    - Dst: X509_VERIFY_PARAM_set1_ip_asc
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:517,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:518,1
    - Dst: X509_VERIFY_PARAM_set1_host
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:520,1
    - Dst: expected_peer_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:521,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:524,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:526,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:526,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:530,1
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:535,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:536,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:539,1
    - Dst: SSL_CTX_set_info_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:542,1
    - Dst: SSL_CTX_set_msg_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:545,1
    CyclomaticComplexity: 22
    EdgeCount: 22
    ICount: 73
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 549
      start: 429
    functionDepth: 1
    functionLinenumber: 429
    functionLinenumberEnd: 549
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - LOG
    - X509_VERIFY_PARAM_set1_ip_asc
    - SSL_CTX_set_msg_callback
    - SSL_CTX_set_options
    - std::string::empty
    - inet_pton
    - std::string
    - X509_get_default_cert_area
    - SSL_CTX_set_info_callback
    - c_str
    - std::string::c_str
    - SSL_CTX_get0_param
    - SSL_CTX_load_verify_locations
    - brpc::SSLError
    - SSL_CTX_set_verify
    - SSL_CTX_set_mode
    - expected_peer_name::empty
    - expected_peer_name::c_str
    - X509_VERIFY_PARAM_set1_host
    - ERR_get_error
    - brpc::empty
    - SSL_CTX_set_verify_depth
    - ca_file_path::empty
    - SSL_CTX_set_cipher_list
    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:554,1
    - Dst: SSL_select_next_proto
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:560,1
    - Dst: const_cast<unsigned char**>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:561,1
    - Dst: reinterpret_cast<const unsigned char*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: std::string*::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:562,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: 566
      start: 551
    functionDepth: 0
    functionLinenumber: 551
    functionLinenumberEnd: 566
    functionName: brpc::ServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - std::string*::data
    - SSL_select_next_proto
    - const_cast<unsigned char**>
    - std::string*::size
    - static_cast<const std::string*>
    - reinterpret_cast<const 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:570,1
    - Dst: SSL_VERSION_NUMBER
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:575,1
    - Dst: SSL_CTX_set_alpn_select_cb
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:576,1
    - Dst: const_cast<std::string*>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:579,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 2
    argNames:
    - ssl_ctx
    - alpns
    argTypes:
    - SSL_CTX*
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 583
      start: 568
    functionDepth: 1
    functionLinenumber: 568
    functionLinenumberEnd: 583
    functionName: brpc::SetServerALPNCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - SSL_CTX_set_alpn_select_cb
    - SSL_VERSION_NUMBER
    - const_cast<std::string*>
    - LOG
    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:589,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:589,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:589,1
    - Dst: brpc::MaybeSetKeyLogCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:592,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:592,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:594,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:595,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:595,1
    - Dst: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:601,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:603,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:603,1
    - Dst: alpn_protocols::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:608,1
    - Dst: brpc::BuildALPNProtocolList
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:610,1
    - Dst: SSL_CTX_set_alpn_protos
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: std::vector::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:613,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:616,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:616,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:617,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 20
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 618
      start: 585
    functionDepth: 3
    functionLinenumber: 585
    functionLinenumberEnd: 618
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 9
    functionsReached:
    - std::unique_ptr::get
    - brpc::MaybeSetKeyLogCallback
    - client_cert::certificate::empty
    - std::vector::data
    - ERR_get_error
    - brpc::ParseSSLProtocols
    - SSL_CTX_set_alpn_protos
    - brpc::SSLError
    - LOG
    - std::unique_ptr::release
    - brpc::LoadCertificate
    - SSL_CTX_set_session_cache_mode
    - alpn_protocols::empty
    - brpc::BuildALPNProtocolList
    - std::vector::size
    - brpc::SetSSLOptions
    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:628,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:628,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:628,1
    - Dst: brpc::MaybeSetKeyLogCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:631,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:631,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:633,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:633,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:642,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:642,1
    - Dst: SSL_CTX_get_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:649,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:649,1
    - Dst: SSL_CTX_set_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:651,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:651,1
    - Dst: SSL_CTX_set_timeout
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:655,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:655,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:656,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:656,1
    - Dst: SSL_CTX_set_tmp_dh_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:659,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:659,1
    - Dst: OBJ_sn2nid
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:663,1
    - Dst: ecdhe_curve_name::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:663,1
    - Dst: EC_KEY_new_by_curve_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:664,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:665,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:667,1
    - Dst: SSL_CTX_set_tmp_ecdh
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:670,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:670,1
    - Dst: EC_KEY_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:671,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:677,1
    - Dst: brpc::SetServerALPNCallback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:678,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:678,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:682,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 34
    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: 683
      start: 620
    functionDepth: 2
    functionLinenumber: 620
    functionLinenumberEnd: 683
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - std::unique_ptr::get
    - std::unique_ptr::release
    - LOG
    - std::string*::empty
    - OBJ_sn2nid
    - brpc::MaybeSetKeyLogCallback
    - SSL_CTX_sess_set_cache_size
    - ecdhe_curve_name::c_str
    - brpc::SetSSLOptions
    - SSL_CTX_get_mode
    - SSL_CTX_set_tmp_dh_callback
    - brpc::SSLError
    - brpc::LoadCertificate
    - SSL_CTX_set_mode
    - EC_KEY_new_by_curve_name
    - SSL_CTX_set_tmp_ecdh
    - brpc::SetServerALPNCallback
    - ERR_get_error
    - EC_KEY_free
    - SSL_CTX_set_timeout
    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:687,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:690,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:692,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:695,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:696,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:696,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:696,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:697,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:702,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:704,1
    - Dst: SSL_set_app_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:706,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: 708
      start: 685
    functionDepth: 1
    functionLinenumber: 685
    functionLinenumberEnd: 708
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - SSL_new
    - ERR_get_error
    - brpc::SSLError
    - LOG
    - SSL_set_connect_state
    - SSL_set_app_data
    - SSL_free
    - SSL_set_accept_state
    - 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:712,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:712,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:713,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:713,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:715,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:715,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:716,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:717,1
    - Dst: BIO_f_buffer
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:717,1
    - Dst: BIO_set_buffer_size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:718,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:720,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:720,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:721,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:722,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:723,1
    - Dst: BIO_s_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:723,1
    - Dst: BIO_set_fd
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:724,1
    - Dst: BIO_push
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:725,1
    - Dst: SSL_set_bio
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:726,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 8
    argCount: 3
    argNames:
    - ssl
    - fd
    - bufsize
    argTypes:
    - SSL*
    - int
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 727
      start: 710
    functionDepth: 0
    functionLinenumber: 710
    functionLinenumberEnd: 727
    functionName: brpc::AddBIOBuffer
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - SSL_set_bio
    - BIO_f_buffer
    - BIO_set_fd
    - BIO_new
    - BIO_push
    - BIO_s_fd
    - BIO_set_buffer_size
    - 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:746,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 767
      start: 729
    functionDepth: 0
    functionLinenumber: 729
    functionLinenumberEnd: 767
    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:775,1
    - Dst: pthread_self
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:775,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - tid
    argTypes:
    - CRYPTO_THREADID*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 776
      start: 774
    functionDepth: 0
    functionLinenumber: 774
    functionLinenumberEnd: 776
    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:779,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 780
      start: 778
    functionDepth: 0
    functionLinenumber: 778
    functionLinenumberEnd: 780
    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:798,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:800,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 4
    argNames:
    - mode
    - n
    - file
    - line
    argTypes:
    - int
    - int
    - char*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 802
      start: 790
    functionDepth: 0
    functionLinenumber: 790
    functionLinenumberEnd: 802
    functionName: brpc::SSLLockCallback
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - unlock
    - lock
    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:807,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:807,1
    - Dst: CRYPTO_set_locking_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:808,1
    - Dst: CRYPTO_THREADID_set_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:810,1
    - Dst: CRYPTO_set_id_callback
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:812,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 816
      start: 805
    functionDepth: 0
    functionLinenumber: 805
    functionLinenumberEnd: 816
    functionName: brpc::SSLThreadInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::Mutex::Mutex
    - CRYPTO_num_locks
    - CRYPTO_set_locking_callback
    - CRYPTO_THREADID_set_callback
    - CRYPTO_set_id_callback
    linkageType: ''
    returnType: int
    signature: int SSLThreadInit()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc2409_prime_1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:821,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:828,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:830,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:833,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:835,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:836,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:839,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 841
      start: 820
    functionDepth: 1
    functionLinenumber: 820
    functionLinenumberEnd: 841
    functionName: brpc::SSLGetDH1024
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - get_rfc2409_prime_1024
    - BN_free
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH1024()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:844,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:851,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:853,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:856,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:858,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:859,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:862,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 864
      start: 843
    functionDepth: 1
    functionLinenumber: 843
    functionLinenumberEnd: 864
    functionName: brpc::SSLGetDH2048
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - get_rfc3526_prime_2048
    - BN_free
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH2048()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:867,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:874,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:876,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:879,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:881,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:882,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:885,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 887
      start: 866
    functionDepth: 1
    functionLinenumber: 866
    functionLinenumberEnd: 887
    functionName: brpc::SSLGetDH4096
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - BN_free
    - get_rfc3526_prime_4096
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH4096()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: get_rfc3526_prime_8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:890,1
    - Dst: BN_dec2bn
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:897,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:899,1
    - Dst: DH_new
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:902,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:904,1
    - Dst: BN_free
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:905,1
    - Dst: DH_set0_pqg
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:908,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 910
      start: 889
    functionDepth: 1
    functionLinenumber: 889
    functionLinenumberEnd: 910
    functionName: brpc::SSLGetDH8192
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - DH_new
    - DH_set0_pqg
    - BN_free
    - get_rfc3526_prime_8192
    - BN_dec2bn
    linkageType: ''
    returnType: DH
    signature: DH * SSLGetDH8192()
  - BBCount: 5
    BranchProfiles: []
    Callsites:
    - Dst: brpc::SSLGetDH1024
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:916,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:917,1
    - Dst: brpc::SSLGetDH2048
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:920,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:921,1
    - Dst: brpc::SSLGetDH4096
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:924,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:925,1
    - Dst: brpc::SSLGetDH8192
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:928,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:929,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 18
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 934
      start: 914
    functionDepth: 2
    functionLinenumber: 914
    functionLinenumberEnd: 934
    functionName: brpc::SSLDHInit
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::SSLGetDH1024
    - brpc::SSLGetDH8192
    - brpc::SSLGetDH4096
    - LOG
    - brpc::SSLGetDH2048
    linkageType: ''
    returnType: int
    signature: int SSLDHInit()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:940,1
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:945,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:946,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:947,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 1
    argNames:
    - sep
    argTypes:
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 949
      start: 936
    functionDepth: 1
    functionLinenumber: 936
    functionLinenumberEnd: 949
    functionName: brpc::GetNextLevelSeparator
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 1
    functionsReached:
    - std::string::reserve
    - strlen
    - std::string::append
    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:952,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:953,1
    - Dst: SSL_get_verify_mode
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:954,1
    - Dst: SSL_get_peer_certificate
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:956,1
    - Dst: brpc::GetNextLevelSeparator
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:959,1
    - Dst: brpc::Print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:963,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:963,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 969
      start: 951
    functionDepth: 2
    functionLinenumber: 951
    functionLinenumberEnd: 969
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::Print
    - brpc::GetNextLevelSeparator
    - std::string::c_str
    - SSL_get_version
    - SSL_get_verify_mode
    - 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:972,1
    - Dst: BIO_s_mem
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:972,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:976,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:977,1
    - Dst: X509_get_subject_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:977,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:978,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:979,1
    - Dst: X509_get_notBefore
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:979,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:980,1
    - Dst: ASN1_TIME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:981,1
    - Dst: X509_get_notAfter
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:981,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:983,1
    - Dst: brpc::ExtractHostnames
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:985,1
    - Dst: std::vector::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:986,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:987,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:987,1
    - Dst: BIO_printf
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:990,1
    - Dst: X509_NAME_print
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:991,1
    - Dst: X509_get_issuer_name
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:991,1
    - Dst: BIO_get_mem_data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:994,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:995,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 18
    argCount: 3
    argNames:
    - ' os'
    - cert
    - sep
    argTypes:
    - std::ostream
    - X509*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 996
      start: 971
    functionDepth: 1
    functionLinenumber: 971
    functionLinenumberEnd: 996
    functionName: brpc::Print
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - brpc::ExtractHostnames
    - BIO_new
    - X509_get_notAfter
    - butil::BasicStringPiece::BasicStringPiece
    - X509_get_subject_name
    - BIO_printf
    - X509_get_notBefore
    - BIO_get_mem_data
    - X509_NAME_print
    - std::vector::size
    - X509_get_issuer_name
    - c_str
    - BIO_s_mem
    - ASN1_TIME_print
    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:999,1
    - Dst: butil::StringPiece::starts_with
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1001,1
    - Dst: butil::StringPiece::set
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1002,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1007,1
    - Dst: butil::StringPiece::substr
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1008,1
    - Dst: static_cast<char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1011,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1011,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1012,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1012,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - ' protocol'
    argTypes:
    - AdaptiveProtocolType
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1013
      start: 998
    functionDepth: 0
    functionLinenumber: 998
    functionLinenumberEnd: 1013
    functionName: brpc::ALPNProtocolToString
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::StringPiece::starts_with
    - name
    - std::string
    - butil::StringPiece::size
    - butil::StringPiece::data
    - butil::StringPiece::substr
    - butil::StringPiece::set
    - static_cast<char>
    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:1021,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1022,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1023,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1027,1
    - Dst: resize
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1030,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1031,1
    - Dst: static_cast<unsigned char>
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1032,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1033,1
    - Dst: std::copy
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1035,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1036,1
    - Dst: end
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1037,1
    - Dst: begin
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1038,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/ssl_helper.cpp:1040,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: 1043
      start: 1015
    functionDepth: 2
    functionLinenumber: 1015
    functionLinenumberEnd: 1043
    functionName: brpc::BuildALPNProtocolList
    functionSourceFile: /src/brpc/src/brpc/details/ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - begin
    - std::copy
    - end
    - static_cast<unsigned char>
    - LOG
    - brpc::size
    - resize
    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:
    - static_cast<uint32_t>
    - static_cast<EPOLL_EVENTS>
    - brpc::release
    - epoll_create
    - close
    - socketpair
    - epoll_ctl
    - epoll_wait
    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:
    - static_cast<uint32_t>
    - static_cast<EPOLL_EVENTS>
    - brpc::release
    - epoll_create
    - close
    - socketpair
    - epoll_ctl
    - epoll_wait
    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:
    - bthread_id_create
    - CHECK_EQ
    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:
    - begin
    - SocketMapRemove
    - EndWait
    - end
    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::unique
    - insert
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - std::set_difference
    - _last_sockets::swap
    - LOG
    - SocketMapInsert
    - SocketMapFind
    - empty
    - CHECK_EQ
    - swap
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnAddedServers"
    - SocketMapRemove
    - _last_sockets::begin
    - EndWait
    - resize
    - begin
    - ServerNodeWithId2ServerId
    - _watchers::end
    - _watchers::begin
    - std::inplace_merge
    - size
    - BAIDU_SCOPED_LOCK
    - clear
    - assign
    - std::sort
    - std::ostringstream::str
    - push_back
    - end
    - _last_sockets::size
    - butil::class_name_str
    - _last_sockets::end
    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: 6
    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:
    - begin
    - Destroy
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - end
    - "std::map<NamingServiceWatcher*,\n                          const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - clear
    - erase
    - empty
    - 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:
    - RunNamingServiceReturnsQuickly
    - brpc::NamingServiceThread::RunThis
    - berror
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - clear
    - LOG
    - bthread_start_urgent
    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:
    - LOG
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - 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:
    - begin
    - end
    - NamingServiceFilter*::Accept
    - std::vector<ServerId>*::reserve
    - std::vector<ServerId>*::push_back
    - 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:
    - brpc::NamingServiceThread::ServerNodeWithId2ServerId
    - BAIDU_SCOPED_LOCK
    - LOG
    - empty
    - NamingServiceWatcher*::OnAddedServers
    - emplace
    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
    - BAIDU_SCOPED_LOCK
    - LOG
    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:
    - RunNamingService
    - brpc::NamingServiceThread::EndWait
    - berror
    - LOG
    - c_str
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - NamingServiceMap::NamingServiceMap
    - brpc::NamingServiceExtension
    - butil::intrusive_ptr::EndWait
    - init
    - butil::intrusive_ptr<NamingServiceThread>*::swap
    - brpc::ParseNamingServiceUrl
    - butil::intrusive_ptr::reset
    - LOG
    - AddRefManually
    - butil::intrusive_ptr::WaitForFirstBatchOfServers
    - brpc::ChannelSignature
    - NamingServiceThread::NamingServiceThread
    - NamingService*::New
    - erase
    - std::unique_lock::unlock
    - butil::intrusive_ptr::Start
    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:
    - bthread_id_create
    - CHECK_EQ
    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:
    - begin
    - SocketMapRemove
    - EndWait
    - end
    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::unique
    - insert
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - std::set_difference
    - _last_sockets::swap
    - LOG
    - SocketMapInsert
    - SocketMapFind
    - empty
    - CHECK_EQ
    - swap
    - "std::map<NamingServiceWatcher*,\n                      const NamingServiceFilter*>::iterator::first::OnAddedServers"
    - SocketMapRemove
    - _last_sockets::begin
    - EndWait
    - resize
    - begin
    - ServerNodeWithId2ServerId
    - _watchers::end
    - _watchers::begin
    - std::inplace_merge
    - size
    - BAIDU_SCOPED_LOCK
    - clear
    - assign
    - std::sort
    - std::ostringstream::str
    - push_back
    - end
    - _last_sockets::size
    - butil::class_name_str
    - _last_sockets::end
    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: 6
    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:
    - begin
    - Destroy
    - bthread_join
    - BAIDU_SCOPED_LOCK
    - end
    - "std::map<NamingServiceWatcher*,\n                          const NamingServiceFilter*>::iterator::first::OnRemovedServers"
    - clear
    - erase
    - empty
    - 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:
    - RunNamingServiceReturnsQuickly
    - brpc::NamingServiceThread::RunThis
    - berror
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - clear
    - LOG
    - bthread_start_urgent
    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:
    - LOG
    - brpc::NamingServiceThread::WaitForFirstBatchOfServers
    - 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:
    - begin
    - end
    - NamingServiceFilter*::Accept
    - std::vector<ServerId>*::reserve
    - std::vector<ServerId>*::push_back
    - 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:
    - brpc::NamingServiceThread::ServerNodeWithId2ServerId
    - BAIDU_SCOPED_LOCK
    - LOG
    - empty
    - NamingServiceWatcher*::OnAddedServers
    - emplace
    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
    - BAIDU_SCOPED_LOCK
    - LOG
    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:
    - RunNamingService
    - brpc::NamingServiceThread::EndWait
    - berror
    - LOG
    - c_str
    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:
    - butil::intrusive_ptr::intrusive_ptr
    - NamingServiceMap::NamingServiceMap
    - brpc::NamingServiceExtension
    - butil::intrusive_ptr::EndWait
    - init
    - butil::intrusive_ptr<NamingServiceThread>*::swap
    - brpc::ParseNamingServiceUrl
    - butil::intrusive_ptr::reset
    - LOG
    - AddRefManually
    - butil::intrusive_ptr::WaitForFirstBatchOfServers
    - brpc::ChannelSignature
    - NamingServiceThread::NamingServiceThread
    - NamingService*::New
    - erase
    - std::unique_lock::unlock
    - butil::intrusive_ptr::Start
    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:
    - bthread_getconcurrency
    - butil::static_atomic::fetch_add
    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
    - fn
    - brpc::BeginRunningUserCode
    - brpc::EndRunningUserCodeInPool
    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:
    - bthread_getconcurrency
    - butil::static_atomic::fetch_add
    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
    - fn
    - brpc::BeginRunningUserCode
    - brpc::EndRunningUserCodeInPool
    linkageType: ''
    returnType: void
    signature: void RunUserCode(void (*fn)(void*), void* arg)
  - BBCount: 4
    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*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:45,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:48,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 53
    functionName: brpc::avc_nalu_read_uev
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::read_bit
    - BitStream*::empty
    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:56,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: brpc::avc_nalu_read_bit
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::read_bit
    - BitStream*::empty
    linkageType: ''
    returnType: int
    signature: int avc_nalu_read_bit(BitStream* stream, int8_t* v)
  - BBCount: 4
    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*::empty
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:45,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:48,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 18
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 53
      start: 24
    functionDepth: 0
    functionLinenumber: 24
    functionLinenumberEnd: 53
    functionName: brpc::avc_nalu_read_uev
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::read_bit
    - BitStream*::empty
    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:56,1
    - Dst: BitStream*::read_bit
      Src: /src/brpc/src/brpc/details/rtmp_utils.cpp:59,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 2
    argNames:
    - stream
    - v
    argTypes:
    - BitStream*
    - int8_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 61
      start: 55
    functionDepth: 0
    functionLinenumber: 55
    functionLinenumberEnd: 61
    functionName: brpc::avc_nalu_read_bit
    functionSourceFile: /src/brpc/src/brpc/details/rtmp_utils.cpp
    functionUses: 0
    functionsReached:
    - BitStream*::read_bit
    - BitStream*::empty
    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:
    - HPackOptions
    - brpc::HPacker::Encode
    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: 13
    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:
    - HPackOptions
    - brpc::HPacker::Encode
    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: 14
    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:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    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: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    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:64,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - SSL_CTX*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 66
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 66
    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: 70
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 70
    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: 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::SupportsPeerNameVerification
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SupportsPeerNameVerification()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:44,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:46,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 50
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - c_str
    - strncmp
    - 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: 64
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 64
    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:68,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringPiece::trim_spaces
      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: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:74,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:74,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:74,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:75,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:75,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:75,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:76,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:77,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:77,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:77,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:80,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 85
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - butil::StringPiece::size
    - brpc::size
    - LOG
    - data
    - strncasecmp
    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:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    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:95,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:96,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:102,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:108,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:109,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:115,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 121
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - certificate::substr
    - private_key::find
    - IsPemString
    - private_key::substr
    - certificate::find
    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:124,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:124,1
    - Dst: X509_get_alt_subject_names
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:125,1
    - Dst: sk_X509_NAME_num
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:127,1
    - Dst: sk_X509_NAME_value
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:129,1
    - Dst: X509_NAME_oneline
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:130,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:132,1
    - Dst: sk_X509_NAME_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:135,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 137
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 5
    functionsReached:
    - sk_X509_NAME_free
    - X509_NAME_oneline
    - STACK_OF
    - sk_X509_NAME_value
    - std::vector<std::string>*::push_back
    - sk_X509_NAME_num
    - 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:142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    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:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    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:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 160
    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:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 168
    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:176,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:178,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:178,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:180,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:180,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:181,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:181,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:182,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:183,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:183,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:187,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:189,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:190,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:190,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:200,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:200,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:200,1
    - Dst: BIO_read_filename
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:201,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:201,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:202,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:203,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:203,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:208,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:210,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:211,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:211,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:216,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:217,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:218,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:218,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:225,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:225,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:227,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:228,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:228,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:229,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:233,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:237,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:238,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:238,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: 243
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 243
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - std::unique_ptr::get
    - LOG
    - PEM_read_bio_X509
    - X509_free
    - BIO_new
    - SSL_CTX_add_extra_chain_cert
    - std::unique_ptr::unique_ptr
    - c_str
    - SSL_CTX_use_certificate
    - ERR_clear_error
    - std::unique_ptr::reset
    - brpc::SSLError
    - SSL_CTX_check_private_key
    - PEM_read_bio_PrivateKey
    - SSL_CTX_use_PrivateKey
    - BIO_read_filename
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - ERR_get_error
    - BIO_new_mem_buf
    - BIO_s_file
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:248,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:253,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:254,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:255,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:256,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:256,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:260,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:263,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 267
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - std::string::c_str
    - std::string::empty
    - SSL_CTX_load_verify_locations
    - ERR_get_error
    - brpc::SSLError
    - LOG
    - SSL_CTX_set_verify
    - expected_peer_name::empty
    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:273,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:273,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:273,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:277,1
    - Dst: brpc::LoadCertificate
      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: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:284,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:286,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:286,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:291,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:291,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:292,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 293
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 9
    functionsReached:
    - std::unique_ptr::get
    - client_cert::certificate::empty
    - ERR_get_error
    - brpc::ParseSSLProtocols
    - std::unique_ptr::release
    - brpc::SSLError
    - LOG
    - brpc::LoadCertificate
    - SSL_CTX_set_session_cache_mode
    - brpc::SetSSLOptions
    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:302,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:302,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:302,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:306,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:306,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:315,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:315,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:321,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:321,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:323,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: 324
      start: 295
    functionDepth: 1
    functionLinenumber: 295
    functionLinenumberEnd: 324
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - std::unique_ptr::get
    - SSL_CTX_sess_set_cache_size
    - ERR_get_error
    - std::unique_ptr::release
    - brpc::SSLError
    - LOG
    - brpc::LoadCertificate
    - brpc::SetSSLOptions
    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:328,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:333,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:333,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:333,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:338,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:343,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:345,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: 349
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 349
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - SSL_new
    - ERR_get_error
    - brpc::SSLError
    - LOG
    - SSL_set_connect_state
    - SSL_free
    - SSL_set_accept_state
    - 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: 353
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 353
    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:372,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 393
    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: 397
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 397
    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: 401
      start: 399
    functionDepth: 0
    functionLinenumber: 399
    functionLinenumberEnd: 401
    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:404,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 406
    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: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 39
      start: 37
    functionDepth: 0
    functionLinenumber: 37
    functionLinenumberEnd: 39
    functionName: brpc::SupportsPeerNameVerification
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool SupportsPeerNameVerification()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:44,1
    - Dst: strncmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:46,1
    - Dst: strlen
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:46,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 7
    argCount: 1
    argNames:
    - ' input'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 50
    functionName: brpc::IsPemString
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - c_str
    - strncmp
    - 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: 64
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 64
    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:68,1
    - Dst: data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: brpc::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:69,1
    - Dst: butil::StringSplitter::field
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringSplitter::length
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:71,1
    - Dst: butil::StringPiece::trim_spaces
      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: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:74,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:74,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:74,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:75,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:75,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:75,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:76,1
    - Dst: strncasecmp
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:77,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:77,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:77,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:80,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 14
    argCount: 1
    argNames:
    - ' str_protocol'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 85
      start: 66
    functionDepth: 2
    functionLinenumber: 66
    functionLinenumberEnd: 85
    functionName: brpc::ParseSSLProtocols
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 3
    functionsReached:
    - butil::StringSplitter::length
    - butil::StringSplitter::field
    - butil::StringPiece::trim_spaces
    - butil::StringPiece::data
    - butil::StringPiece::size
    - brpc::size
    - LOG
    - data
    - strncasecmp
    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:89,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 2
    argNames:
    - ' os'
    - ' ssl'
    argTypes:
    - std::ostream
    - SSLError
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 91
      start: 87
    functionDepth: 0
    functionLinenumber: 87
    functionLinenumberEnd: 91
    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:95,1
    - Dst: certificate::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:96,1
    - Dst: certificate::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:102,1
    - Dst: IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:108,1
    - Dst: private_key::find
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:109,1
    - Dst: private_key::substr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:115,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 25
    argCount: 2
    argNames:
    - ' os'
    - ' cert'
    argTypes:
    - std::ostream
    - CertInfo
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 121
      start: 93
    functionDepth: 0
    functionLinenumber: 93
    functionLinenumberEnd: 121
    functionName: '& operator<<(std::ostream& os, const CertInfo& cert)'
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 0
    functionsReached:
    - certificate::substr
    - private_key::find
    - IsPemString
    - private_key::substr
    - certificate::find
    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:124,1
    - Dst: STACK_OF
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:124,1
    - Dst: X509_get_alt_subject_names
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:125,1
    - Dst: sk_X509_NAME_num
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:127,1
    - Dst: sk_X509_NAME_value
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:129,1
    - Dst: X509_NAME_oneline
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:130,1
    - Dst: std::vector<std::string>*::push_back
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:132,1
    - Dst: sk_X509_NAME_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:135,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 10
    argCount: 2
    argNames:
    - x
    - hostnames
    argTypes:
    - X509*
    - std::vector<std::string>*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 137
      start: 123
    functionDepth: 0
    functionLinenumber: 123
    functionLinenumberEnd: 137
    functionName: brpc::ExtractHostnames
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 5
    functionsReached:
    - sk_X509_NAME_free
    - X509_NAME_oneline
    - STACK_OF
    - sk_X509_NAME_value
    - std::vector<std::string>*::push_back
    - sk_X509_NAME_num
    - 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:142,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ssl
    argTypes:
    - SSL*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 144
      start: 140
    functionDepth: 0
    functionLinenumber: 140
    functionLinenumberEnd: 144
    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:150,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - io
    argTypes:
    - BIO*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 152
      start: 148
    functionDepth: 0
    functionLinenumber: 148
    functionLinenumberEnd: 152
    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:158,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - x
    argTypes:
    - X509*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 160
      start: 156
    functionDepth: 0
    functionLinenumber: 156
    functionLinenumberEnd: 160
    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:166,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - k
    argTypes:
    - EVP_PKEY*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 168
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 168
    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:176,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:178,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:178,1
    - Dst: PEM_read_bio_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:180,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:180,1
    - Dst: SSL_CTX_use_PrivateKey
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:181,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:181,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:182,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:183,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:183,1
    - Dst: SSL_CTX_use_PrivateKey_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:187,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:188,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:189,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:190,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:190,1
    - Dst: std::unique_ptr::unique_ptr
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:196,1
    - Dst: brpc::IsPemString
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:197,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: BIO_new_mem_buf
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:198,1
    - Dst: std::unique_ptr::reset
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:200,1
    - Dst: BIO_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:200,1
    - Dst: BIO_s_file
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:200,1
    - Dst: BIO_read_filename
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:201,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:201,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:202,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:203,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:203,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:208,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:208,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:210,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:211,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:211,1
    - Dst: SSL_CTX_use_certificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:216,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:216,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:217,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:218,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:218,1
    - Dst: PEM_read_bio_X509
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:225,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:225,1
    - Dst: SSL_CTX_add_extra_chain_cert
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:226,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:227,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:228,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:228,1
    - Dst: X509_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:229,1
    - Dst: ERR_clear_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:233,1
    - Dst: SSL_CTX_check_private_key
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:236,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:237,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:238,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:238,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: 243
      start: 171
    functionDepth: 1
    functionLinenumber: 171
    functionLinenumberEnd: 243
    functionName: brpc::LoadCertificate
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - std::unique_ptr::get
    - LOG
    - PEM_read_bio_X509
    - X509_free
    - BIO_new
    - SSL_CTX_add_extra_chain_cert
    - std::unique_ptr::unique_ptr
    - c_str
    - SSL_CTX_use_certificate
    - ERR_clear_error
    - std::unique_ptr::reset
    - brpc::SSLError
    - SSL_CTX_check_private_key
    - PEM_read_bio_PrivateKey
    - SSL_CTX_use_PrivateKey
    - BIO_read_filename
    - brpc::IsPemString
    - SSL_CTX_use_PrivateKey_file
    - ERR_get_error
    - BIO_new_mem_buf
    - BIO_s_file
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: expected_peer_name::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:247,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:248,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:253,1
    - Dst: SSL_CTX_load_verify_locations
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:254,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:254,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:255,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:256,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:256,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:260,1
    - Dst: SSL_CTX_set_verify
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:263,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 4
    argNames:
    - ctx
    - ' ciphers'
    - protocols
    - ' verify'
    argTypes:
    - SSL_CTX*
    - std::string
    - int
    - VerifyOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 267
      start: 245
    functionDepth: 1
    functionLinenumber: 245
    functionLinenumberEnd: 267
    functionName: brpc::SetSSLOptions
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 6
    functionsReached:
    - std::string::c_str
    - std::string::empty
    - SSL_CTX_load_verify_locations
    - ERR_get_error
    - brpc::SSLError
    - LOG
    - SSL_CTX_set_verify
    - expected_peer_name::empty
    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:273,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:273,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:273,1
    - Dst: client_cert::certificate::empty
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:277,1
    - Dst: brpc::LoadCertificate
      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: brpc::ParseSSLProtocols
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:284,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:286,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:286,1
    - Dst: SSL_CTX_set_session_cache_mode
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:291,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:291,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:292,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 13
    argCount: 1
    argNames:
    - ' options'
    argTypes:
    - ChannelSSLOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 293
      start: 269
    functionDepth: 1
    functionLinenumber: 269
    functionLinenumberEnd: 293
    functionName: brpc::CreateClientSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 9
    functionsReached:
    - std::unique_ptr::get
    - client_cert::certificate::empty
    - ERR_get_error
    - brpc::ParseSSLProtocols
    - std::unique_ptr::release
    - brpc::SSLError
    - LOG
    - brpc::LoadCertificate
    - SSL_CTX_set_session_cache_mode
    - brpc::SetSSLOptions
    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:302,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:302,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:302,1
    - Dst: brpc::LoadCertificate
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:306,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:306,1
    - Dst: brpc::SetSSLOptions
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:315,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:315,1
    - Dst: SSL_CTX_sess_set_cache_size
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:321,1
    - Dst: std::unique_ptr::get
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:321,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:323,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: 324
      start: 295
    functionDepth: 1
    functionLinenumber: 295
    functionLinenumberEnd: 324
    functionName: brpc::CreateServerSSLContext
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 2
    functionsReached:
    - std::unique_ptr::get
    - SSL_CTX_sess_set_cache_size
    - ERR_get_error
    - std::unique_ptr::release
    - brpc::SSLError
    - LOG
    - brpc::LoadCertificate
    - brpc::SetSSLOptions
    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:328,1
    - Dst: SSL_new
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:331,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:333,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:333,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:333,1
    - Dst: SSL_set_fd
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:336,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    - Dst: brpc::SSLError
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    - Dst: ERR_get_error
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:337,1
    - Dst: SSL_free
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:338,1
    - Dst: SSL_set_accept_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:343,1
    - Dst: SSL_set_connect_state
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:345,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: 349
      start: 326
    functionDepth: 1
    functionLinenumber: 326
    functionLinenumberEnd: 349
    functionName: brpc::CreateSSLSession
    functionSourceFile: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp
    functionUses: 4
    functionsReached:
    - SSL_new
    - ERR_get_error
    - brpc::SSLError
    - LOG
    - SSL_set_connect_state
    - SSL_free
    - SSL_set_accept_state
    - 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: 353
      start: 351
    functionDepth: 0
    functionLinenumber: 351
    functionLinenumberEnd: 353
    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:372,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 20
    argCount: 2
    argNames:
    - fd
    - error_code
    argTypes:
    - int
    - int*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 393
      start: 355
    functionDepth: 0
    functionLinenumber: 355
    functionLinenumberEnd: 393
    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: 397
      start: 395
    functionDepth: 0
    functionLinenumber: 395
    functionLinenumberEnd: 397
    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: 401
      start: 399
    functionDepth: 0
    functionLinenumber: 399
    functionLinenumberEnd: 401
    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:404,1
    - Dst: SSL_get_version
      Src: /src/brpc/src/brpc/details/mesalink_ssl_helper.cpp:405,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ssl
    - sep
    argTypes:
    - std::ostream
    - SSL*
    - char*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 406
      start: 403
    functionDepth: 0
    functionLinenumber: 403
    functionLinenumberEnd: 406
    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
    - std::min
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - SocketUniquePtr::remote_side
    - OnAppHealthCheckDone::OnAppHealthCheckDone
    - brpc::HealthCheckManager::AppCheck
    - brpc::ChannelOptions::ChannelOptions
    - SocketUniquePtr::health_check_path
    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::cpuwide_time_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:
    - OnAppHealthCheckDone*::cntl::http_request
    - OnAppHealthCheckDone*::channel::CallMethod
    - static_cast<OnAppHealthCheckDone*>
    - OnAppHealthCheckDone*::cntl::Reset
    - butil::cpuwide_time_ms
    - 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::cpuwide_time_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:
    - bthread_usleep
    - SocketUniquePtr::Failed
    - Failed
    - std::unique_ptr::release
    - butil::cpuwide_time_ms
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - SocketUniquePtr::remote_side
    - ErrorText
    - brpc::HealthCheckManager::AppCheck
    - LOG_IF
    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::_user::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:197,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/details/health_check.cpp:197,1
    - Dst: SocketUniquePtr::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:199,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:202,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_add
      Src: /src/brpc/src/brpc/details/health_check.cpp:203,1
    - Dst: SocketUniquePtr::Revive
      Src: /src/brpc/src/brpc/details/health_check.cpp:207,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:209,1
    - Dst: brpc::HealthCheckManager::StartCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:214,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/health_check.cpp:219,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:222,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 39
    argCount: 1
    argNames:
    - next_abstime
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 155
    functionDepth: 3
    functionLinenumber: 155
    functionLinenumberEnd: 224
    functionName: brpc::HealthCheckTask::OnTriggeringTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - butil::seconds_from_now
    - SocketUniquePtr::_ninflight_app_health_check::fetch_add
    - SocketUniquePtr::WaitAndReset
    - berror
    - SocketUniquePtr::get
    - CHECK
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::Revive
    - SocketUniquePtr::health_check_path
    - SocketUniquePtr::CheckHealth
    - brpc::HealthCheckManager::StartCheck
    - SocketUniquePtr::_user::CheckHealth
    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: 228
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 228
    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:231,1
    - Dst: HealthCheckTask::HealthCheckTask
      Src: /src/brpc/src/brpc/details/health_check.cpp:231,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - delay_ms
    argTypes:
    - SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 4
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: brpc::StartHealthCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - HealthCheckTask::HealthCheckTask
    - brpc::PeriodicTaskManager::StartTaskAt
    - butil::milliseconds_from_now
    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
    - std::min
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - SocketUniquePtr::remote_side
    - OnAppHealthCheckDone::OnAppHealthCheckDone
    - brpc::HealthCheckManager::AppCheck
    - brpc::ChannelOptions::ChannelOptions
    - SocketUniquePtr::health_check_path
    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::cpuwide_time_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:
    - OnAppHealthCheckDone*::cntl::http_request
    - OnAppHealthCheckDone*::channel::CallMethod
    - static_cast<OnAppHealthCheckDone*>
    - OnAppHealthCheckDone*::cntl::Reset
    - butil::cpuwide_time_ms
    - 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::cpuwide_time_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:
    - bthread_usleep
    - SocketUniquePtr::Failed
    - Failed
    - std::unique_ptr::release
    - butil::cpuwide_time_ms
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::_ninflight_app_health_check::fetch_sub
    - SocketUniquePtr::remote_side
    - ErrorText
    - brpc::HealthCheckManager::AppCheck
    - LOG_IF
    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::_user::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:197,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/details/health_check.cpp:197,1
    - Dst: SocketUniquePtr::CheckHealth
      Src: /src/brpc/src/brpc/details/health_check.cpp:199,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:202,1
    - Dst: SocketUniquePtr::_ninflight_app_health_check::fetch_add
      Src: /src/brpc/src/brpc/details/health_check.cpp:203,1
    - Dst: SocketUniquePtr::Revive
      Src: /src/brpc/src/brpc/details/health_check.cpp:207,1
    - Dst: SocketUniquePtr::health_check_path
      Src: /src/brpc/src/brpc/details/health_check.cpp:209,1
    - Dst: brpc::HealthCheckManager::StartCheck
      Src: /src/brpc/src/brpc/details/health_check.cpp:210,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/health_check.cpp:214,1
    - Dst: berror
      Src: /src/brpc/src/brpc/details/health_check.cpp:219,1
    - Dst: butil::seconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:222,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 39
    argCount: 1
    argNames:
    - next_abstime
    argTypes:
    - timespec*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 155
    functionDepth: 3
    functionLinenumber: 155
    functionLinenumberEnd: 224
    functionName: brpc::HealthCheckTask::OnTriggeringTask
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - butil::seconds_from_now
    - SocketUniquePtr::_ninflight_app_health_check::fetch_add
    - SocketUniquePtr::WaitAndReset
    - berror
    - SocketUniquePtr::get
    - CHECK
    - LOG
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::Revive
    - SocketUniquePtr::health_check_path
    - SocketUniquePtr::CheckHealth
    - brpc::HealthCheckManager::StartCheck
    - SocketUniquePtr::_user::CheckHealth
    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: 228
      start: 226
    functionDepth: 0
    functionLinenumber: 226
    functionLinenumberEnd: 228
    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:231,1
    - Dst: HealthCheckTask::HealthCheckTask
      Src: /src/brpc/src/brpc/details/health_check.cpp:231,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/details/health_check.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - delay_ms
    argTypes:
    - SocketId
    - int64_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 4
    functionLinenumber: 230
    functionLinenumberEnd: 233
    functionName: brpc::StartHealthCheck
    functionSourceFile: /src/brpc/src/brpc/details/health_check.cpp
    functionUses: 0
    functionsReached:
    - HealthCheckTask::HealthCheckTask
    - brpc::PeriodicTaskManager::StartTaskAt
    - butil::milliseconds_from_now
    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: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 59
    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: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    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:85,1
    - Dst: HttpMessage*::_cur_header::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 89
    functionName: brpc::HttpMessage::on_header_field
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMessage*::_cur_header::append
    - HttpMessage*::_cur_header::clear
    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:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:99,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:102,1
    - Dst: CanFoldedInLine
      Src: /src/brpc/src/brpc/details/http_message.cpp:103,1
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:105,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:108,1
    - Dst: HttpMessage*::_cur_value::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:110,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:111,1
    - Dst: HeaderValueDelimiter
      Src: /src/brpc/src/brpc/details/http_message.cpp:112,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:116,1
    - Dst: HttpMessage*::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/details/http_message.cpp:119,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:121,1
    - Dst: HttpMessage*::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:122,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:124,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:125,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:130,1
    - Dst: HttpReasonPhrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:133,1
    - Dst: butil::IOBufBuilder*::write
      Src: /src/brpc/src/brpc/details/http_message.cpp:139,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 36
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 142
    functionName: brpc::HttpMessage::on_header_value
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - GetOrAddHeader
    - HttpMessage*::_cur_value::empty
    - HttpMessage*::_vmsgbuilder::get
    - AddHeader
    - HttpMethod2Str
    - HttpMessage*::header
    - butil::IOBufBuilder*::write
    - butil::my_ip
    - HttpMessage*::_vmsgbuilder::reset
    - LOG
    - CanFoldedInLine
    - butil::IOBufBuilder::IOBufBuilder
    - HttpMessage*::_cur_value::append
    - HeaderValueDelimiter
    - HttpMessage*::_cur_header::empty
    - HttpReasonPhrase
    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:150,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:153,1
    - Dst: set_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:154,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:159,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:164,1
    - Dst: static_cast<HttpMethod>
      Src: /src/brpc/src/brpc/details/http_message.cpp:164,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:167,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:177,1
    - Dst: _host::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:178,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:179,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/details/http_message.cpp:181,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:188,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/details/http_message.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:191,1
    - Dst: RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:211,1
    - Dst: HttpMessage*::request_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:220,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 34
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 224
    functionName: brpc::HttpMessage::on_headers_complete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - _host::empty
    - set_status_code
    - set_method
    - HttpMessage*::header
    - uri
    - SetHostAndPort
    - static_cast<HttpMethod>
    - LOG
    - host
    - set_version
    - before_http_1_1
    - HttpMessage*::request_method
    - RemoveHeader
    - GetHeader
    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:227,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:228,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:231,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:233,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:234,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:237,1
    - Dst: lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:238,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:240,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' mu'
    argTypes:
    - std::unique_lock<butil::Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 246
    functionName: brpc::HttpMessage::UnlockAndFlushToBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - ProgressiveReader*::OnReadOnePart
    - unlock
    - butil::StringPiece::data
    - butil::StringPiece::size
    - butil::Status::ok
    - butil::IOBuf::backing_block
    - empty
    - ProgressiveReader*::OnEndOfMessage
    - lock
    - movable
    - butil::IOBuf::backing_block_num
    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:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 251
    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:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 255
    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: 13
    BranchProfiles: []
    Callsites:
    - Dst: header
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:276,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:276,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:277,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/http_message.cpp:280,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/details/http_message.cpp:282,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/details/http_message.cpp:283,1
    - Dst: write
      Src: /src/brpc/src/brpc/details/http_message.cpp:284,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:284,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:284,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:295,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:298,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/http_message.cpp:312,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:313,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:316,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/details/http_message.cpp:317,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:318,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:323,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:326,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:327,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:330,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:332,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:333,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 54
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 257
    functionDepth: 2
    functionLinenumber: 257
    functionLinenumberEnd: 335
    functionName: brpc::HttpMessage::OnBody
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - header
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - ProgressiveReader*::OnReadOnePart
    - std::min
    - LOG
    - butil::Status::ok
    - append
    - write
    - std::unique_lock::unlock
    - ProgressiveReader*::OnEndOfMessage
    - std::unique_lock::lock
    - size
    - butil::BaseIteratorRangeToNumberTraits::max
    - append_to
    - reset
    - buf
    - bthread_usleep
    - butil::ToPrintableString
    - std::string::data
    - 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:343,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:343,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:344,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/http_message.cpp:346,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:360,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:363,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:366,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:367,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:367,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 370
    functionName: brpc::HttpMessage::OnMessageComplete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - buf
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - clear
    - LOG
    - std::unique_lock::lock
    - ProgressiveReader*::OnEndOfMessage
    - std::unique_lock::unlock
    - reset
    - 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:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 375
    functionDepth: 2
    functionLinenumber: 375
    functionLinenumberEnd: 378
    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: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 384
    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:388,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:389,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:399,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:401,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:406,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:407,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:407,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:417,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:418,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:419,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:420,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:421,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:421,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:421,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:422,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:423,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/http_message.cpp:427,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 434
    functionName: brpc::HttpMessage::SetBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - ProgressiveReader*::OnReadOnePart
    - butil::StringPiece::data
    - butil::StringPiece::size
    - butil::Status::ok
    - butil::IOBuf::backing_block
    - empty
    - ProgressiveReader*::OnEndOfMessage
    - std::unique_lock::unlock
    - movable
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf::backing_block_num
    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:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - read_body_progressively
    - request_method
    argTypes:
    - bool
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 454
    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:464,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 456
    functionDepth: 2
    functionLinenumber: 456
    functionLinenumberEnd: 467
    functionName: HttpMessage::~HttpMessage()
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    - ProgressiveReader*::OnEndOfMessage
    linkageType: ''
    returnType: void
    signature: void HttpMessage::~HttpMessage()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:474,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:479,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/http_message.cpp:483,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 488
    functionName: brpc::HttpMessage::ParseFromArray
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 13
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - http_parser_execute
    - brpc::HttpMessage::Completed
    - 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:491,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:492,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:495,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:495,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:505,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:506,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:507,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:511,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:512,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:513,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:513,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/details/http_message.cpp:519,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:522,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 528
    functionName: brpc::HttpMessage::ParseFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 18
    functionsReached:
    - butil::StringPiece::empty
    - http_parser_execute
    - butil::StringPiece::data
    - LOG
    - butil::StringPiece::size
    - butil::IOBuf::backing_block
    - butil::IOBuf::empty
    - butil::IOBuf::size
    - butil::ToPrintable::ToPrintable
    - brpc::HttpMessage::Completed
    - butil::IOBuf::backing_block_num
    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: 552
      start: 530
    functionDepth: 0
    functionLinenumber: 530
    functionLinenumberEnd: 552
    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:555,1
    - Dst: DescribeHttpParserFlags
      Src: /src/brpc/src/brpc/details/http_message.cpp:557,1
    - Dst: http_parser_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:558,1
    - Dst: http_parser_header_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:559,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/details/http_message.cpp:561,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:572,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' parser'
    argTypes:
    - std::ostream
    - http_parser
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 577
    functionName: '& operator<<(std::ostream& os, const http_parser& parser)'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMethod2Str
    - http_errno_description
    - http_parser_state_name
    - DescribeHttpParserFlags
    - http_parser_type_name
    - 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:603,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:604,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:604,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:605,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/src/brpc/details/http_message.cpp:606,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:607,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:608,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:610,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:611,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:612,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:613,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:618,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:622,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:624,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:635,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:637,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:638,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:639,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:640,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:647,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:648,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:651,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:652,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:655,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:659,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:662,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:663,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:663,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/details/http_message.cpp:669,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:673,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:674,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:675,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: 677
      start: 599
    functionDepth: 1
    functionLinenumber: 599
    functionLinenumberEnd: 677
    functionName: brpc::MakeRawHttpRequest
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpMethod2Str
    - HttpHeader*::HeaderBegin
    - HttpHeader*::uri
    - butil::IOBufBuilder::move_to
    - butil::Base64Encode
    - host
    - butil::IOBuf*::length
    - HttpHeader*::content_type
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - port
    - PrintWithoutHost
    - HttpHeader*::major_version
    - butil::IOBufBuilder::IOBufBuilder
    - butil::IOBuf*::append
    - HttpHeader*::method
    - brpc::empty
    - HttpHeader*::GetHeader
    - HttpHeader*::HeaderEnd
    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:690,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:691,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:692,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:692,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:693,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:694,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:695,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:696,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:702,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:706,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:708,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:713,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:716,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:721,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:726,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:731,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:736,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:737,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:740,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:741,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:745,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:752,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:752,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 35
    argCount: 3
    argNames:
    - response
    - h
    - content
    argTypes:
    - butil::IOBuf*
    - HttpHeader*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 754
    functionName: brpc::MakeRawHttpResponse
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - HttpHeader*::HeaderBegin
    - butil::IOBuf*::append
    - HttpHeader*::method
    - butil::IOBufBuilder::move_to
    - HttpHeader*::HeaderEnd
    - butil::IOBuf::Movable
    - butil::IOBuf*::length
    - HttpHeader*::major_version
    - HttpHeader*::GetHeader
    - HttpHeader*::reason_phrase
    - butil::IOBufBuilder::IOBufBuilder
    - HttpHeader*::status_code
    - HttpHeader*::content_type
    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: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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:57,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 53
    functionDepth: 1
    functionLinenumber: 53
    functionLinenumberEnd: 59
    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: 68
      start: 62
    functionDepth: 0
    functionLinenumber: 62
    functionLinenumberEnd: 68
    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:85,1
    - Dst: HttpMessage*::_cur_header::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:87,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 89
      start: 80
    functionDepth: 1
    functionLinenumber: 80
    functionLinenumberEnd: 89
    functionName: brpc::HttpMessage::on_header_field
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMessage*::_cur_header::append
    - HttpMessage*::_cur_header::clear
    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:98,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:99,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:102,1
    - Dst: CanFoldedInLine
      Src: /src/brpc/src/brpc/details/http_message.cpp:103,1
    - Dst: GetOrAddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:105,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:108,1
    - Dst: HttpMessage*::_cur_value::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:110,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:111,1
    - Dst: HeaderValueDelimiter
      Src: /src/brpc/src/brpc/details/http_message.cpp:112,1
    - Dst: HttpMessage*::_cur_value::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:116,1
    - Dst: HttpMessage*::_vmsgbuilder::get
      Src: /src/brpc/src/brpc/details/http_message.cpp:119,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/http_message.cpp:121,1
    - Dst: HttpMessage*::_vmsgbuilder::reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:122,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:124,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:125,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/details/http_message.cpp:130,1
    - Dst: HttpReasonPhrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:133,1
    - Dst: butil::IOBufBuilder*::write
      Src: /src/brpc/src/brpc/details/http_message.cpp:139,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 36
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 91
    functionDepth: 1
    functionLinenumber: 91
    functionLinenumberEnd: 142
    functionName: brpc::HttpMessage::on_header_value
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - GetOrAddHeader
    - HttpMessage*::_cur_value::empty
    - HttpMessage*::_vmsgbuilder::get
    - AddHeader
    - HttpMethod2Str
    - HttpMessage*::header
    - butil::IOBufBuilder*::write
    - butil::my_ip
    - HttpMessage*::_vmsgbuilder::reset
    - LOG
    - CanFoldedInLine
    - butil::IOBufBuilder::IOBufBuilder
    - HttpMessage*::_cur_value::append
    - HeaderValueDelimiter
    - HttpMessage*::_cur_header::empty
    - HttpReasonPhrase
    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:150,1
    - Dst: HttpMessage*::header
      Src: /src/brpc/src/brpc/details/http_message.cpp:153,1
    - Dst: set_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:154,1
    - Dst: set_status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:159,1
    - Dst: set_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:164,1
    - Dst: static_cast<HttpMethod>
      Src: /src/brpc/src/brpc/details/http_message.cpp:164,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:166,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:167,1
    - Dst: uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:177,1
    - Dst: _host::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:178,1
    - Dst: GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:179,1
    - Dst: SetHostAndPort
      Src: /src/brpc/src/brpc/details/http_message.cpp:181,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:188,1
    - Dst: before_http_1_1
      Src: /src/brpc/src/brpc/details/http_message.cpp:189,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:191,1
    - Dst: RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:209,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:211,1
    - Dst: HttpMessage*::request_method
      Src: /src/brpc/src/brpc/details/http_message.cpp:220,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 34
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 224
      start: 144
    functionDepth: 1
    functionLinenumber: 144
    functionLinenumberEnd: 224
    functionName: brpc::HttpMessage::on_headers_complete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - _host::empty
    - set_status_code
    - set_method
    - HttpMessage*::header
    - uri
    - SetHostAndPort
    - static_cast<HttpMethod>
    - LOG
    - host
    - set_version
    - before_http_1_1
    - HttpMessage*::request_method
    - RemoveHeader
    - GetHeader
    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:227,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:228,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:231,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:233,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:234,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:235,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:236,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:237,1
    - Dst: lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:238,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:240,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:241,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 16
    argCount: 1
    argNames:
    - ' mu'
    argTypes:
    - std::unique_lock<butil::Mutex>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 246
      start: 226
    functionDepth: 1
    functionLinenumber: 226
    functionLinenumberEnd: 246
    functionName: brpc::HttpMessage::UnlockAndFlushToBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 2
    functionsReached:
    - ProgressiveReader*::OnReadOnePart
    - unlock
    - butil::StringPiece::data
    - butil::StringPiece::size
    - butil::Status::ok
    - butil::IOBuf::backing_block
    - empty
    - ProgressiveReader*::OnEndOfMessage
    - lock
    - movable
    - butil::IOBuf::backing_block_num
    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:250,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - parser
    - at
    - length
    argTypes:
    - http_parser*
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 251
      start: 248
    functionDepth: 0
    functionLinenumber: 248
    functionLinenumberEnd: 251
    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:254,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - parser
    argTypes:
    - http_parser*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 255
      start: 253
    functionDepth: 0
    functionLinenumber: 253
    functionLinenumberEnd: 255
    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: 13
    BranchProfiles: []
    Callsites:
    - Dst: header
      Src: /src/brpc/src/brpc/details/http_message.cpp:275,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:276,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:276,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:277,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/details/http_message.cpp:280,1
    - Dst: butil::ToPrintableString
      Src: /src/brpc/src/brpc/details/http_message.cpp:282,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/details/http_message.cpp:283,1
    - Dst: write
      Src: /src/brpc/src/brpc/details/http_message.cpp:284,1
    - Dst: std::string::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:284,1
    - Dst: std::string::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:284,1
    - Dst: append_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:295,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:298,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/http_message.cpp:312,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/http_message.cpp:313,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:316,1
    - Dst: bthread_usleep
      Src: /src/brpc/src/brpc/details/http_message.cpp:317,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:318,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:323,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:326,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:327,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:330,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:332,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:333,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 54
    argCount: 2
    argNames:
    - at
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 335
      start: 257
    functionDepth: 2
    functionLinenumber: 257
    functionLinenumberEnd: 335
    functionName: brpc::HttpMessage::OnBody
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - header
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - ProgressiveReader*::OnReadOnePart
    - std::min
    - LOG
    - butil::Status::ok
    - append
    - write
    - std::unique_lock::unlock
    - ProgressiveReader*::OnEndOfMessage
    - std::unique_lock::lock
    - size
    - butil::BaseIteratorRangeToNumberTraits::max
    - append_to
    - reset
    - buf
    - bthread_usleep
    - butil::ToPrintableString
    - std::string::data
    - 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:343,1
    - Dst: buf
      Src: /src/brpc/src/brpc/details/http_message.cpp:343,1
    - Dst: reset
      Src: /src/brpc/src/brpc/details/http_message.cpp:344,1
    - Dst: clear
      Src: /src/brpc/src/brpc/details/http_message.cpp:346,1
    - Dst: brpc::HttpMessage::UnlockAndFlushToBodyReader
      Src: /src/brpc/src/brpc/details/http_message.cpp:360,1
    - Dst: std::unique_lock::lock
      Src: /src/brpc/src/brpc/details/http_message.cpp:363,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:366,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:367,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:367,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 370
      start: 337
    functionDepth: 2
    functionLinenumber: 337
    functionLinenumberEnd: 370
    functionName: brpc::HttpMessage::OnMessageComplete
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - buf
    - brpc::HttpMessage::UnlockAndFlushToBodyReader
    - clear
    - LOG
    - std::unique_lock::lock
    - ProgressiveReader*::OnEndOfMessage
    - std::unique_lock::unlock
    - reset
    - 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:376,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 378
      start: 375
    functionDepth: 2
    functionLinenumber: 375
    functionLinenumberEnd: 378
    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: 379
      start: 379
    functionDepth: 0
    functionLinenumber: 379
    functionLinenumberEnd: 379
    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:384,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 384
      start: 384
    functionDepth: 0
    functionLinenumber: 384
    functionLinenumberEnd: 384
    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:388,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:389,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:399,1
    - Dst: empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:401,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:406,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:407,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:407,1
    - Dst: movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:417,1
    - Dst: std::unique_lock::unlock
      Src: /src/brpc/src/brpc/details/http_message.cpp:418,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:419,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:420,1
    - Dst: ProgressiveReader*::OnReadOnePart
      Src: /src/brpc/src/brpc/details/http_message.cpp:421,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:421,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:421,1
    - Dst: butil::Status::ok
      Src: /src/brpc/src/brpc/details/http_message.cpp:422,1
    - Dst: ProgressiveReader*::OnEndOfMessage
      Src: /src/brpc/src/brpc/details/http_message.cpp:423,1
    - Dst: pthread_once
      Src: /src/brpc/src/brpc/details/http_message.cpp:427,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 33
    argCount: 1
    argNames:
    - r
    argTypes:
    - ProgressiveReader*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 434
      start: 386
    functionDepth: 2
    functionLinenumber: 386
    functionLinenumberEnd: 434
    functionName: brpc::HttpMessage::SetBodyReader
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - pthread_once
    - ProgressiveReader*::OnReadOnePart
    - butil::StringPiece::data
    - butil::StringPiece::size
    - butil::Status::ok
    - butil::IOBuf::backing_block
    - empty
    - ProgressiveReader*::OnEndOfMessage
    - std::unique_lock::unlock
    - movable
    - BuiltinServiceTest::TestStatus
    - butil::IOBuf::backing_block_num
    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:451,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 4
    argCount: 2
    argNames:
    - read_body_progressively
    - request_method
    argTypes:
    - bool
    - HttpMethod
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 454
      start: 447
    functionDepth: 0
    functionLinenumber: 447
    functionLinenumberEnd: 454
    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:464,1
    - Dst: BuiltinServiceTest::TestStatus
      Src: /src/brpc/src/brpc/details/http_message.cpp:465,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 467
      start: 456
    functionDepth: 2
    functionLinenumber: 456
    functionLinenumberEnd: 467
    functionName: HttpMessage::~HttpMessage()
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - BuiltinServiceTest::TestStatus
    - ProgressiveReader*::OnEndOfMessage
    linkageType: ''
    returnType: void
    signature: void HttpMessage::~HttpMessage()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:470,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:474,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:479,1
    - Dst: butil::BasicStringPiece::BasicStringPiece
      Src: /src/brpc/src/brpc/details/http_message.cpp:483,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 14
    argCount: 2
    argNames:
    - data
    - length
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 488
      start: 469
    functionDepth: 1
    functionLinenumber: 469
    functionLinenumberEnd: 488
    functionName: brpc::HttpMessage::ParseFromArray
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 13
    functionsReached:
    - butil::BasicStringPiece::BasicStringPiece
    - http_parser_execute
    - brpc::HttpMessage::Completed
    - 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:491,1
    - Dst: butil::IOBuf::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:492,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/http_message.cpp:495,1
    - Dst: butil::IOBuf::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:495,1
    - Dst: butil::IOBuf::backing_block_num
      Src: /src/brpc/src/brpc/details/http_message.cpp:505,1
    - Dst: butil::IOBuf::backing_block
      Src: /src/brpc/src/brpc/details/http_message.cpp:506,1
    - Dst: butil::StringPiece::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:507,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:511,1
    - Dst: http_parser_execute
      Src: /src/brpc/src/brpc/details/http_message.cpp:512,1
    - Dst: butil::StringPiece::data
      Src: /src/brpc/src/brpc/details/http_message.cpp:513,1
    - Dst: butil::StringPiece::size
      Src: /src/brpc/src/brpc/details/http_message.cpp:513,1
    - Dst: butil::ToPrintable::ToPrintable
      Src: /src/brpc/src/brpc/details/http_message.cpp:519,1
    - Dst: brpc::HttpMessage::Completed
      Src: /src/brpc/src/brpc/details/http_message.cpp:522,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 28
    argCount: 1
    argNames:
    - buf
    argTypes:
    - butil::IOBuf
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 528
      start: 490
    functionDepth: 1
    functionLinenumber: 490
    functionLinenumberEnd: 528
    functionName: brpc::HttpMessage::ParseFromIOBuf
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 18
    functionsReached:
    - butil::StringPiece::empty
    - http_parser_execute
    - butil::StringPiece::data
    - LOG
    - butil::StringPiece::size
    - butil::IOBuf::backing_block
    - butil::IOBuf::empty
    - butil::IOBuf::size
    - butil::ToPrintable::ToPrintable
    - brpc::HttpMessage::Completed
    - butil::IOBuf::backing_block_num
    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: 552
      start: 530
    functionDepth: 0
    functionLinenumber: 530
    functionLinenumberEnd: 552
    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:555,1
    - Dst: DescribeHttpParserFlags
      Src: /src/brpc/src/brpc/details/http_message.cpp:557,1
    - Dst: http_parser_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:558,1
    - Dst: http_parser_header_state_name
      Src: /src/brpc/src/brpc/details/http_message.cpp:559,1
    - Dst: http_errno_description
      Src: /src/brpc/src/brpc/details/http_message.cpp:561,1
    - Dst: HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:572,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 2
    argNames:
    - ' os'
    - ' parser'
    argTypes:
    - std::ostream
    - http_parser
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 577
      start: 554
    functionDepth: 0
    functionLinenumber: 554
    functionLinenumberEnd: 577
    functionName: '& operator<<(std::ostream& os, const http_parser& parser)'
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpMethod2Str
    - http_errno_description
    - http_parser_state_name
    - DescribeHttpParserFlags
    - http_parser_type_name
    - 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:603,1
    - Dst: brpc::HttpMethod2Str
      Src: /src/brpc/src/brpc/details/http_message.cpp:604,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:604,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:605,1
    - Dst: PrintWithoutHost
      Src: /src/brpc/src/brpc/details/http_message.cpp:606,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:607,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:608,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:610,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:611,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:612,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:613,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:618,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:622,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:624,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:635,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:637,1
    - Dst: host
      Src: /src/brpc/src/brpc/details/http_message.cpp:638,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:639,1
    - Dst: port
      Src: /src/brpc/src/brpc/details/http_message.cpp:640,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:647,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:648,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:651,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:652,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:655,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:659,1
    - Dst: HttpHeader*::uri
      Src: /src/brpc/src/brpc/details/http_message.cpp:662,1
    - Dst: brpc::empty
      Src: /src/brpc/src/brpc/details/http_message.cpp:663,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:663,1
    - Dst: butil::Base64Encode
      Src: /src/brpc/src/brpc/details/http_message.cpp:669,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:673,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:674,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:675,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: 677
      start: 599
    functionDepth: 1
    functionLinenumber: 599
    functionLinenumberEnd: 677
    functionName: brpc::MakeRawHttpRequest
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - brpc::HttpMethod2Str
    - HttpHeader*::HeaderBegin
    - HttpHeader*::uri
    - butil::IOBufBuilder::move_to
    - butil::Base64Encode
    - host
    - butil::IOBuf*::length
    - HttpHeader*::content_type
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - port
    - PrintWithoutHost
    - HttpHeader*::major_version
    - butil::IOBufBuilder::IOBufBuilder
    - butil::IOBuf*::append
    - HttpHeader*::method
    - brpc::empty
    - HttpHeader*::GetHeader
    - HttpHeader*::HeaderEnd
    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:690,1
    - Dst: HttpHeader*::major_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:691,1
    - Dst: HttpHeader*::minor_version
      Src: /src/brpc/src/brpc/details/http_message.cpp:692,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:692,1
    - Dst: HttpHeader*::reason_phrase
      Src: /src/brpc/src/brpc/details/http_message.cpp:693,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:694,1
    - Dst: HttpHeader*::status_code
      Src: /src/brpc/src/brpc/details/http_message.cpp:695,1
    - Dst: HttpHeader*::method
      Src: /src/brpc/src/brpc/details/http_message.cpp:696,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:702,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:706,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:708,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:713,1
    - Dst: HttpHeader*::GetHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:716,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:721,1
    - Dst: HttpHeader*::RemoveHeader
      Src: /src/brpc/src/brpc/details/http_message.cpp:726,1
    - Dst: butil::IOBuf*::length
      Src: /src/brpc/src/brpc/details/http_message.cpp:731,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:736,1
    - Dst: HttpHeader*::content_type
      Src: /src/brpc/src/brpc/details/http_message.cpp:737,1
    - Dst: HttpHeader*::HeaderBegin
      Src: /src/brpc/src/brpc/details/http_message.cpp:740,1
    - Dst: HttpHeader*::HeaderEnd
      Src: /src/brpc/src/brpc/details/http_message.cpp:741,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/details/http_message.cpp:745,1
    - Dst: butil::IOBuf*::append
      Src: /src/brpc/src/brpc/details/http_message.cpp:752,1
    - Dst: butil::IOBuf::Movable
      Src: /src/brpc/src/brpc/details/http_message.cpp:752,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 35
    argCount: 3
    argNames:
    - response
    - h
    - content
    argTypes:
    - butil::IOBuf*
    - HttpHeader*
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 754
      start: 687
    functionDepth: 1
    functionLinenumber: 687
    functionLinenumberEnd: 754
    functionName: brpc::MakeRawHttpResponse
    functionSourceFile: /src/brpc/src/brpc/details/http_message.cpp
    functionUses: 0
    functionsReached:
    - HttpHeader*::RemoveHeader
    - HttpHeader*::minor_version
    - HttpHeader*::HeaderBegin
    - butil::IOBuf*::append
    - HttpHeader*::method
    - butil::IOBufBuilder::move_to
    - HttpHeader*::HeaderEnd
    - butil::IOBuf::Movable
    - butil::IOBuf*::length
    - HttpHeader*::major_version
    - HttpHeader*::GetHeader
    - HttpHeader*::reason_phrase
    - butil::IOBufBuilder::IOBufBuilder
    - HttpHeader*::status_code
    - HttpHeader*::content_type
    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::SetNameSimple
      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::SetNameSimple
    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:
    - front
    - BAIDU_SCOPED_LOCK
    - UserCode::fn
    - butil::cpuwide_time_us
    - bthread::run_worker_startfn
    - pthread_cond_wait
    - pop_front
    - logging::ComlogInitializer::ComlogInitializer
    - empty
    - size
    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:
    - exit
    - UserCodeBackupPool::UserCodeBackupPool
    - LOG
    - Init
    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_mutex_unlock
    - fetch_sub
    - pthread_mutex_lock
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - queue::push_back
    - pthread_cond_signal
    - queue::size
    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::SetNameSimple
      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::SetNameSimple
    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:
    - front
    - BAIDU_SCOPED_LOCK
    - UserCode::fn
    - butil::cpuwide_time_us
    - bthread::run_worker_startfn
    - pthread_cond_wait
    - pop_front
    - logging::ComlogInitializer::ComlogInitializer
    - empty
    - size
    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:
    - exit
    - UserCodeBackupPool::UserCodeBackupPool
    - LOG
    - Init
    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_mutex_unlock
    - fetch_sub
    - pthread_mutex_lock
    - brpc::InitUserCodeBackupPoolOnceOrDie
    - queue::push_back
    - pthread_cond_signal
    - queue::size
    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: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    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:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - saved_error
    argTypes:
    - CallId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    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: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    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:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 59
    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: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    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:66,1
    - Dst: _current_call::sending_sock::reset
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:67,1
    - Dst: release
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::ControllerPrivateAccessor::move_in_server_receiving_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - release
    - CHECK
    - _current_call::sending_sock::reset
    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: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    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:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - security_mode
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 77
    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: 82
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 82
    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: 87
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 87
    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:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 92
    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:
    - 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: 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:
    - Dst: brpc::ControllerPrivateAccessor::set_pipelined_count
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: brpc::ControllerPrivateAccessor::set_mysql_statement_type
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - brpc::ControllerPrivateAccessor::set_pipelined_count
    linkageType: ''
    returnType: void
    signature: void set_mysql_statement_type(uint32_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    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: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    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: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    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: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    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: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    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:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ReadableProgressiveAttachment*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 133
    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: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    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: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    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: brpc::ControllerPrivateAccessor::set_bind_sock_action
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - action
    argTypes:
    - BindSockAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: brpc::ControllerPrivateAccessor::set_bind_sock_action
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 1
    functionsReached:
    - brpc::ControllerPrivateAccessor::set_bind_sock_action
    linkageType: ''
    returnType: void
    signature: void set_bind_sock_action(BindSockAction action)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _bind_sock::ReAddress
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: brpc::ControllerPrivateAccessor::get_bind_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _bind_sock::ReAddress
    linkageType: ''
    returnType: void
    signature: void get_bind_sock(SocketUniquePtr* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ControllerPrivateAccessor::set_bind_sock_action
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:151,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sock_id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 3
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: brpc::ControllerPrivateAccessor::use_bind_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - brpc::ControllerPrivateAccessor::set_bind_sock_action
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void use_bind_sock(SocketId sock_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - d
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: brpc::ControllerPrivateAccessor::set_session_data
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_session_data(void* d)
  - 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: brpc::ControllerPrivateAccessor::session_data
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * session_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: protocol_param
      Src: /src/brpc/src/brpc/details/controller_private_accessor.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: '& 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: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: '& 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: 162
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 162
    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: 168
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 168
    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:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    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:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - size
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    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: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    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: 183
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 183
    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: 193
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 193
    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: 45
      start: 43
    functionDepth: 0
    functionLinenumber: 43
    functionLinenumberEnd: 45
    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:49,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - id
    - saved_error
    argTypes:
    - CallId
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 47
    functionDepth: 0
    functionLinenumber: 47
    functionLinenumberEnd: 50
    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: 55
      start: 52
    functionDepth: 0
    functionLinenumber: 52
    functionLinenumberEnd: 55
    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:58,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 59
      start: 57
    functionDepth: 1
    functionLinenumber: 57
    functionLinenumberEnd: 59
    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: 63
      start: 61
    functionDepth: 0
    functionLinenumber: 61
    functionLinenumberEnd: 63
    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:66,1
    - Dst: _current_call::sending_sock::reset
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:67,1
    - Dst: release
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:67,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ' ptr'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 68
      start: 65
    functionDepth: 1
    functionLinenumber: 65
    functionLinenumberEnd: 68
    functionName: brpc::ControllerPrivateAccessor::move_in_server_receiving_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - release
    - CHECK
    - _current_call::sending_sock::reset
    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: 72
      start: 70
    functionDepth: 0
    functionLinenumber: 70
    functionLinenumberEnd: 72
    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:75,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - security_mode
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 77
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 77
    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: 82
      start: 79
    functionDepth: 0
    functionLinenumber: 79
    functionLinenumberEnd: 82
    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: 87
      start: 84
    functionDepth: 0
    functionLinenumber: 84
    functionLinenumberEnd: 87
    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:90,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - ctx
    argTypes:
    - AuthContext*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 92
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 92
    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:
    - 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: 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: 1
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_pipelined_count(uint32_t count)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ControllerPrivateAccessor::set_pipelined_count
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:110,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - type
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 110
    functionDepth: 1
    functionLinenumber: 110
    functionLinenumberEnd: 110
    functionName: brpc::ControllerPrivateAccessor::set_mysql_statement_type
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - brpc::ControllerPrivateAccessor::set_pipelined_count
    linkageType: ''
    returnType: void
    signature: void set_mysql_statement_type(uint32_t type)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 115
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 115
    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: 121
      start: 119
    functionDepth: 0
    functionLinenumber: 119
    functionLinenumberEnd: 121
    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: 124
      start: 122
    functionDepth: 0
    functionLinenumber: 122
    functionLinenumberEnd: 124
    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: 126
      start: 126
    functionDepth: 0
    functionLinenumber: 126
    functionLinenumberEnd: 126
    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: 127
      start: 127
    functionDepth: 0
    functionLinenumber: 127
    functionLinenumberEnd: 127
    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: 130
      start: 129
    functionDepth: 0
    functionLinenumber: 129
    functionLinenumberEnd: 130
    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:133,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - s
    argTypes:
    - ReadableProgressiveAttachment*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 132
    functionDepth: 1
    functionLinenumber: 132
    functionLinenumberEnd: 133
    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: 137
      start: 135
    functionDepth: 0
    functionLinenumber: 135
    functionLinenumberEnd: 137
    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: 139
      start: 139
    functionDepth: 0
    functionLinenumber: 139
    functionLinenumberEnd: 139
    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: brpc::ControllerPrivateAccessor::set_bind_sock_action
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:142,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - action
    argTypes:
    - BindSockAction
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 142
      start: 142
    functionDepth: 1
    functionLinenumber: 142
    functionLinenumberEnd: 142
    functionName: brpc::ControllerPrivateAccessor::set_bind_sock_action
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 3
    functionsReached:
    - brpc::ControllerPrivateAccessor::set_bind_sock_action
    linkageType: ''
    returnType: void
    signature: void set_bind_sock_action(BindSockAction action)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: _bind_sock::ReAddress
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:146,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 1
    argNames:
    - ptr
    argTypes:
    - SocketUniquePtr*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 148
      start: 144
    functionDepth: 0
    functionLinenumber: 144
    functionLinenumberEnd: 148
    functionName: brpc::ControllerPrivateAccessor::get_bind_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - _bind_sock::ReAddress
    linkageType: ''
    returnType: void
    signature: void get_bind_sock(SocketUniquePtr* ptr)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: brpc::ControllerPrivateAccessor::set_bind_sock_action
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:151,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/details/controller_private_accessor.h:152,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - sock_id
    argTypes:
    - SocketId
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 150
    functionDepth: 3
    functionLinenumber: 150
    functionLinenumberEnd: 153
    functionName: brpc::ControllerPrivateAccessor::use_bind_sock
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached:
    - brpc::ControllerPrivateAccessor::set_bind_sock_action
    - brpc::SetTrackMeAddress
    linkageType: ''
    returnType: void
    signature: void use_bind_sock(SocketId sock_id)
  - BBCount: 1
    BranchProfiles: []
    Callsites: []
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - d
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 154
      start: 154
    functionDepth: 0
    functionLinenumber: 154
    functionLinenumberEnd: 154
    functionName: brpc::ControllerPrivateAccessor::set_session_data
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void set_session_data(void* d)
  - 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: brpc::ControllerPrivateAccessor::session_data
    functionSourceFile: /src/brpc/src/brpc/details/controller_private_accessor.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: void
    signature: void * session_data() const
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: protocol_param
      Src: /src/brpc/src/brpc/details/controller_private_accessor.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: '& 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: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: '& 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: 162
      start: 162
    functionDepth: 0
    functionLinenumber: 162
    functionLinenumberEnd: 162
    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: 168
      start: 164
    functionDepth: 0
    functionLinenumber: 164
    functionLinenumberEnd: 168
    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:171,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 173
      start: 170
    functionDepth: 0
    functionLinenumber: 170
    functionLinenumberEnd: 173
    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:176,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - c
    - size
    argTypes:
    - char*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 177
      start: 175
    functionDepth: 0
    functionLinenumber: 175
    functionLinenumberEnd: 177
    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: 181
      start: 179
    functionDepth: 0
    functionLinenumber: 179
    functionLinenumberEnd: 181
    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: 183
      start: 183
    functionDepth: 0
    functionLinenumber: 183
    functionLinenumberEnd: 183
    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: 193
      start: 193
    functionDepth: 0
    functionLinenumber: 193
    functionLinenumberEnd: 193
    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: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: brpc::HttpMessage::body_too_large
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool body_too_large() const
  - 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: '& 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: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    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: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    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: 74
      start: 74
    functionDepth: 0
    functionLinenumber: 74
    functionLinenumberEnd: 74
    functionName: brpc::HttpMessage::body_too_large
    functionSourceFile: /src/brpc/src/brpc/details/http_message.h
    functionUses: 0
    functionsReached: []
    linkageType: ''
    returnType: bool
    signature: bool body_too_large() const
  - 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: '& 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: 89
      start: 89
    functionDepth: 0
    functionLinenumber: 89
    functionLinenumberEnd: 89
    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: 93
      start: 91
    functionDepth: 0
    functionLinenumber: 91
    functionLinenumberEnd: 93
    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:
    - get
    - RemoveWatcher
    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:
    - GetNamingServiceThread
    - LOG
    - brpc::SharedLoadBalancer::Init
    - AddWatcher
    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::LoadBalancerWithNaming::Describe
    - brpc::SharedLoadBalancer::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:
    - get
    - RemoveWatcher
    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:
    - GetNamingServiceThread
    - LOG
    - brpc::SharedLoadBalancer::Init
    - AddWatcher
    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::LoadBalancerWithNaming::Describe
    - brpc::SharedLoadBalancer::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:
    - capacity
    - full
    - std::max
    - top
    - pop
    - brpc::SparseMinuteCounter<T>::Resize
    - push
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - Item
    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:
    - Q*::~Q
    - free
    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:
    - capacity
    - Q*::push
    - CHECK_LT
    - brpc::SparseMinuteCounter<T>::DestroyQueue
    - std::min
    - top
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - size
    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:
    - capacity
    - full
    - std::max
    - top
    - pop
    - brpc::SparseMinuteCounter<T>::Resize
    - push
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - Item
    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:
    - Q*::~Q
    - free
    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:
    - capacity
    - Q*::push
    - CHECK_LT
    - brpc::SparseMinuteCounter<T>::DestroyQueue
    - std::min
    - top
    - brpc::SparseMinuteCounter<T>::CreateQueue
    - size
    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::count
    - std::set::insert
    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:
    - LOG
    - mallctl
    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:
    - c_str
    - malloc_stats_print
    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:
    - brpc::HasJemalloc
    - mallctl
    - LOG
    - brpc::HasEnableJemallocProfile
    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::FilePath::value
    - brpc::MakeProfName
    - berror
    - butil::FilePath
    - brpc::HasJemalloc
    - LOG
    - brpc::HasEnableJemallocProfile
    - mallctl
    - butil::CreateDirectoryAndGetError
    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:
    - brpc::HasJemalloc
    - mallctl
    - LOG
    - brpc::HasEnableJemallocProfile
    linkageType: ''
    returnType: int
    signature: int JeProfileReset(size_t lg_sample)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:178,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:180,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:181,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 184
    functionName: brpc::GlobalExtraOptionsString
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - std::string::reserve
    - std::string::append
    linkageType: ''
    returnType: std::string
    signature: std::string GlobalExtraOptionsString()
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:187,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:189,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:191,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:192,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:196,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:197,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:198,1
    - Dst: brpc::StatsPrint
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:198,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:202,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:203,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:208,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:209,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:210,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:211,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:216,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:218,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:218,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:219,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:222,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:227,1
    - Dst: std::getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:230,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:231,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:234,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:235,1
    - Dst: butil::GetProcessAbsolutePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:242,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:243,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:248,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:249,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:249,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:249,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:253,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:254,1
    - Dst: count
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:255,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:255,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:256,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:256,1
    - Dst: brpc::GlobalExtraOptionsString
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:259,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:271,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:273,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:283,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:284,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:287,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:288,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:288,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:289,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:290,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:295,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:295,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:296,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:298,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:299,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:299,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 75
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 186
    functionDepth: 3
    functionLinenumber: 186
    functionLinenumberEnd: 301
    functionName: brpc::JeControlProfile
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - LOG
    - swap
    - Controller*::response_attachment
    - std::getenv
    - std::string*::empty
    - std::string::empty
    - count
    - std::string*::c_str
    - GetQuery
    - brpc::StatsPrint
    - brpc::HasEnableJemallocProfile
    - append
    - butil::IOBufBuilder::buf
    - Controller*::http_request
    - Controller*::http_response
    - std::string::c_str
    - brpc::GlobalExtraOptionsString
    - butil::FilePath
    - butil::read_command_output
    - butil::ReadFileToString
    - butil::PathExists
    - getenv
    - butil::IOBufBuilder::IOBufBuilder
    - butil::GetProcessAbsolutePath
    - butil::string_printf
    - Controller*::SetFailed
    - brpc::JeProfileDump
    linkageType: ''
    returnType: void
    signature: void JeControlProfile(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:304,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:308,1
    - Dst: brpc::JeProfileActive
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:312,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:313,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - enable
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 303
    functionDepth: 3
    functionLinenumber: 303
    functionLinenumberEnd: 318
    functionName: brpc::validate_je_prof_active
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - brpc::HasJemalloc
    - LOG
    - brpc::JeProfileActive
    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:321,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:324,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:328,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:329,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:330,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 334
    functionName: brpc::validate_je_prof_dump
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - std::string::empty
    - brpc::HasJemalloc
    - LOG
    - brpc::JeProfileDump
    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:337,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:340,1
    - Dst: brpc::JeProfileReset
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:345,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 336
    functionDepth: 3
    functionLinenumber: 336
    functionLinenumberEnd: 350
    functionName: brpc::validate_je_prof_reset
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - brpc::HasJemalloc
    - LOG
    - brpc::JeProfileReset
    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::count
    - std::set::insert
    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:
    - LOG
    - mallctl
    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:
    - c_str
    - malloc_stats_print
    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:
    - brpc::HasJemalloc
    - mallctl
    - LOG
    - brpc::HasEnableJemallocProfile
    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::FilePath::value
    - brpc::MakeProfName
    - berror
    - butil::FilePath
    - brpc::HasJemalloc
    - LOG
    - brpc::HasEnableJemallocProfile
    - mallctl
    - butil::CreateDirectoryAndGetError
    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:
    - brpc::HasJemalloc
    - mallctl
    - LOG
    - brpc::HasEnableJemallocProfile
    linkageType: ''
    returnType: int
    signature: int JeProfileReset(size_t lg_sample)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::string::reserve
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:178,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:180,1
    - Dst: std::string::append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:181,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 6
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 176
    functionDepth: 1
    functionLinenumber: 176
    functionLinenumberEnd: 184
    functionName: brpc::GlobalExtraOptionsString
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 1
    functionsReached:
    - std::string::reserve
    - std::string::append
    linkageType: ''
    returnType: std::string
    signature: std::string GlobalExtraOptionsString()
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:187,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:189,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:191,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:192,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:196,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:197,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:198,1
    - Dst: brpc::StatsPrint
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:198,1
    - Dst: brpc::HasEnableJemallocProfile
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:202,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:203,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:208,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:209,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:210,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:211,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:216,1
    - Dst: butil::ReadFileToString
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:218,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:218,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:219,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:222,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:227,1
    - Dst: std::getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:230,1
    - Dst: butil::PathExists
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:231,1
    - Dst: butil::FilePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:234,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:235,1
    - Dst: butil::GetProcessAbsolutePath
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:240,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:242,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:243,1
    - Dst: butil::string_printf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:248,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:249,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:249,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:249,1
    - Dst: GetQuery
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:253,1
    - Dst: std::string*::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:254,1
    - Dst: count
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:255,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:255,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:256,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:256,1
    - Dst: brpc::GlobalExtraOptionsString
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:258,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:259,1
    - Dst: getenv
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:269,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:271,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:273,1
    - Dst: butil::string_appendf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:277,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:283,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:284,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:287,1
    - Dst: butil::read_command_output
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:288,1
    - Dst: std::string::c_str
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:288,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:289,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:290,1
    - Dst: swap
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:295,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:295,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:296,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:298,1
    - Dst: append
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:299,1
    - Dst: butil::IOBufBuilder::buf
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:299,1
    CyclomaticComplexity: 20
    EdgeCount: 20
    ICount: 75
    argCount: 1
    argNames:
    - cntl
    argTypes:
    - Controller*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 301
      start: 186
    functionDepth: 3
    functionLinenumber: 186
    functionLinenumberEnd: 301
    functionName: brpc::JeControlProfile
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - butil::string_appendf
    - LOG
    - swap
    - Controller*::response_attachment
    - std::getenv
    - std::string*::empty
    - std::string::empty
    - count
    - std::string*::c_str
    - GetQuery
    - brpc::StatsPrint
    - brpc::HasEnableJemallocProfile
    - append
    - butil::IOBufBuilder::buf
    - Controller*::http_request
    - Controller*::http_response
    - std::string::c_str
    - brpc::GlobalExtraOptionsString
    - butil::FilePath
    - butil::read_command_output
    - butil::ReadFileToString
    - butil::PathExists
    - getenv
    - butil::IOBufBuilder::IOBufBuilder
    - butil::GetProcessAbsolutePath
    - butil::string_printf
    - Controller*::SetFailed
    - brpc::JeProfileDump
    linkageType: ''
    returnType: void
    signature: void JeControlProfile(Controller* cntl)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::HasJemalloc
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:304,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:308,1
    - Dst: brpc::JeProfileActive
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:312,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:313,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - enable
    argTypes:
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 318
      start: 303
    functionDepth: 3
    functionLinenumber: 303
    functionLinenumberEnd: 318
    functionName: brpc::validate_je_prof_active
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - brpc::HasJemalloc
    - LOG
    - brpc::JeProfileActive
    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:321,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:324,1
    - Dst: brpc::JeProfileDump
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:328,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:329,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:330,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 320
    functionDepth: 3
    functionLinenumber: 320
    functionLinenumberEnd: 334
    functionName: brpc::validate_je_prof_dump
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - std::string::empty
    - brpc::HasJemalloc
    - LOG
    - brpc::JeProfileDump
    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:337,1
    - Dst: brpc::HasInit
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:340,1
    - Dst: brpc::JeProfileReset
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:344,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/jemalloc_profiler.cpp:345,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 12
    argCount: 1
    argNames:
    - val
    argTypes:
    - int32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 350
      start: 336
    functionDepth: 3
    functionLinenumber: 336
    functionLinenumberEnd: 350
    functionName: brpc::validate_je_prof_reset
    functionSourceFile: /src/brpc/src/brpc/details/jemalloc_profiler.cpp
    functionUses: 0
    functionsReached:
    - brpc::HasInit
    - brpc::HasJemalloc
    - LOG
    - brpc::JeProfileReset
    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_as
    - expose
    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
    - count
    - get_value
    - name
    - latency_percentile
    - qps_name
    - OutputTextValue
    - max_latency
    - latency_cdf_name
    - brpc::MethodStatus::MaxConcurrency
    - latency_name
    - latency_percentiles_name
    - OutputValue
    - count_name
    - latency_percentiles
    - max_latency_name
    - qps
    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: 1
    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: 6
    functionLinenumber: 152
    functionLinenumberEnd: 157
    functionName: brpc::HandleResponseWritten
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<ResponseWriteInfo*>
    - butil::cpuwide_time_us
    - CHECK_EQ
    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:
    - ServerPrivateAccessor
    - butil::cpuwide_time_us
    - server
    - OnResponded
    - ErrorCode
    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_as
    - expose
    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
    - count
    - get_value
    - name
    - latency_percentile
    - qps_name
    - OutputTextValue
    - max_latency
    - latency_cdf_name
    - brpc::MethodStatus::MaxConcurrency
    - latency_name
    - latency_percentiles_name
    - OutputValue
    - count_name
    - latency_percentiles
    - max_latency_name
    - qps
    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: 1
    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: 6
    functionLinenumber: 152
    functionLinenumberEnd: 157
    functionName: brpc::HandleResponseWritten
    functionSourceFile: /src/brpc/src/brpc/details/method_status.cpp
    functionUses: 0
    functionsReached:
    - bthread_id_unlock_and_destroy
    - static_cast<ResponseWriteInfo*>
    - butil::cpuwide_time_us
    - CHECK_EQ
    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:
    - ServerPrivateAccessor
    - butil::cpuwide_time_us
    - server
    - OnResponded
    - ErrorCode
    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::CaseIgnoredHasher
    - butil::DefaultHasher<std::string>
    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:
    - _start_index
    - Header*::value::empty
    - brpc::PopHeader
    - _add_times
    - top
    - LOG
    - brpc::IndexTable
    - _size
    - full
    - CHECK
    - Header*::name::empty
    - pop
    - brpc::HeaderSize
    - brpc::RemoveHeaderFromIndexes
    - brpc::start_index
    - DISALLOW_COPY_AND_ASSIGN
    - erase
    - push
    - BAIDU_UNLIKELY
    - bottom
    - butil::BoundedQueue::BoundedQueue
    - DCHECK_LE
    - value::size
    - brpc::size
    - brpc::empty
    - DCHECK
    - seek
    - name::size
    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:
    - DCHECK
    - DCHECK_LE
    - seek
    - 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:
    - DCHECK
    - DCHECK_LE
    - seek
    - 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: 18
    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::size
    - brpc::start_index
    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
    - top
    - brpc::size
    - brpc::empty
    - DCHECK
    - pop
    - brpc::HeaderSize
    - brpc::RemoveHeaderFromIndexes
    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
    - DCHECK
    - value::empty
    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:
    - full
    - brpc::PopHeader
    - CHECK
    - brpc::empty
    - DCHECK
    - brpc::HeaderSize
    - push
    - name::empty
    - value::empty
    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:
    - malloc
    - AddHeader
    - init
    - LOG
    - swap
    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
    - brpc::size
    - DISALLOW_COPY_AND_ASSIGN
    - CHECK_EQ
    - brpc::node
    - push_back
    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:
    - brpc::node
    - brpc::AllocNode
    - CHECK_EQ
    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::CaseIgnoredHasher
    - butil::DefaultHasher<std::string>
    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:
    - _start_index
    - Header*::value::empty
    - brpc::PopHeader
    - _add_times
    - top
    - LOG
    - brpc::IndexTable
    - _size
    - full
    - CHECK
    - Header*::name::empty
    - pop
    - brpc::HeaderSize
    - brpc::RemoveHeaderFromIndexes
    - brpc::start_index
    - DISALLOW_COPY_AND_ASSIGN
    - erase
    - push
    - BAIDU_UNLIKELY
    - bottom
    - butil::BoundedQueue::BoundedQueue
    - DCHECK_LE
    - value::size
    - brpc::size
    - brpc::empty
    - DCHECK
    - seek
    - name::size
    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:
    - DCHECK
    - DCHECK_LE
    - seek
    - 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:
    - DCHECK
    - DCHECK_LE
    - seek
    - 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: 21
    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::size
    - brpc::start_index
    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
    - top
    - brpc::size
    - brpc::empty
    - DCHECK
    - pop
    - brpc::HeaderSize
    - brpc::RemoveHeaderFromIndexes
    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
    - DCHECK
    - value::empty
    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:
    - full
    - brpc::PopHeader
    - CHECK
    - brpc::empty
    - DCHECK
    - brpc::HeaderSize
    - push
    - name::empty
    - value::empty
    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:
    - malloc
    - AddHeader
    - init
    - LOG
    - swap
    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
    - brpc::size
    - DISALLOW_COPY_AND_ASSIGN
    - CHECK_EQ
    - brpc::node
    - push_back
    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:
    - brpc::node
    - brpc::AllocNode
    - CHECK_EQ
    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:
    - LOG
    - node
    - static_cast<uint8_t>
    - BAIDU_UNLIKELY
    - push_back
    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:
    - static_cast<uint8_t>
    - butil::IOBufAppender*::push_back
    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
    - HuffmanTree::HuffmanTree
    - IndexTable::IndexTable
    - LOG
    - exit
    - AddLeafNode
    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:
    - exit
    - PLOG
    - pthread_once
    linkageType: ''
    returnType: void
    signature: void CreateStaticTableOnceOrDie()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:540,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/details/hpack.cpp:557,1
    - Dst: static_cast<uint64_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:563,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:569,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/details/hpack.cpp:573,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 29
    argCount: 3
    argNames:
    - ' iter'
    - prefix_size
    - value
    argTypes:
    - butil::IOBufBytesIterator
    - uint8_t
    - uint32_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 576
      start: 531
    functionDepth: 1
    functionLinenumber: 531
    functionLinenumberEnd: 576
    functionName: DecodeInteger
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - LOG
    - static_cast<uint32_t>
    - LOG_EVERY_SECOND
    - static_cast<uint64_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:582,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:582,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:584,1
    - Dst: butil::IOBufAppender*::push_back
      Src: /src/brpc/src/brpc/details/hpack.cpp:585,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:585,1
    - Dst: butil::IOBufAppender*::append
      Src: /src/brpc/src/brpc/details/hpack.cpp:588,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:595,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: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:603,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:606,1
    - Dst: HuffmanEncoder::Encode
      Src: /src/brpc/src/brpc/details/hpack.cpp:607,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:607,1
    - Dst: size
      Src: /src/brpc/src/brpc/details/hpack.cpp:610,1
    - Dst: HuffmanEncoder::Encode
      Src: /src/brpc/src/brpc/details/hpack.cpp:611,1
    - Dst: HuffmanEncoder::EndStream
      Src: /src/brpc/src/brpc/details/hpack.cpp:614,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: 615
      start: 579
    functionDepth: 2
    functionLinenumber: 579
    functionLinenumberEnd: 615
    functionName: EncodeString
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBufAppender*::append
    - HuffmanEncoder::Encode
    - EncodeInteger
    - butil::ascii_tolower
    - HuffmanEncoder::EndStream
    - size
    - butil::IOBufAppender*::push_back
    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:623,1
    - Dst: bytes_left
      Src: /src/brpc/src/brpc/details/hpack.cpp:627,1
    - Dst: std::string*::clear
      Src: /src/brpc/src/brpc/details/hpack.cpp:631,1
    - Dst: copy_and_forward
      Src: /src/brpc/src/brpc/details/hpack.cpp:633,1
    - Dst: HuffmanDecoder::Decode
      Src: /src/brpc/src/brpc/details/hpack.cpp:638,1
    - Dst: HuffmanDecoder::EndStream
      Src: /src/brpc/src/brpc/details/hpack.cpp:642,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 25
    argCount: 2
    argNames:
    - ' iter'
    - out
    argTypes:
    - butil::IOBufBytesIterator
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 617
    functionDepth: 2
    functionLinenumber: 617
    functionLinenumberEnd: 646
    functionName: DecodeString
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - bytes_left
    - std::string*::clear
    - HuffmanDecoder::Decode
    - HuffmanDecoder::EndStream
    - DecodeInteger
    - copy_and_forward
    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:651,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 652
      start: 648
    functionDepth: 2
    functionLinenumber: 648
    functionLinenumberEnd: 652
    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: 663
      start: 654
    functionDepth: 0
    functionLinenumber: 654
    functionLinenumberEnd: 663
    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:666,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:667,1
    - Dst: end_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:670,1
    - Dst: IndexTable::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:672,1
    - Dst: HPacker::Init
      Src: /src/brpc/src/brpc/details/hpack.cpp:673,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:674,1
    - Dst: end_index
      Src: /src/brpc/src/brpc/details/hpack.cpp:679,1
    - Dst: IndexTable::IndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:681,1
    - Dst: HPacker::Init
      Src: /src/brpc/src/brpc/details/hpack.cpp:682,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:683,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 20
    argCount: 1
    argNames:
    - max_table_size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 687
      start: 665
    functionDepth: 1
    functionLinenumber: 665
    functionLinenumberEnd: 687
    functionName: HPacker::Init
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 13
    functionsReached:
    - end_index
    - CHECK
    - IndexTable::IndexTable
    - LOG
    - HPacker::Init
    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:691,1
    - Dst: GetIndexOfHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:692,1
    - Dst: GetIndexOfHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:696,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' h'
    argTypes:
    - Header
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 697
      start: 689
    functionDepth: 0
    functionLinenumber: 689
    functionLinenumberEnd: 697
    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:700,1
    - Dst: GetIndexOfName
      Src: /src/brpc/src/brpc/details/hpack.cpp:704,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - ' name'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 705
      start: 699
    functionDepth: 0
    functionLinenumber: 699
    functionLinenumberEnd: 705
    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:710,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:713,1
    - Dst: HPacker::FindNameFromIndexTable
      Src: /src/brpc/src/brpc/details/hpack.cpp:717,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:720,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:724,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:727,1
    - Dst: EncodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:730,1
    - Dst: EncodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:734,1
    - Dst: EncodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:736,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 3
    argNames:
    - out
    - ' header'
    - ' options'
    argTypes:
    - butil::IOBufAppender*
    - Header
    - HPackOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 737
      start: 707
    functionDepth: 3
    functionLinenumber: 707
    functionLinenumberEnd: 737
    functionName: HPacker::Encode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 10
    functionsReached:
    - HPacker::FindHeaderFromIndexTable
    - AddHeader
    - HPacker::FindNameFromIndexTable
    - EncodeInteger
    - EncodeString
    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:740,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:741,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:741,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - index
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 742
      start: 739
    functionDepth: 1
    functionLinenumber: 739
    functionLinenumberEnd: 742
    functionName: HPacker::HeaderAt
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 1
    functionsReached:
    - start_index
    - HPacker::HeaderAt
    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:747,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:750,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:754,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:756,1
    - Dst: DecodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:761,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:763,1
    - Dst: tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:766,1
    - Dst: DecodeString
      Src: /src/brpc/src/brpc/details/hpack.cpp:768,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:770,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: 774
      start: 744
    functionDepth: 3
    functionLinenumber: 744
    functionLinenumberEnd: 774
    functionName: HPacker::DecodeWithKnownPrefix
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 0
    functionsReached:
    - HPacker::HeaderAt
    - LOG
    - tolower
    - DecodeInteger
    - DecodeString
    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:797,1
    - Dst: HPacker::HeaderAt
      Src: /src/brpc/src/brpc/details/hpack.cpp:801,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:803,1
    - Dst: HPacker::DecodeWithKnownPrefix
      Src: /src/brpc/src/brpc/details/hpack.cpp:817,1
    - Dst: AddHeader
      Src: /src/brpc/src/brpc/details/hpack.cpp:821,1
    - Dst: DecodeInteger
      Src: /src/brpc/src/brpc/details/hpack.cpp:831,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/details/hpack.cpp:836,1
    - Dst: ResetMaxSize
      Src: /src/brpc/src/brpc/details/hpack.cpp:839,1
    - Dst: HPacker::DecodeWithKnownPrefix
      Src: /src/brpc/src/brpc/details/hpack.cpp:847,1
    - Dst: HPacker::DecodeWithKnownPrefix
      Src: /src/brpc/src/brpc/details/hpack.cpp:855,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/details/hpack.cpp:860,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 61
    argCount: 2
    argNames:
    - ' iter'
    - h
    argTypes:
    - butil::IOBufBytesIterator
    - Header*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 863
      start: 776
    functionDepth: 4
    functionLinenumber: 776
    functionLinenumberEnd: 863
    functionName: HPacker::Decode
    functionSourceFile: /src/brpc/src/brpc/details/hpack.cpp
    functionUses: 14
    functionsReached:
    - HPacker::HeaderAt
    - HPacker::DecodeWithKnownPrefix
    - AddHeader
    - ResetMaxSize
    - CHECK
    - LOG
    - DecodeInteger
    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:872,1
    - Dst: Print
      Src: /src/brpc/src/brpc/details/hpack.cpp:878,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 2
    argNames:
    - ' os'
    - ' opt'
    argTypes:
    - std::ostream
    - DescribeOptions
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 885
      start: 865
    functionDepth: 0
    functionLinenumber: 865
    functionLinenumberEnd: 885
    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:888,1
    - Dst: std::string*::size
      Src: /src/brpc/src/brpc/details/hpack.cpp:889,1
    - Dst: butil::ascii_tolower
      Src: /src/brpc/src/brpc/details/hpack.cpp:891,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 6
    argCount: 1
    argNames:
    - s
    argTypes:
    - std::string*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 896
      start: 887
    functionDepth: 1
    functionLinenumber: 887
    functionLinenumberEnd: 896
    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: 145
    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: 502
    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: 502
    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_ALPHA
    - IS_USERINFO_CHAR
    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->flags & F_CHUNKED)
      pos:
        line_end: 2032
        line_start: 2032
        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: (parser->content_length == 0)
      pos:
        line_end: 2071
        line_start: 2071
        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->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: 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: "(((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->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: (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
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2070
        line_start: 2070
        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: 1986
        line_start: 1986
        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: 1
    functionsReached:
    - MIN
    - brpc::http_message_needs_eof
    - STRICT_CHECK
    - IS_ALPHA
    - TOKEN
    - brpc::parse_url_char
    - CALLBACK_DATA_
    - CALLBACK_DATA
    - assert
    - CALLBACK_NOTIFY
    - SET_ERRNO
    - IS_HEADER_CHAR
    - CALLBACK_DATA_NOADVANCE
    - NEW_MESSAGE
    - CALLBACK_NOTIFY_NOADVANCE
    - HTTP_PARSER_ERRNO
    - LOWER
    - MARK
    - PARSING_HEADER
    - IS_NUM
    - http_parser_settings*::on_headers_complete
    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: 1
    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: 1
    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_HOST_CHAR
    - IS_NUM
    - IS_HEX
    - IS_USERINFO_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: 1
    functionsReached:
    - brpc::parse_url_char
    - brpc::http_parse_host
    - assert
    - strtoul
    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
    - HTTP_PARSER_ERRNO
    - assert
    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: 503
    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: 503
    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_ALPHA
    - IS_USERINFO_CHAR
    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->flags & F_CHUNKED)
      pos:
        line_end: 2032
        line_start: 2032
        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: (parser->content_length == 0)
      pos:
        line_end: 2071
        line_start: 2071
        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->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: 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: "(((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->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: (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
    - condition: (parser->flags & F_CHUNKED)
      pos:
        line_end: 2070
        line_start: 2070
        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: 1986
        line_start: 1986
        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: 1
    functionsReached:
    - MIN
    - brpc::http_message_needs_eof
    - STRICT_CHECK
    - IS_ALPHA
    - TOKEN
    - brpc::parse_url_char
    - CALLBACK_DATA_
    - CALLBACK_DATA
    - assert
    - CALLBACK_NOTIFY
    - SET_ERRNO
    - IS_HEADER_CHAR
    - CALLBACK_DATA_NOADVANCE
    - NEW_MESSAGE
    - CALLBACK_NOTIFY_NOADVANCE
    - HTTP_PARSER_ERRNO
    - LOWER
    - MARK
    - PARSING_HEADER
    - IS_NUM
    - http_parser_settings*::on_headers_complete
    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: 1
    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_HOST_CHAR
    - IS_NUM
    - IS_HEX
    - IS_USERINFO_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: 1
    functionsReached:
    - brpc::parse_url_char
    - brpc::http_parse_host
    - assert
    - strtoul
    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
    - HTTP_PARSER_ERRNO
    - assert
    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: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    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: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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: 40
      start: 40
    functionDepth: 0
    functionLinenumber: 40
    functionLinenumberEnd: 40
    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: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 50
      start: 46
    functionDepth: 0
    functionLinenumber: 46
    functionLinenumberEnd: 50
    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
    - static_cast<Controller*>
    - GenerateReport
    - Controller*::server
    - Server*::options
    - grpc::health::v1::HealthCheckResponse*::set_status
    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
    - static_cast<Controller*>
    - GenerateReport
    - Controller*::server
    - Server*::options
    - grpc::health::v1::HealthCheckResponse*::set_status
    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: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:39,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:40,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:41,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:42,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:43,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:54,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:60,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:60,1
    - Dst: bthread::print_task
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:62,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:65,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:66,1
    - Dst: bthread::print_living_tasks
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:68,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:72,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:72,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 34
    functionDepth: 2
    functionLinenumber: 34
    functionLinenumberEnd: 73
    functionName: brpc::BthreadsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/bthreads_service.cpp
    functionUses: 2
    functionsReached:
    - static_cast<Controller*>
    - bthread::print_task
    - bthread::print_living_tasks
    - Controller*::response_attachment
    - strtoull
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::http_response
    - 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: 5
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:39,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:40,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:41,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:42,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:43,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:54,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:60,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:60,1
    - Dst: bthread::print_task
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:62,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:65,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:66,1
    - Dst: bthread::print_living_tasks
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:68,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:72,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/bthreads_service.cpp:72,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 2
    argNames:
    - cntl_base
    - done
    argTypes:
    - ::google::protobuf::RpcController*
    - ::google::protobuf::Closure*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 73
      start: 34
    functionDepth: 2
    functionLinenumber: 34
    functionLinenumberEnd: 73
    functionName: brpc::BthreadsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/bthreads_service.cpp
    functionUses: 2
    functionsReached:
    - static_cast<Controller*>
    - bthread::print_task
    - bthread::print_living_tasks
    - Controller*::response_attachment
    - strtoull
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::http_response
    - 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:
    - butil::IOBuf::IOBuf
    - append
    - 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
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    - GetFavIcon
    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:
    - butil::IOBuf::IOBuf
    - append
    - 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
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    - GetFavIcon
    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:
    - Controller*::response_attachment
    - Controller*::http_response
    - version
    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:
    - Controller*::response_attachment
    - Controller*::http_response
    - version
    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:34,1
    - Dst: brpc::ProtobufsService::Init
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 1
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: brpc::ProtobufsService::ProtobufsService
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::ProtobufsService::Init
    - CHECK_EQ
    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:40,1
    - Dst: Server::ServiceMap::size
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:40,1
    - Dst: Server::ServiceMap::begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:42,1
    - Dst: Server::ServiceMap::end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:42,1
    - Dst: Server::ServiceMap::iterator::second::is_user_service
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:43,1
    - Dst: Server::ServiceMap::iterator::second::service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:47,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: google::protobuf::ServiceDescriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:49,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:51,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:52,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:52,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:53,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:53,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:56,1
    - Dst: std::vector::back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:57,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:58,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::Descriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:60,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:61,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:63,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:64,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:66,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 72
    functionName: brpc::ProtobufsService::Init
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 1
    functionsReached:
    - Server::ServiceMap::iterator::second::service::GetDescriptor
    - butil::EnsureString
    - Server::ServiceMap::begin
    - Server::ServiceMap::end
    - std::vector::pop_back
    - google::protobuf::Descriptor*::field_count
    - std::vector::back
    - std::vector::reserve
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::MethodDescriptor*::output_type
    - Server::ServiceMap::iterator::second::is_user_service
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::MethodDescriptor*::input_type
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::ServiceDescriptor*::method_count
    - std::vector::push_back
    - find
    - google::protobuf::Descriptor*::field
    - Server::ServiceMap::size
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::message_type
    - end
    - google::protobuf::Descriptor*::DebugString
    - std::vector::empty
    - google::protobuf::ServiceDescriptor*::DebugString
    linkageType: ''
    returnType: int
    signature: int ProtobufsService::Init()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:79,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:80,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:81,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:82,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:83,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:83,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:84,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:90,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:90,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:105,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:106,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:107,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:108,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:110,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:115,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:115,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: 116
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: brpc::ProtobufsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - begin
    - find
    - end
    - Controller*::response_attachment
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - Controller*::SetFailed
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - 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:34,1
    - Dst: brpc::ProtobufsService::Init
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:34,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - server
    argTypes:
    - Server*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 35
      start: 33
    functionDepth: 2
    functionLinenumber: 33
    functionLinenumberEnd: 35
    functionName: brpc::ProtobufsService::ProtobufsService
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::ProtobufsService::Init
    - CHECK_EQ
    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:40,1
    - Dst: Server::ServiceMap::size
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:40,1
    - Dst: Server::ServiceMap::begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:42,1
    - Dst: Server::ServiceMap::end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:42,1
    - Dst: Server::ServiceMap::iterator::second::is_user_service
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:43,1
    - Dst: Server::ServiceMap::iterator::second::service::GetDescriptor
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:47,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: google::protobuf::ServiceDescriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: google::protobuf::ServiceDescriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:48,1
    - Dst: google::protobuf::ServiceDescriptor*::method_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:49,1
    - Dst: google::protobuf::ServiceDescriptor*::method
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:51,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:52,1
    - Dst: google::protobuf::MethodDescriptor*::input_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:52,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:53,1
    - Dst: google::protobuf::MethodDescriptor*::output_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:53,1
    - Dst: std::vector::empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:56,1
    - Dst: std::vector::back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:57,1
    - Dst: std::vector::pop_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:58,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::Descriptor*::DebugString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:59,1
    - Dst: google::protobuf::Descriptor*::field_count
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:60,1
    - Dst: google::protobuf::Descriptor*::field
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:61,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:62,1
    - Dst: google::protobuf::FieldDescriptor*::type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:63,1
    - Dst: google::protobuf::FieldDescriptor*::message_type
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:64,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: butil::EnsureString
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: google::protobuf::Descriptor*::full_name
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:65,1
    - Dst: std::vector::push_back
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:66,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 24
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 72
      start: 37
    functionDepth: 1
    functionLinenumber: 37
    functionLinenumberEnd: 72
    functionName: brpc::ProtobufsService::Init
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 2
    functionsReached:
    - Server::ServiceMap::iterator::second::service::GetDescriptor
    - butil::EnsureString
    - Server::ServiceMap::begin
    - Server::ServiceMap::end
    - std::vector::pop_back
    - google::protobuf::Descriptor*::field_count
    - std::vector::back
    - std::vector::reserve
    - google::protobuf::FieldDescriptor*::type
    - google::protobuf::MethodDescriptor*::output_type
    - Server::ServiceMap::iterator::second::is_user_service
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::MethodDescriptor*::input_type
    - google::protobuf::ServiceDescriptor*::full_name
    - google::protobuf::ServiceDescriptor*::method_count
    - std::vector::push_back
    - find
    - google::protobuf::Descriptor*::field
    - Server::ServiceMap::size
    - google::protobuf::Descriptor*::full_name
    - google::protobuf::FieldDescriptor*::message_type
    - end
    - google::protobuf::Descriptor*::DebugString
    - std::vector::empty
    - google::protobuf::ServiceDescriptor*::DebugString
    linkageType: ''
    returnType: int
    signature: int ProtobufsService::Init()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<Controller*>
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:79,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:80,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:81,1
    - Dst: empty
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:82,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:83,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:83,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:84,1
    - Dst: begin
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:90,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:90,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:105,1
    - Dst: find
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:106,1
    - Dst: end
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:107,1
    - Dst: Controller*::SetFailed
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:108,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:110,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:115,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/protobufs_service.cpp:115,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: 116
      start: 74
    functionDepth: 1
    functionLinenumber: 74
    functionLinenumberEnd: 116
    functionName: brpc::ProtobufsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/protobufs_service.cpp
    functionUses: 0
    functionsReached:
    - static_cast<Controller*>
    - begin
    - find
    - end
    - Controller*::response_attachment
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - Controller*::SetFailed
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - 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:
    - butil::IOPortal::IOPortal
    - closedir
    - std::string::append
    - butil::make_close_on_exec
    - butil::IOBufBuilder::move_to
    - empty
    - swap
    - readdir_r
    - CHECK_EQ
    - Controller*::response_attachment
    - std::vector::size
    - Path
    - opendir
    - std::vector::reserve
    - std::vector::end
    - std::string::push_back
    - append
    - open
    - Controller*::http_request
    - Controller*::http_response
    - c_str
    - size
    - AppendFileName
    - static_cast<Controller*>
    - lseek
    - std::string::c_str
    - std::vector::push_back
    - std::vector::begin
    - std::ostringstream::str
    - std::sort
    - butil::IOBufBuilder::IOBufBuilder
    - readdir
    - butil::make_non_blocking
    - UseHTML
    - Controller*::SetFailed
    - std::string::reserve
    - butil::IOPortal::append_from_file_descriptor
    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:
    - butil::IOPortal::IOPortal
    - closedir
    - std::string::append
    - butil::make_close_on_exec
    - butil::IOBufBuilder::move_to
    - empty
    - swap
    - readdir_r
    - CHECK_EQ
    - Controller*::response_attachment
    - std::vector::size
    - Path
    - opendir
    - std::vector::reserve
    - std::vector::end
    - std::string::push_back
    - append
    - open
    - Controller*::http_request
    - Controller*::http_response
    - c_str
    - size
    - AppendFileName
    - static_cast<Controller*>
    - lseek
    - std::string::c_str
    - std::vector::push_back
    - std::vector::begin
    - std::ostringstream::str
    - std::sort
    - butil::IOBufBuilder::IOBufBuilder
    - readdir
    - butil::make_non_blocking
    - UseHTML
    - Controller*::SetFailed
    - std::string::reserve
    - butil::IOPortal::append_from_file_descriptor
    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:
    - brpc::flot_min_js
    - CHECK
    - butil::IOBuf::IOBuf
    - append
    - brpc::policy::GzipCompress
    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:
    - brpc::flot_min_js
    - CHECK
    - butil::IOBuf::IOBuf
    - append
    - brpc::policy::GzipCompress
    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:
    - ClosureGuard::release
    - butil::gettimeofday_us
    - dynamic_cast<StatusService*>
    - butil::IOBufBuilder::move_to
    - Server*::listen_address
    - Path
    - Controller*::response_attachment
    - butil::is_endpoint_extended
    - StatusService*::default_method
    - IsHeapProfilerEnabled
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - TabsHead
    - butil::my_ip
    - logo
    - std::ostringstream::str
    - butil::IOBufBuilder::IOBufBuilder
    - pbrpcframework::get_prototype_by_method_descriptor
    - PrintRealDateTime
    - Server*::FindServiceByFullName
    - UseHTML
    - Controller*::SetFailed
    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:
    - ClosureGuard::release
    - butil::gettimeofday_us
    - dynamic_cast<StatusService*>
    - butil::IOBufBuilder::move_to
    - Server*::listen_address
    - Path
    - Controller*::response_attachment
    - butil::is_endpoint_extended
    - StatusService*::default_method
    - IsHeapProfilerEnabled
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - TabsHead
    - butil::my_ip
    - logo
    - std::ostringstream::str
    - butil::IOBufBuilder::IOBufBuilder
    - pbrpcframework::get_prototype_by_method_descriptor
    - PrintRealDateTime
    - Server*::FindServiceByFullName
    - UseHTML
    - Controller*::SetFailed
    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:
    - static_cast<Controller*>
    - butil::describe_resources<Socket>
    - Socket::DebugSocket
    - Controller*::response_attachment
    - strtoull
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::http_response
    - 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:
    - static_cast<Controller*>
    - butil::describe_resources<Socket>
    - Socket::DebugSocket
    - Controller*::response_attachment
    - strtoull
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::http_response
    - 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: 1
    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:
    - TabInfo
    - brpc::TabInfoList::size
    - push_back
    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: 1
    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:
    - TabInfo
    - brpc::TabInfoList::size
    - push_back
    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:
    - static_cast<Controller*>
    - butil::Timer::stop
    - std::string::c_str
    - butil::read_command_output
    - LOG
    - butil::IOBufBuilder::move_to
    - butil::IOBufBuilder::IOBufBuilder
    - append
    - getpid
    - butil::Timer::start
    - butil::string_printf
    - Controller*::response_attachment
    - Controller*::http_response
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    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:
    - static_cast<Controller*>
    - butil::Timer::stop
    - std::string::c_str
    - butil::read_command_output
    - LOG
    - butil::IOBufBuilder::move_to
    - butil::IOBufBuilder::IOBufBuilder
    - append
    - getpid
    - butil::Timer::start
    - butil::string_printf
    - Controller*::response_attachment
    - Controller*::http_response
    - butil::Timer::Timer
    - butil::Timer::m_elapsed
    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: 0
    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:
    - data
    - find_first_of
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::size
    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:
    - brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
    - GetMetricsName
    - empty
    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: 0
    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:
    - strtoll
    - butil::StringPiece::ends_with
    - butil::StringPiece::as_string
    - CHECK
    - std::string::data
    - butil::string_printf
    - as_string
    - size
    - butil::StringPiece::remove_suffix
    - arraysize
    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:
    - static_cast<Controller*>
    - DumpPrometheusMetricsToIOBuf
    - Controller*::SetFailed
    - Controller*::response_attachment
    - Controller*::http_response
    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::IOBuf*::append
    - bvar::MVariableBase::dump_exposed
    - butil::IOBufBuilder::move_to
    - butil::IOBuf::Movable
    - bvar::Variable::dump_exposed
    - butil::IOBufBuilder::buf
    - 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: 0
    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:
    - data
    - find_first_of
    - butil::BasicStringPiece::BasicStringPiece
    - brpc::size
    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:
    - brpc::PrometheusMetricsDumper::DumpLatencyRecorderSuffix
    - GetMetricsName
    - empty
    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: 0
    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:
    - strtoll
    - butil::StringPiece::ends_with
    - butil::StringPiece::as_string
    - CHECK
    - std::string::data
    - butil::string_printf
    - as_string
    - size
    - butil::StringPiece::remove_suffix
    - arraysize
    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:
    - static_cast<Controller*>
    - DumpPrometheusMetricsToIOBuf
    - Controller*::SetFailed
    - Controller*::response_attachment
    - Controller*::http_response
    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::IOBuf*::append
    - bvar::MVariableBase::dump_exposed
    - butil::IOBufBuilder::move_to
    - butil::IOBuf::Movable
    - bvar::Variable::dump_exposed
    - butil::IOBufBuilder::buf
    - 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:
    - HttpHeader*::SetHeader
    - brpc::Time2GMT
    - time
    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
    - Controller*::http_response
    - SetExpires
    - 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: 42
    functionsReached:
    - jquery_min_js_iobuf
    - SetExpires
    - SupportGzip
    - Controller*::response_attachment
    - jquery_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::http_response
    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:
    - SetExpires
    - flot_min_js_iobuf
    - SupportGzip
    - Controller*::response_attachment
    - flot_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::http_response
    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:
    - SetExpires
    - SupportGzip
    - Controller*::response_attachment
    - viz_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::http_response
    - viz_min_js_iobuf
    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:
    - HttpHeader*::SetHeader
    - brpc::Time2GMT
    - time
    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
    - Controller*::http_response
    - SetExpires
    - 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: 42
    functionsReached:
    - jquery_min_js_iobuf
    - SetExpires
    - SupportGzip
    - Controller*::response_attachment
    - jquery_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::http_response
    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:
    - SetExpires
    - flot_min_js_iobuf
    - SupportGzip
    - Controller*::response_attachment
    - flot_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::http_response
    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:
    - SetExpires
    - SupportGzip
    - Controller*::response_attachment
    - viz_min_js_iobuf_gzip
    - Controller*::http_request
    - Controller*::http_response
    - viz_min_js_iobuf
    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:
    - static_cast<Controller*>
    - bvar::DumpOptions::white_wildcards::c_str
    - bvar::Variable::describe_series_exposed
    - Controller*::response_attachment
    - PutVarsHeading
    - butil::IOBufBuilder::move_to
    - bvar::DumpOptions::white_wildcards::empty
    - Controller*::set_response_compress_type
    - bvar::Variable::dump_exposed
    - Controller*::SetFailed
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::server
    - bvar::DumpOptions::DumpOptions
    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:
    - static_cast<Controller*>
    - bvar::DumpOptions::white_wildcards::c_str
    - bvar::Variable::describe_series_exposed
    - Controller*::response_attachment
    - PutVarsHeading
    - butil::IOBufBuilder::move_to
    - bvar::DumpOptions::white_wildcards::empty
    - Controller*::set_response_compress_type
    - bvar::Variable::dump_exposed
    - Controller*::SetFailed
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::server
    - bvar::DumpOptions::DumpOptions
    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:
    - std::unique_ptr::get
    - MallocExtension*::GetStats
    - brpc::Extension<T>::instance
    - butil::IOBufBuilder::move_to
    - char::char
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::get_tcmalloc_num_prop
    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*::response_attachment
    - GetQuery
    - brpc::StatsPrint
    - Controller*::http_request
    - Controller*::http_response
    - std::string*::empty
    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:
    - auto::response_attachment
    - static_cast<Controller*>
    - get_jemalloc_memory_info
    - append
    - auto::http_response
    - butil::IOBufBuilder::IOBufBuilder
    - IsTCMallocEnabled
    - HasJemalloc
    - get_tcmalloc_memory_info
    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:
    - std::unique_ptr::get
    - MallocExtension*::GetStats
    - brpc::Extension<T>::instance
    - butil::IOBufBuilder::move_to
    - char::char
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::get_tcmalloc_num_prop
    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*::response_attachment
    - GetQuery
    - brpc::StatsPrint
    - Controller*::http_request
    - Controller*::http_response
    - std::string*::empty
    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:
    - auto::response_attachment
    - static_cast<Controller*>
    - get_jemalloc_memory_info
    - append
    - auto::http_response
    - butil::IOBufBuilder::IOBufBuilder
    - IsTCMallocEnabled
    - HasJemalloc
    - get_tcmalloc_memory_info
    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:
    - static_cast<Controller*>
    - ServerPrivateAccessor
    - Server::ServiceProperty*::service::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method_count
    - std::ostringstream::str
    - Controller*::SetFailed
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - BadMethodRequest*::service_name
    - Controller*::server
    - google::protobuf::ServiceDescriptor*::method
    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:
    - static_cast<Controller*>
    - ServerPrivateAccessor
    - Server::ServiceProperty*::service::GetDescriptor
    - google::protobuf::ServiceDescriptor*::method_count
    - std::ostringstream::str
    - Controller*::SetFailed
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - BadMethodRequest*::service_name
    - Controller*::server
    - google::protobuf::ServiceDescriptor*::method
    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:
    - brpc::sorttable_js
    - butil::IOBuf::IOBuf
    - append
    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:
    - brpc::sorttable_js
    - butil::IOBuf::IOBuf
    - append
    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:
    - Server::ServiceMap::begin
    - Describable*::Describe
    - PutVarsHeading
    - NsheadService*::_status::Describe
    - butil::IOBufBuilder::move_to
    - Server*::_method_map::seek
    - Server::ServiceMap::end
    - Server*::_nerror_bvar::name
    - Controller*::response_attachment
    - Server*::options
    - ThriftService*::Describe
    - google::protobuf::MethodDescriptor*::output_type
    - dynamic_cast<Describable*>
    - CHECK
    - BaiduMasterService*::_status::Describe
    - Controller*::set_response_compress_type
    - service::GetDescriptor
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - Server::MethodProperty*::status::Describe
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::MethodDescriptor*::input_type
    - static_cast<Controller*>
    - Server*::_nerror_bvar::get_value
    - google::protobuf::ServiceDescriptor*::full_name
    - Server*::Concurrency
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadService*::Describe
    - Server*::GetStat
    - butil::IOBufBuilder::IOBufBuilder
    - std::ostringstream::str
    - Server*::ServerPrefix
    - google::protobuf::MethodDescriptor*::name
    - is_user_service
    - Server*::version
    - BaiduMasterService*::Describe
    - Server*::PrintTabsBody
    - Describe
    - dynamic_cast<Tabbed*>
    - ThriftService*::_status::Describe
    - UseHTML
    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:
    - Server::ServiceMap::begin
    - Describable*::Describe
    - PutVarsHeading
    - NsheadService*::_status::Describe
    - butil::IOBufBuilder::move_to
    - Server*::_method_map::seek
    - Server::ServiceMap::end
    - Server*::_nerror_bvar::name
    - Controller*::response_attachment
    - Server*::options
    - ThriftService*::Describe
    - google::protobuf::MethodDescriptor*::output_type
    - dynamic_cast<Describable*>
    - CHECK
    - BaiduMasterService*::_status::Describe
    - Controller*::set_response_compress_type
    - service::GetDescriptor
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - Server::MethodProperty*::status::Describe
    - google::protobuf::ServiceDescriptor*::method
    - google::protobuf::MethodDescriptor*::input_type
    - static_cast<Controller*>
    - Server*::_nerror_bvar::get_value
    - google::protobuf::ServiceDescriptor*::full_name
    - Server*::Concurrency
    - google::protobuf::ServiceDescriptor*::method_count
    - NsheadService*::Describe
    - Server*::GetStat
    - butil::IOBufBuilder::IOBufBuilder
    - std::ostringstream::str
    - Server*::ServerPrefix
    - google::protobuf::MethodDescriptor*::name
    - is_user_service
    - Server*::version
    - BaiduMasterService*::Describe
    - Server*::PrintTabsBody
    - Describe
    - dynamic_cast<Tabbed*>
    - ThriftService*::_status::Describe
    - UseHTML
    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
    - static_cast<Controller*>
    - GenerateReport
    - Controller*::response_attachment
    - Controller*::server
    - Server*::options
    - Controller*::http_response
    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
    - static_cast<Controller*>
    - GenerateReport
    - Controller*::response_attachment
    - Controller*::server
    - Server*::options
    - Controller*::http_response
    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
    - std::string*::length
    - strtol
    - Controller*::SetFailed
    - Controller*::http_request
    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:
    - localtime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - strftime
    - 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:
    - butil::IOPortal::IOPortal
    - Controller*::remote_side
    - LOG
    - butil::CreateDirectoryAndGetError
    - Controller*::response_attachment
    - butil::FilePath::value
    - PLOG
    - Controller*::http_response
    - ProfilerStart
    - static_cast<Controller*>
    - butil::FilePath
    - ProfilerStop
    - std::ostringstream::str
    - Controller*::Failed
    - ReadSeconds
    - bthread_usleep
    - berror
    - MakeProfName
    - Controller*::SetFailed
    - Controller*::auth_context
    - butil::IOPortal::append_from_file_descriptor
    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
    - static_cast<Controller*>
    - ContentionProfilerStop
    - butil::IOPortal::IOPortal
    - bthread_usleep
    - PLOG
    - MakeProfName
    - berror
    - Controller*::remote_side
    - Controller*::response_attachment
    - LOG
    - butil::IOPortal::append_from_file_descriptor
    - std::ostringstream::str
    - ContentionProfilerStart
    - Controller*::SetFailed
    - Controller*::http_response
    - Controller*::auth_context
    - Controller*::Failed
    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:
    - static_cast<Controller*>
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    - Controller*::response_attachment
    - LOG
    - std::ostringstream::str
    - has_TCMALLOC_SAMPLE_PARAMETER
    - Controller*::SetFailed
    - JeControlProfile
    - HasJemalloc
    - Controller*::auth_context
    - MallocExtension*::GetHeapSample
    - Controller*::http_response
    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:
    - static_cast<Controller*>
    - berror
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    - Controller*::response_attachment
    - MallocExtension*::GetHeapGrowthStacks
    - LOG
    - Controller*::SetFailed
    - std::ostringstream::str
    - Controller*::auth_context
    - Controller*::http_response
    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:
    - butil::StringSplitter::field
    - SymbolMap::iterator::second::size
    - std::string::append
    - LOG
    - butil::Timer::start
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - std::string
    - butil::Timer::Timer
    - isdigit
    - std::string::c_str
    - find
    - butil::read_command_output
    - strtoull
    - std::getline
    - SymbolMap::iterator::second::assign
    - butil::StringSplitter::length
    - end
    - strncmp
    - isalpha
    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::field
    - getline
    - RPC_VLOG_IF
    - butil::Timer::start
    - butil::ScopedFILE::get
    - butil::Timer::m_elapsed
    - begin
    - butil::Timer::stop
    - fopen
    - SymbolMap::iterator::second::empty
    - butil::Timer::Timer
    - butil::BaseIteratorRangeToNumberTraits::max
    - strtoull
    - brpc::HasExt
    - free
    - erase
    - brpc::ExtractSymbolsFromBinary
    - getprogname
    - butil::StringSplitter::length
    - end
    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:
    - begin
    - butil::IOBuf*::append
    - end
    - SymbolMap::const_iterator::second::empty
    - brpc::size
    - butil::IOBuf*::push_back
    - lower_bound
    - snprintf
    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:
    - static_cast<Controller*>
    - std::vector::reserve
    - std::string::c_str
    - std::vector::push_back
    - Controller*::request_attachment
    - butil::StringSplitter::field
    - Controller*::response_attachment
    - strtoull
    - FindSymbols
    - snprintf
    - Controller*::http_request
    - Controller*::http_response
    - size
    - pthread_once
    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:
    - static_cast<Controller*>
    - butil::ReadCommandLine
    - Controller*::SetFailed
    - Controller*::response_attachment
    - Controller*::http_response
    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
    - std::string*::length
    - strtol
    - Controller*::SetFailed
    - Controller*::http_request
    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:
    - localtime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - strftime
    - 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:
    - butil::IOPortal::IOPortal
    - Controller*::remote_side
    - LOG
    - butil::CreateDirectoryAndGetError
    - Controller*::response_attachment
    - butil::FilePath::value
    - PLOG
    - Controller*::http_response
    - ProfilerStart
    - static_cast<Controller*>
    - butil::FilePath
    - ProfilerStop
    - std::ostringstream::str
    - Controller*::Failed
    - ReadSeconds
    - bthread_usleep
    - berror
    - MakeProfName
    - Controller*::SetFailed
    - Controller*::auth_context
    - butil::IOPortal::append_from_file_descriptor
    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
    - static_cast<Controller*>
    - ContentionProfilerStop
    - butil::IOPortal::IOPortal
    - bthread_usleep
    - PLOG
    - MakeProfName
    - berror
    - Controller*::remote_side
    - Controller*::response_attachment
    - LOG
    - butil::IOPortal::append_from_file_descriptor
    - std::ostringstream::str
    - ContentionProfilerStart
    - Controller*::SetFailed
    - Controller*::http_response
    - Controller*::auth_context
    - Controller*::Failed
    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:
    - static_cast<Controller*>
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    - Controller*::response_attachment
    - LOG
    - std::ostringstream::str
    - has_TCMALLOC_SAMPLE_PARAMETER
    - Controller*::SetFailed
    - JeControlProfile
    - HasJemalloc
    - Controller*::auth_context
    - MallocExtension*::GetHeapSample
    - Controller*::http_response
    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:
    - static_cast<Controller*>
    - berror
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    - Controller*::response_attachment
    - MallocExtension*::GetHeapGrowthStacks
    - LOG
    - Controller*::SetFailed
    - std::ostringstream::str
    - Controller*::auth_context
    - Controller*::http_response
    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:
    - butil::StringSplitter::field
    - SymbolMap::iterator::second::size
    - std::string::append
    - LOG
    - butil::Timer::start
    - butil::Timer::m_elapsed
    - butil::Timer::stop
    - std::string
    - butil::Timer::Timer
    - isdigit
    - std::string::c_str
    - find
    - butil::read_command_output
    - strtoull
    - std::getline
    - SymbolMap::iterator::second::assign
    - butil::StringSplitter::length
    - end
    - strncmp
    - isalpha
    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::field
    - getline
    - RPC_VLOG_IF
    - butil::Timer::start
    - butil::ScopedFILE::get
    - butil::Timer::m_elapsed
    - begin
    - butil::Timer::stop
    - fopen
    - SymbolMap::iterator::second::empty
    - butil::Timer::Timer
    - butil::BaseIteratorRangeToNumberTraits::max
    - strtoull
    - brpc::HasExt
    - free
    - erase
    - brpc::ExtractSymbolsFromBinary
    - getprogname
    - butil::StringSplitter::length
    - end
    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:
    - begin
    - butil::IOBuf*::append
    - end
    - SymbolMap::const_iterator::second::empty
    - brpc::size
    - butil::IOBuf*::push_back
    - lower_bound
    - snprintf
    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:
    - static_cast<Controller*>
    - std::vector::reserve
    - std::string::c_str
    - std::vector::push_back
    - Controller*::request_attachment
    - butil::StringSplitter::field
    - Controller*::response_attachment
    - strtoull
    - FindSymbols
    - snprintf
    - Controller*::http_request
    - Controller*::http_response
    - size
    - pthread_once
    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:
    - static_cast<Controller*>
    - butil::ReadCommandLine
    - Controller*::SetFailed
    - Controller*::response_attachment
    - Controller*::http_response
    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:
    - butil::CaseIgnoredFlatMap*::seek
    - std::call_once
    - 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
    - std::string::reserve
    - brpc::size
    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:
    - butil::FilePath::value
    - fwrite
    - fclose
    - LOG
    - brpc::size
    - fopen
    - data
    - CHECK_EQ
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    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:
    - butil::FilePath::value
    - butil::IOBufAsZeroCopyInputStream::Next
    - fwrite
    - fclose
    - LOG
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    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
    - std::min
    - std::string*::length
    - strtol
    - Controller*::http_request
    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:
    - isalpha
    - starts_with
    - isdigit
    - brpc::size
    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:
    - localtime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - strftime
    - 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:
    - BAIDU_SCOPED_LOCK
    - LOG
    - ProfilingResult::ProfilingResult
    - waiters::swap
    - std::vector<ProfilingWaiter>*::clear
    - Controller*::response_attachment
    - Controller*::http_response
    - arraysize
    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:
    - CHECK
    - std::vector::size
    - brpc::ConsumeWaiters
    - Controller*::response_attachment
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    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:
    - brpc::DisplayTypeToPProfArgument
    - feof
    - brpc::pprof_perl
    - brpc::StringToDisplayType
    - LOG
    - butil::IOBufBuilder::move_to
    - butil::IOBuf::cut_until
    - ferror
    - brpc::GetBaseName
    - Controller*::response_attachment
    - brpc::GetProgramPath
    - butil::DeleteFile
    - butil::FilePath::value
    - std::string*::c_str
    - butil::IOBuf::swap
    - CHECK
    - fopen
    - append
    - Controller*::http_request
    - Controller*::http_response
    - std::string::c_str
    - brpc::ValidProfilePath
    - butil::FilePath
    - PLOG_IF
    - fclose
    - butil::read_command_output
    - fread
    - butil::IOBuf::append
    - brpc::WriteSmallFile
    - Controller*::IsCanceled
    - butil::PathExists
    - butil::IOBufBuilder::IOBufBuilder
    - getenv
    - brpc::UseHTML
    - brpc::GeneratePerlScriptPath
    - std::ostringstream::str
    - berror
    - brpc::MakeCacheName
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    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:
    - ClosureGuard::release
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    - brpc::TabsHead
    - butil::IOBufBuilder::move_to
    - LOG
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - std::vector::size
    - ContentionProfilerStart
    - Controller*::response_attachment
    - butil::CreateDirectoryAndGetError
    - LOG_IF
    - std::vector<ProfilingWaiter>::vector<ProfilingWaiter>
    - butil::FilePath::value
    - strtoll
    - PLOG
    - std::string*::c_str
    - brpc::ReadSeconds
    - brpc::ProfilingType2String
    - waiters::push_back
    - CHECK
    - MallocExtension*::GetHeapGrowthStacks
    - butil::IOBufBuilder::buf
    - brpc::NotifyWaiters
    - Controller*::http_request
    - Controller*::server
    - Controller*::http_response
    - ProfilerStart
    - static_cast<Controller*>
    - brpc::MakeProfName
    - brpc::DisplayResult
    - BAIDU_SCOPED_LOCK
    - brpc::ValidProfilePath
    - butil::FilePath
    - butil::cpuwide_time_us
    - butil::IOBufProfilerFlush
    - ProfilerStop
    - brpc::WriteSmallFile
    - butil::IsIOBufProfilerEnabled
    - brpc::ConsumeWaiters
    - butil::PathExists
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::UseHTML
    - std::ostringstream::str
    - MallocExtension*::GetHeapSample
    - ContentionProfilerStop
    - bthread_usleep
    - berror
    - ProfilingClient::ProfilingClient
    - has_TCMALLOC_SAMPLE_PARAMETER
    - Controller*::SetFailed
    - Controller*::auth_context
    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:
    - ClosureGuard::release
    - butil::FilePath::empty
    - brpc::logo
    - brpc::TabsHead
    - butil::IOBufBuilder::move_to
    - brpc::StringToDisplayType
    - std::string::append
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - std::greater<std::string>
    - std::vector::size
    - brpc::GetBaseName
    - brpc::StartProfiling
    - Controller*::response_attachment
    - brpc::DoProfiling
    - butil::DeleteFile
    - std::vector::reserve
    - butil::FilePath::value
    - brpc::ReadSeconds
    - std::string*::c_str
    - brpc::ProfilingType2String
    - std::vector::end
    - CHECK
    - TRACEPRINTF
    - butil::FilePath::Append
    - IsHeapProfilerEnabled
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - std::vector::resize
    - static_cast<Controller*>
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - butil::FilePath
    - butil::cpuwide_time_us
    - std::vector::begin
    - butil::IsIOBufProfilerEnabled
    - getenv
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::UseHTML
    - brpc::DisplayTypeToString
    - std::sort
    - std::vector::empty
    - waiters::size
    - butil::FileEnumerator::Next
    - ceil
    - brpc::size
    - has_TCMALLOC_SAMPLE_PARAMETER
    - brpc::GetProgramChecksum
    - Controller*::SetFailed
    - add
    - std::string::reserve
    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:
    - butil::CaseIgnoredFlatMap*::seek
    - std::call_once
    - 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
    - std::string::reserve
    - brpc::size
    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:
    - butil::FilePath::value
    - fwrite
    - fclose
    - LOG
    - brpc::size
    - fopen
    - data
    - CHECK_EQ
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    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:
    - butil::FilePath::value
    - butil::IOBufAsZeroCopyInputStream::Next
    - fwrite
    - fclose
    - LOG
    - fopen
    - butil::CreateDirectoryAndGetError
    - butil::FilePath::DirName
    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
    - std::min
    - std::string*::length
    - strtol
    - Controller*::http_request
    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:
    - isalpha
    - starts_with
    - isdigit
    - brpc::size
    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:
    - localtime
    - brpc::ProfilingType2String
    - brpc::GetProgramChecksum
    - snprintf
    - strftime
    - 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:
    - BAIDU_SCOPED_LOCK
    - LOG
    - ProfilingResult::ProfilingResult
    - waiters::swap
    - std::vector<ProfilingWaiter>*::clear
    - Controller*::response_attachment
    - Controller*::http_response
    - arraysize
    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:
    - CHECK
    - std::vector::size
    - brpc::ConsumeWaiters
    - Controller*::response_attachment
    - Controller*::http_response
    - ::google::protobuf::Closure*::Run
    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:
    - brpc::DisplayTypeToPProfArgument
    - feof
    - brpc::pprof_perl
    - brpc::StringToDisplayType
    - LOG
    - butil::IOBufBuilder::move_to
    - butil::IOBuf::cut_until
    - ferror
    - brpc::GetBaseName
    - Controller*::response_attachment
    - brpc::GetProgramPath
    - butil::DeleteFile
    - butil::FilePath::value
    - std::string*::c_str
    - butil::IOBuf::swap
    - CHECK
    - fopen
    - append
    - Controller*::http_request
    - Controller*::http_response
    - std::string::c_str
    - brpc::ValidProfilePath
    - butil::FilePath
    - PLOG_IF
    - fclose
    - butil::read_command_output
    - fread
    - butil::IOBuf::append
    - brpc::WriteSmallFile
    - Controller*::IsCanceled
    - butil::PathExists
    - butil::IOBufBuilder::IOBufBuilder
    - getenv
    - brpc::UseHTML
    - brpc::GeneratePerlScriptPath
    - std::ostringstream::str
    - berror
    - brpc::MakeCacheName
    - Controller*::SetFailed
    - butil::IOBuf::IOBuf
    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:
    - ClosureGuard::release
    - brpc::Extension<T>::instance
    - Controller*::remote_side
    - brpc::TabsHead
    - butil::IOBufBuilder::move_to
    - LOG
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - std::vector::size
    - ContentionProfilerStart
    - Controller*::response_attachment
    - butil::CreateDirectoryAndGetError
    - LOG_IF
    - std::vector<ProfilingWaiter>::vector<ProfilingWaiter>
    - butil::FilePath::value
    - strtoll
    - PLOG
    - std::string*::c_str
    - brpc::ReadSeconds
    - brpc::ProfilingType2String
    - waiters::push_back
    - CHECK
    - MallocExtension*::GetHeapGrowthStacks
    - butil::IOBufBuilder::buf
    - brpc::NotifyWaiters
    - Controller*::http_request
    - Controller*::server
    - Controller*::http_response
    - ProfilerStart
    - static_cast<Controller*>
    - brpc::MakeProfName
    - brpc::DisplayResult
    - BAIDU_SCOPED_LOCK
    - brpc::ValidProfilePath
    - butil::FilePath
    - butil::cpuwide_time_us
    - butil::IOBufProfilerFlush
    - ProfilerStop
    - brpc::WriteSmallFile
    - butil::IsIOBufProfilerEnabled
    - brpc::ConsumeWaiters
    - butil::PathExists
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::UseHTML
    - std::ostringstream::str
    - MallocExtension*::GetHeapSample
    - ContentionProfilerStop
    - bthread_usleep
    - berror
    - ProfilingClient::ProfilingClient
    - has_TCMALLOC_SAMPLE_PARAMETER
    - Controller*::SetFailed
    - Controller*::auth_context
    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:
    - ClosureGuard::release
    - butil::FilePath::empty
    - brpc::logo
    - brpc::TabsHead
    - butil::IOBufBuilder::move_to
    - brpc::StringToDisplayType
    - std::string::append
    - brpc::has_GOOGLE_PPROF_BINARY_PATH
    - std::greater<std::string>
    - std::vector::size
    - brpc::GetBaseName
    - brpc::StartProfiling
    - Controller*::response_attachment
    - brpc::DoProfiling
    - butil::DeleteFile
    - std::vector::reserve
    - butil::FilePath::value
    - brpc::ReadSeconds
    - std::string*::c_str
    - brpc::ProfilingType2String
    - std::vector::end
    - CHECK
    - TRACEPRINTF
    - butil::FilePath::Append
    - IsHeapProfilerEnabled
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - std::vector::resize
    - static_cast<Controller*>
    - BAIDU_SCOPED_LOCK
    - std::vector::push_back
    - butil::FilePath
    - butil::cpuwide_time_us
    - std::vector::begin
    - butil::IsIOBufProfilerEnabled
    - getenv
    - butil::IOBufBuilder::IOBufBuilder
    - brpc::UseHTML
    - brpc::DisplayTypeToString
    - std::sort
    - std::vector::empty
    - waiters::size
    - butil::FileEnumerator::Next
    - ceil
    - brpc::size
    - has_TCMALLOC_SAMPLE_PARAMETER
    - brpc::GetProgramChecksum
    - Controller*::SetFailed
    - add
    - std::string::reserve
    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*::find
    - uri
    - std::string*::c_str
    - atoi
    - 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:
    - c_str
    - brpc::url_wildcmp
    - brpc::size
    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:
    - localtime_r
    - std::setw
    - strftime
    - fill
    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:
    - localtime_r
    - std::setw
    - strftime
    - fill
    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*::find_last_of
    - std::string*::append
    - strcmp
    - std::string*::data
    - std::string*::c_str
    - std::string*::clear
    - std::string*::push_back
    - std::string*::size
    - std::string*::resize
    - brpc::size
    - std::string*::empty
    - butil::back_char
    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:
    - PLOG
    - butil::MurmurHash3_x64_128_Init
    - butil::MurmurHash3_x64_128_Final
    - butil::MurmurHash3_x64_128_Update
    - read
    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::FileChecksum
    - brpc::GetProgramPath
    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:
    - Controller*::http_request
    - std::string*::find
    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:
    - gmtime_r
    - strftime
    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*::find
    - uri
    - std::string*::c_str
    - atoi
    - 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:
    - c_str
    - brpc::url_wildcmp
    - brpc::size
    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:
    - localtime_r
    - std::setw
    - strftime
    - fill
    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:
    - localtime_r
    - std::setw
    - strftime
    - fill
    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*::find_last_of
    - std::string*::append
    - strcmp
    - std::string*::data
    - std::string*::c_str
    - std::string*::clear
    - std::string*::push_back
    - std::string*::size
    - std::string*::resize
    - brpc::size
    - std::string*::empty
    - butil::back_char
    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:
    - PLOG
    - butil::MurmurHash3_x64_128_Init
    - butil::MurmurHash3_x64_128_Final
    - butil::MurmurHash3_x64_128_Update
    - read
    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::FileChecksum
    - brpc::GetProgramPath
    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:
    - Controller*::http_request
    - std::string*::find
    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:
    - gmtime_r
    - strftime
    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:
    - CHECK
    - butil::IOBuf::IOBuf
    - append
    - brpc::jquery_min_js
    - brpc::policy::GzipCompress
    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:
    - CHECK
    - butil::IOBuf::IOBuf
    - append
    - brpc::jquery_min_js
    - brpc::policy::GzipCompress
    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:
    - butil::IOBuf::IOBuf
    - brpc::viz_min_js
    - append
    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:
    - CHECK
    - butil::IOBuf::append
    - brpc::policy::GzipCompress
    - butil::IOBuf::IOBuf
    - brpc::viz_min_js
    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:
    - butil::IOBuf::IOBuf
    - brpc::viz_min_js
    - append
    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:
    - CHECK
    - butil::IOBuf::append
    - brpc::policy::GzipCompress
    - butil::IOBuf::IOBuf
    - brpc::viz_min_js
    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:
    - static_cast<Controller*>
    - Controller*::response_attachment
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    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:
    - static_cast<Controller*>
    - Controller*::response_attachment
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    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:
    - static_cast<Controller*>
    - butil::IOBufBuilder::move_to
    - DescribeSpanDB
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::response_attachment
    - Controller*::http_response
    - has_span_db
    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:
    - localtime_r
    - std::setw
    - strftime
    - fill
    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::setprecision
    - std::setw
    linkageType: ''
    returnType: void
    signature: "void PrintElapse(std::ostream& os, int64_t cur_time,\n                        int64_t*
      last_time)"
  - BBCount: 6
    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: RpczSpan*::type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:200,1
    - Dst: RpczSpan*::type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:202,1
    - Dst: RpczSpan*::type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:204,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:207,1
    - Dst: RpczSpan*::span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:207,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:209,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:210,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:210,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 6
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extractors
    - num_extr
    - span
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 186
    functionDepth: 3
    functionLinenumber: 186
    functionLinenumberEnd: 215
    functionName: brpc::PrintAnnotations
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - PopAnnotation
    - std::string::empty
    - brpc::PrintRealTime
    - brpc::WebEscape
    - brpc::PrintElapse
    - butil::back_char
    - RpczSpan*::type
    - brpc::Hex
    - RpczSpan*::span_id
    linkageType: ''
    returnType: void
    signature: "void PrintAnnotations(\n    std::ostream& os, int64_t cur_time, int64_t*
      last_time,\n    SpanInfoExtractor** extractors, int num_extr, const RpczSpan*
      span)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:224,1
    - Dst: brpc::PrintRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:225,1
    - Dst: brpc::PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:226,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 6
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extr
    - num_extr
    - span
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 217
    functionDepth: 4
    functionLinenumber: 217
    functionLinenumberEnd: 228
    functionName: brpc::PrintAnnotationsAndRealTimeSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - brpc::PrintRealTime
    - brpc::PrintAnnotations
    - brpc::PrintElapse
    linkageType: ''
    returnType: bool
    signature: "bool PrintAnnotationsAndRealTimeSpan(\n    std::ostream& os, int64_t
      cur_time, int64_t* last_time,\n    SpanInfoExtractor** extr, int num_extr, const
      RpczSpan* span)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:231,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:232,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    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:237,1
    - Dst: brpc::GetStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - RpczSpan
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 236
    functionDepth: 1
    functionLinenumber: 236
    functionLinenumberEnd: 238
    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: 13
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:254,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:254,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:258,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:258,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:263,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:268,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:268,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:270,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:272,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:278,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:278,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:286,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:286,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:288,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:288,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:288,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:290,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:290,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:292,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:292,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:292,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:293,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:293,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:294,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:294,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:304,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:304,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:306,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:306,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:309,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:310,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:312,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:312,1
    - Dst: async
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:312,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:315,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:315,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 47
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 244
    functionDepth: 5
    functionLinenumber: 244
    functionLinenumberEnd: 317
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - trace_id
    - ending_cid
    - brpc::PrintAnnotations
    - span_id
    - request_size
    - response_size
    - remote_ip
    - info
    - brpc::FindProtocol
    - brpc::WebEscape
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - base_cid
    - brpc::Hex
    - received_real_us
    - log_id
    - start_parse_real_us
    - remote_port
    - start_send_real_us
    - butil::my_ip
    - butil::BaseIteratorRangeToNumberTraits::max
    - async
    - protocol
    - butil::int2ip
    - full_method_name
    - start_callback_real_us
    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:321,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 323
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - brpc::PrintClientSpan
    - start_send_real_us
    linkageType: ''
    returnType: void
    signature: "void PrintClientSpan(std::ostream& os,const RpczSpan& span,\n                            bool
      use_html)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:327,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:336,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:336,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:337,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:338,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:338,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:342,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:342,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 325
    functionDepth: 4
    functionLinenumber: 325
    functionLinenumberEnd: 343
    functionName: brpc::PrintBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - info
    - parent_span_id
    - brpc::PrintAnnotations
    - span_id
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::Hex
    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:347,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:349,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: brpc::PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:352,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:353,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:353,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:355,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:358,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:358,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:360,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:364,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:364,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:365,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:365,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:366,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:367,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:367,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:370,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:371,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:372,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:373,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:373,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:377,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:378,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:379,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: client_spans_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:384,1
    - Dst: client_spans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:386,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:387,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:388,1
    - Dst: brpc::PrintBthreadSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:390,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:394,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:395,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:396,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:400,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:400,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:404,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:405,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:406,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:407,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:407,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:407,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:410,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:410,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:411,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 345
    functionDepth: 6
    functionLinenumber: 345
    functionLinenumberEnd: 412
    functionName: brpc::PrintServerSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - trace_id
    - brpc::PrintBthreadSpan
    - brpc::PrintClientSpan
    - brpc::PrintAnnotations
    - span_id
    - request_size
    - response_size
    - remote_ip
    - info
    - brpc::FindProtocol
    - parent_span_id
    - brpc::WebEscape
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - brpc::Hex
    - received_real_us
    - client_spans
    - log_id
    - start_parse_real_us
    - remote_port
    - start_send_real_us
    - butil::BaseIteratorRangeToNumberTraits::max
    - client_spans_size
    - brpc::PrintRealDateTime
    - ARRAY_SIZE
    - protocol
    - butil::int2ip
    - full_method_name
    - start_callback_real_us
    - type
    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:417,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:418,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 424
    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: 426
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 426
    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: 430
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 430
    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: 434
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 434
    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: 439
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 439
    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: 444
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 444
    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:447,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:448,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:449,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:450,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:451,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - BriefSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 446
    functionDepth: 0
    functionLinenumber: 446
    functionLinenumberEnd: 452
    functionName: brpc::RpczSpanFilter::Keep
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - log_id
    - latency_us
    - request_size
    - response_size
    - error_code
    linkageType: ''
    returnType: bool
    signature: bool Keep(const BriefSpan& span)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:467,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:467,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:470,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:471,1
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:474,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:474,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:481,1
    - Dst: timelocal
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:486,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' time_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 487
    functionName: brpc::ParseDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - localtime_r
    - strtol
    - timelocal
    - c_str
    - strptime
    - 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:493,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:496,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:499,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:505,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - str
    - val
    argTypes:
    - std::string*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 509
    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:516,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:518,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:518,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:519,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:522,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:526,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:528,1
    - Dst: has_span_db
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:531,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:544,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:545,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:548,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:551,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:551,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:559,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:562,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:562,1
    - Dst: FindSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:569,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: std::deque::begin
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: std::deque::end
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: CompareByStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: std::deque::resize
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:572,1
    - Dst: FindSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:573,1
    - Dst: std::deque::clear
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:574,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:577,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:580,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:580,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:586,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:588,1
    - Dst: PrintServerSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:589,1
    - Dst: PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:591,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:598,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:598,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:602,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:605,1
    - Dst: ParseDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:607,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:620,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:620,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:629,1
    - Dst: RpczSpanFilter::CheckLatency
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:632,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:632,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:632,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:635,1
    - Dst: RpczSpanFilter::CheckRequest
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:638,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:638,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:638,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:641,1
    - Dst: RpczSpanFilter::CheckResponse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:644,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:644,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:644,1
    - Dst: ParseUint64
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:647,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:647,1
    - Dst: RpczSpanFilter::CheckLogId
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:649,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:652,1
    - Dst: RpczSpanFilter::CheckErrorCode
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:658,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:658,1
    - Dst: ListSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:660,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:661,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:664,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:664,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:672,1
    - Dst: start_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:674,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:675,1
    - Dst: PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:676,1
    - Dst: latency_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:676,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:677,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:681,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:681,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:691,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:691,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:692,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:692,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:694,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:694,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:700,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:700,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:702,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:704,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:704,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:704,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:705,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:707,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:710,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:710,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:717,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:717,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: 719
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 719
    functionName: brpc::RpczService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - RpczSpanFilter::CheckLatency
    - trace_id
    - butil::gettimeofday_us
    - std::deque::end
    - RpczSpanFilter::CheckRequest
    - span_id
    - butil::IOBufBuilder::move_to
    - std::min
    - std::deque::size
    - request_size
    - ListSpans
    - CompareByStartRealTime
    - Controller*::response_attachment
    - PrintServerSpan
    - RpczSpanFilter::CheckErrorCode
    - std::deque::clear
    - response_size
    - strtoll
    - ParseDateTime
    - std::max
    - std::string*::c_str
    - start_real_us
    - PrintClientSpan
    - strtol
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - RpczSpanFilter::CheckLogId
    - error_code
    - static_cast<Controller*>
    - ParseUint64
    - std::deque::empty
    - log_id
    - TabsHead
    - latency_us
    - butil::my_ip
    - strtoull
    - FindSpan
    - PrintElapse
    - std::sort
    - butil::IOBufBuilder::IOBufBuilder
    - std::deque::begin
    - PrintRealDateTime
    - std::deque::resize
    - WebEscape
    - berror
    - Hex
    - FindSpans
    - full_method_name
    - UseHTML
    - RpczSpanFilter::CheckResponse
    - has_span_db
    - type
    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:722,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 725
    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: 4
    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:
    - static_cast<Controller*>
    - Controller*::response_attachment
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    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:
    - static_cast<Controller*>
    - Controller*::response_attachment
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    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:
    - static_cast<Controller*>
    - butil::IOBufBuilder::move_to
    - DescribeSpanDB
    - butil::IOBufBuilder::IOBufBuilder
    - Controller*::response_attachment
    - Controller*::http_response
    - has_span_db
    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:
    - localtime_r
    - std::setw
    - strftime
    - fill
    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::setprecision
    - std::setw
    linkageType: ''
    returnType: void
    signature: "void PrintElapse(std::ostream& os, int64_t cur_time,\n                        int64_t*
      last_time)"
  - BBCount: 6
    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: RpczSpan*::type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:200,1
    - Dst: RpczSpan*::type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:202,1
    - Dst: RpczSpan*::type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:204,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:207,1
    - Dst: RpczSpan*::span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:207,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:209,1
    - Dst: std::string::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:210,1
    - Dst: butil::back_char
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:210,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 24
    argCount: 6
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extractors
    - num_extr
    - span
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 186
    functionDepth: 3
    functionLinenumber: 186
    functionLinenumberEnd: 215
    functionName: brpc::PrintAnnotations
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 4
    functionsReached:
    - PopAnnotation
    - std::string::empty
    - brpc::PrintRealTime
    - brpc::WebEscape
    - brpc::PrintElapse
    - butil::back_char
    - RpczSpan*::type
    - brpc::Hex
    - RpczSpan*::span_id
    linkageType: ''
    returnType: void
    signature: "void PrintAnnotations(\n    std::ostream& os, int64_t cur_time, int64_t*
      last_time,\n    SpanInfoExtractor** extractors, int num_extr, const RpczSpan*
      span)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:224,1
    - Dst: brpc::PrintRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:225,1
    - Dst: brpc::PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:226,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 8
    argCount: 6
    argNames:
    - ' os'
    - cur_time
    - last_time
    - extr
    - num_extr
    - span
    argTypes:
    - std::ostream
    - int64_t
    - int64_t*
    - SpanInfoExtractor**
    - int
    - RpczSpan*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 228
      start: 217
    functionDepth: 4
    functionLinenumber: 217
    functionLinenumberEnd: 228
    functionName: brpc::PrintAnnotationsAndRealTimeSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached:
    - brpc::PrintRealTime
    - brpc::PrintAnnotations
    - brpc::PrintElapse
    linkageType: ''
    returnType: bool
    signature: "bool PrintAnnotationsAndRealTimeSpan(\n    std::ostream& os, int64_t
      cur_time, int64_t* last_time,\n    SpanInfoExtractor** extr, int num_extr, const
      RpczSpan* span)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:231,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:232,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:232,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 233
      start: 230
    functionDepth: 0
    functionLinenumber: 230
    functionLinenumberEnd: 233
    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:237,1
    - Dst: GetStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:237,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' s1'
    - ' s2'
    argTypes:
    - RpczSpan
    - RpczSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 238
      start: 236
    functionDepth: 0
    functionLinenumber: 236
    functionLinenumberEnd: 238
    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: 13
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:247,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:254,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:254,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:258,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:258,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:260,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:263,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:265,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:268,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:268,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:270,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:272,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:273,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:277,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:278,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:278,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:280,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:286,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:286,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:288,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:288,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:288,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:290,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:290,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:292,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:292,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:292,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:293,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:293,1
    - Dst: ending_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:294,1
    - Dst: base_cid
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:294,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:304,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:304,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:306,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:306,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:309,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:310,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:312,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:312,1
    - Dst: async
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:312,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:315,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:315,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 47
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 317
      start: 244
    functionDepth: 5
    functionLinenumber: 244
    functionLinenumberEnd: 317
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 2
    functionsReached:
    - trace_id
    - ending_cid
    - brpc::PrintAnnotations
    - span_id
    - request_size
    - response_size
    - remote_ip
    - info
    - brpc::FindProtocol
    - brpc::WebEscape
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - base_cid
    - brpc::Hex
    - received_real_us
    - log_id
    - start_parse_real_us
    - remote_port
    - start_send_real_us
    - butil::my_ip
    - butil::BaseIteratorRangeToNumberTraits::max
    - async
    - protocol
    - butil::int2ip
    - full_method_name
    - start_callback_real_us
    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:321,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:322,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 323
      start: 319
    functionDepth: 1
    functionLinenumber: 319
    functionLinenumberEnd: 323
    functionName: brpc::PrintClientSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 3
    functionsReached:
    - brpc::PrintClientSpan
    - start_send_real_us
    linkageType: ''
    returnType: void
    signature: "void PrintClientSpan(std::ostream& os,const RpczSpan& span,\n                            bool
      use_html)"
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: info
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:327,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:336,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:336,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:337,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:338,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:338,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:342,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:342,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 5
    argNames:
    - ' os'
    - ' span'
    - last_time
    - server_extr
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - int64_t*
    - SpanInfoExtractor*
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 325
    functionDepth: 4
    functionLinenumber: 325
    functionLinenumberEnd: 343
    functionName: brpc::PrintBthreadSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - info
    - parent_span_id
    - brpc::PrintAnnotations
    - span_id
    - butil::BaseIteratorRangeToNumberTraits::max
    - brpc::Hex
    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:347,1
    - Dst: received_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:349,1
    - Dst: butil::int2ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: remote_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: remote_port
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:351,1
    - Dst: brpc::PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:352,1
    - Dst: brpc::FindProtocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:353,1
    - Dst: protocol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:353,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:355,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:358,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:358,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:360,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:364,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:364,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:365,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:365,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:366,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:367,1
    - Dst: parent_span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:367,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:370,1
    - Dst: start_parse_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:371,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:372,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:373,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:373,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:377,1
    - Dst: start_callback_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:378,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:379,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:381,1
    - Dst: client_spans_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:384,1
    - Dst: client_spans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:386,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:387,1
    - Dst: brpc::PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:388,1
    - Dst: brpc::PrintBthreadSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:390,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:394,1
    - Dst: start_send_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:395,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:396,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: brpc::WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:398,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:400,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:400,1
    - Dst: brpc::PrintAnnotationsAndRealTimeSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:404,1
    - Dst: sent_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:405,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:406,1
    - Dst: brpc::Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:407,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:407,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:407,1
    - Dst: brpc::PrintAnnotations
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:410,1
    - Dst: butil::BaseIteratorRangeToNumberTraits::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:410,1
    - Dst: ARRAY_SIZE
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:411,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 38
    argCount: 3
    argNames:
    - ' os'
    - ' span'
    - use_html
    argTypes:
    - std::ostream
    - RpczSpan
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 412
      start: 345
    functionDepth: 6
    functionLinenumber: 345
    functionLinenumberEnd: 412
    functionName: brpc::PrintServerSpan
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - trace_id
    - brpc::PrintBthreadSpan
    - brpc::PrintClientSpan
    - brpc::PrintAnnotations
    - span_id
    - request_size
    - response_size
    - remote_ip
    - info
    - brpc::FindProtocol
    - parent_span_id
    - brpc::WebEscape
    - sent_real_us
    - brpc::PrintAnnotationsAndRealTimeSpan
    - brpc::Hex
    - received_real_us
    - client_spans
    - log_id
    - start_parse_real_us
    - remote_port
    - start_send_real_us
    - butil::BaseIteratorRangeToNumberTraits::max
    - client_spans_size
    - brpc::PrintRealDateTime
    - ARRAY_SIZE
    - protocol
    - butil::int2ip
    - full_method_name
    - start_callback_real_us
    - type
    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:417,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:418,1
    - Dst: brpc::GetJsService::jquery_min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:419,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 1
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 424
      start: 416
    functionDepth: 1
    functionLinenumber: 416
    functionLinenumberEnd: 424
    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: 426
      start: 426
    functionDepth: 0
    functionLinenumber: 426
    functionLinenumberEnd: 426
    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: 430
      start: 428
    functionDepth: 0
    functionLinenumber: 428
    functionLinenumberEnd: 430
    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: 434
      start: 432
    functionDepth: 0
    functionLinenumber: 432
    functionLinenumberEnd: 434
    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: 439
      start: 436
    functionDepth: 0
    functionLinenumber: 436
    functionLinenumberEnd: 439
    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: 444
      start: 441
    functionDepth: 0
    functionLinenumber: 441
    functionLinenumberEnd: 444
    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:447,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:448,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:449,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:450,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:451,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 2
    argCount: 1
    argNames:
    - ' span'
    argTypes:
    - BriefSpan
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 452
      start: 446
    functionDepth: 0
    functionLinenumber: 446
    functionLinenumberEnd: 452
    functionName: brpc::RpczSpanFilter::Keep
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - log_id
    - latency_us
    - request_size
    - response_size
    - error_code
    linkageType: ''
    returnType: bool
    signature: bool Keep(const BriefSpan& span)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:467,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:467,1
    - Dst: time
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:470,1
    - Dst: localtime_r
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:471,1
    - Dst: strptime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:474,1
    - Dst: c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:474,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:481,1
    - Dst: timelocal
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:486,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 18
    argCount: 1
    argNames:
    - ' time_str'
    argTypes:
    - std::string
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 487
      start: 464
    functionDepth: 0
    functionLinenumber: 464
    functionLinenumberEnd: 487
    functionName: brpc::ParseDateTime
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 0
    functionsReached:
    - localtime_r
    - strtol
    - timelocal
    - c_str
    - strptime
    - 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:493,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:496,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:499,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:505,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 17
    argCount: 2
    argNames:
    - str
    - val
    argTypes:
    - std::string*
    - uint64_t*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 509
      start: 489
    functionDepth: 0
    functionLinenumber: 489
    functionLinenumberEnd: 509
    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:516,1
    - Dst: UseHTML
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:518,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:518,1
    - Dst: Controller*::http_response
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:519,1
    - Dst: butil::IOBufBuilder::IOBufBuilder
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:522,1
    - Dst: TabsHead
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:526,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:528,1
    - Dst: has_span_db
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:531,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:541,1
    - Dst: butil::my_ip
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:544,1
    - Dst: Controller*::server
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:545,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:548,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:551,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:551,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:559,1
    - Dst: strtoull
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:562,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:562,1
    - Dst: FindSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:569,1
    - Dst: std::sort
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: std::deque::begin
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: std::deque::end
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: CompareByStartRealTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:570,1
    - Dst: std::deque::resize
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:572,1
    - Dst: FindSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:573,1
    - Dst: std::deque::clear
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:574,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:577,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:580,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:580,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:586,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:588,1
    - Dst: PrintServerSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:589,1
    - Dst: PrintClientSpan
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:591,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:598,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:598,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:602,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:605,1
    - Dst: ParseDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:607,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:611,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:617,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:620,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:620,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:629,1
    - Dst: RpczSpanFilter::CheckLatency
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:632,1
    - Dst: strtoll
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:632,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:632,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:635,1
    - Dst: RpczSpanFilter::CheckRequest
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:638,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:638,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:638,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:641,1
    - Dst: RpczSpanFilter::CheckResponse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:644,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:644,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:644,1
    - Dst: ParseUint64
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:647,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:647,1
    - Dst: RpczSpanFilter::CheckLogId
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:649,1
    - Dst: Controller*::http_request
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:652,1
    - Dst: RpczSpanFilter::CheckErrorCode
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: strtol
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: std::string*::c_str
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:655,1
    - Dst: std::max
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:658,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:658,1
    - Dst: ListSpans
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:660,1
    - Dst: std::deque::empty
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:661,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:664,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:664,1
    - Dst: std::deque::size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:672,1
    - Dst: start_real_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:674,1
    - Dst: PrintRealDateTime
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:675,1
    - Dst: PrintElapse
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:676,1
    - Dst: latency_us
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:676,1
    - Dst: type
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:677,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:681,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:681,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:683,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:691,1
    - Dst: trace_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:691,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:692,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:692,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:694,1
    - Dst: span_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:694,1
    - Dst: Hex
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:700,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:700,1
    - Dst: log_id
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:702,1
    - Dst: WebEscape
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:704,1
    - Dst: full_method_name
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:704,1
    - Dst: request_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:704,1
    - Dst: response_size
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:705,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:707,1
    - Dst: berror
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:710,1
    - Dst: error_code
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:710,1
    - Dst: butil::IOBufBuilder::move_to
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:717,1
    - Dst: Controller*::response_attachment
      Src: /src/brpc/src/brpc/builtin/rpcz_service.cpp:717,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: 719
      start: 511
    functionDepth: 1
    functionLinenumber: 511
    functionLinenumberEnd: 719
    functionName: brpc::RpczService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/rpcz_service.cpp
    functionUses: 1
    functionsReached:
    - RpczSpanFilter::CheckLatency
    - trace_id
    - butil::gettimeofday_us
    - std::deque::end
    - RpczSpanFilter::CheckRequest
    - span_id
    - butil::IOBufBuilder::move_to
    - std::min
    - std::deque::size
    - request_size
    - ListSpans
    - CompareByStartRealTime
    - Controller*::response_attachment
    - PrintServerSpan
    - RpczSpanFilter::CheckErrorCode
    - std::deque::clear
    - response_size
    - strtoll
    - ParseDateTime
    - std::max
    - std::string*::c_str
    - start_real_us
    - PrintClientSpan
    - strtol
    - Controller*::http_request
    - Controller*::http_response
    - Controller*::server
    - RpczSpanFilter::CheckLogId
    - error_code
    - static_cast<Controller*>
    - ParseUint64
    - std::deque::empty
    - log_id
    - TabsHead
    - latency_us
    - butil::my_ip
    - strtoull
    - FindSpan
    - PrintElapse
    - std::sort
    - butil::IOBufBuilder::IOBufBuilder
    - std::deque::begin
    - PrintRealDateTime
    - std::deque::resize
    - WebEscape
    - berror
    - Hex
    - FindSpans
    - full_method_name
    - UseHTML
    - RpczSpanFilter::CheckResponse
    - has_span_db
    - type
    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:722,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 3
    argCount: 1
    argNames:
    - info_list
    argTypes:
    - TabInfoList*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 725
      start: 721
    functionDepth: 1
    functionLinenumber: 721
    functionLinenumberEnd: 725
    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: 1
    functionLinenumber: 33
    functionLinenumberEnd: 58
    functionName: brpc::IdsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/ids_service.cpp
    functionUses: 1
    functionsReached:
    - static_cast<Controller*>
    - bthread::id_pool_status
    - Controller*::response_attachment
    - strtoull
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - bthread::id_status
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::http_response
    - 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: 1
    functionLinenumber: 33
    functionLinenumberEnd: 58
    functionName: brpc::IdsService::default_method
    functionSourceFile: /src/brpc/src/brpc/builtin/ids_service.cpp
    functionUses: 1
    functionsReached:
    - static_cast<Controller*>
    - bthread::id_pool_status
    - Controller*::response_attachment
    - strtoull
    - butil::IOBufBuilder::move_to
    - c_str
    - empty
    - bthread::id_status
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::http_response
    - 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:
    - static_cast<Controller*>
    - gridtable_style
    - Controller*::response_attachment
    - print_vlog_sites
    - butil::IOBufBuilder::move_to
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - 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:
    - static_cast<Controller*>
    - gridtable_style
    - Controller*::response_attachment
    - print_vlog_sites
    - butil::IOBufBuilder::move_to
    - UseHTML
    - Controller*::http_request
    - Controller*::http_response
    - 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
    - strlen
    - data
    - brpc::size
    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:
    - brpc::EndsWith
    - ::isupper
    - rfind
    - std::string::empty
    - brpc::size
    - std::string::push_back
    - tolower
    - std::string::reserve
    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:
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::swap
    - Server*::_am::NameOfProtocol
    - strcmp
    - BriefName
    - SocketUniquePtr::ssl_state
    - empty
    - SocketUniquePtr::remote_side
    - getsockopt
    - Server*::options
    - SocketUniquePtr::fd
    - min_width
    - std::string::empty
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::PeekAgentSocket
    - snprintf
    - SocketUniquePtr::preferred_index
    - NameOfPoint
    - size
    - SocketUniquePtr::GetPooledSocketStats
    - std::string::c_str
    - get_client_side_messenger
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::recent_error_count
    - SocketUniquePtr::CreatedByConnect
    - SocketUniquePtr::isolated_times
    - SocketUniquePtr::HasSocketPool
    - SocketUniquePtr::ListPooledSockets
    - SocketUniquePtr::local_side
    - PrintRealDateTime
    - strcpy
    - SocketUniquePtr::user
    - SocketUniquePtr::is_ssl
    - SSLStateToYesNo
    - butil::class_name_str
    - SocketUniquePtr::GetStat
    - std::vector::empty
    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
    - std::vector::size
    - brpc::ConnectionsService::PrintConnections
    - Controller*::response_attachment
    - std::vector::end
    - Controller*::set_response_compress_type
    - Controller*::http_request
    - Controller*::server
    - Controller*::http_response
    - static_cast<Controller*>
    - std::vector::insert
    - gridtable_style
    - TabsHead
    - butil::BaseIteratorRangeToNumberTraits::max
    - std::vector::begin
    - Acceptor*::ListConnections
    - Acceptor*::ConnectionCount
    - SocketMapList
    - butil::IOBufBuilder::IOBufBuilder
    - GetChannelConnectionCount
    - Server*::PrintTabsBody
    - UseHTML
    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
    - strlen
    - data
    - brpc::size
    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:
    - brpc::EndsWith
    - ::isupper
    - rfind
    - std::string::empty
    - brpc::size
    - std::string::push_back
    - tolower
    - std::string::reserve
    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:
    - SocketUniquePtr::HCEnabled
    - SocketUniquePtr::swap
    - Server*::_am::NameOfProtocol
    - strcmp
    - BriefName
    - SocketUniquePtr::ssl_state
    - empty
    - SocketUniquePtr::remote_side
    - getsockopt
    - Server*::options
    - SocketUniquePtr::fd
    - min_width
    - std::string::empty
    - brpc::VersionedRefWithId<T>::AddressFailedAsWell
    - SocketUniquePtr::PeekAgentSocket
    - snprintf
    - SocketUniquePtr::preferred_index
    - NameOfPoint
    - size
    - SocketUniquePtr::GetPooledSocketStats
    - std::string::c_str
    - get_client_side_messenger
    - brpc::SetTrackMeAddress
    - SocketUniquePtr::recent_error_count
    - SocketUniquePtr::CreatedByConnect
    - SocketUniquePtr::isolated_times
    - SocketUniquePtr::HasSocketPool
    - SocketUniquePtr::ListPooledSockets
    - SocketUniquePtr::local_side
    - PrintRealDateTime
    - strcpy
    - SocketUniquePtr::user
    - SocketUniquePtr::is_ssl
    - SSLStateToYesNo
    - butil::class_name_str
    - SocketUniquePtr::GetStat
    - std::vector::empty
    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
    - std::vector::size
    - brpc::ConnectionsService::PrintConnections
    - Controller*::response_attachment
    - std::vector::end
    - Controller*::set_response_compress_type
    - Controller*::http_request
    - Controller*::server
    - Controller*::http_response
    - static_cast<Controller*>
    - std::vector::insert
    - gridtable_style
    - TabsHead
    - butil::BaseIteratorRangeToNumberTraits::max
    - std::vector::begin
    - Acceptor*::ListConnections
    - Acceptor*::ConnectionCount
    - SocketMapList
    - butil::IOBufBuilder::IOBufBuilder
    - GetChannelConnectionCount
    - Server*::PrintTabsBody
    - UseHTML
    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:
    - std::string::empty
    - std::string::append
    - brpc::size
    - std::string::push_back
    - data
    - find_first_of
    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
    - c_str
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::response_attachment
    - butil::IOBufBuilder::IOBufBuilder
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    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:
    - ClosureGuard::release
    - butil::IOBufBuilder::move_to
    - empty
    - Controller*::response_attachment
    - std::string*::empty
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - std::vector::reserve
    - MatchAnyWildcard
    - std::string*::c_str
    - std::vector::end
    - butil::StringMultiSplitter::length
    - Controller*::set_response_compress_type
    - std::set<std::string>::iterator::c_str
    - Controller*::http_request
    - Controller*::http_response
    - c_str
    - std::string::find_first_of
    - Controller*::server
    - std::set::end
    - static_cast<Controller*>
    - std::vector::push_back
    - gridtable_style
    - TabsHead
    - std::set::insert
    - std::vector::begin
    - std::set::find
    - butil::IOBufBuilder::IOBufBuilder
    - PrintFlag
    - std::vector::empty
    - brpc::FlagsService::set_value_page
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::set::begin
    - GFLAGS_NAMESPACE::GetAllFlags
    - UseHTML
    - Controller*::SetFailed
    - butil::StringMultiSplitter::field
    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:
    - std::string::empty
    - std::string::append
    - brpc::size
    - std::string::push_back
    - data
    - find_first_of
    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
    - c_str
    - Controller*::SetFailed
    - Controller*::http_request
    - Controller*::response_attachment
    - butil::IOBufBuilder::IOBufBuilder
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    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:
    - ClosureGuard::release
    - butil::IOBufBuilder::move_to
    - empty
    - Controller*::response_attachment
    - std::string*::empty
    - GFLAGS_NAMESPACE::GetCommandLineFlagInfo
    - std::vector::reserve
    - MatchAnyWildcard
    - std::string*::c_str
    - std::vector::end
    - butil::StringMultiSplitter::length
    - Controller*::set_response_compress_type
    - std::set<std::string>::iterator::c_str
    - Controller*::http_request
    - Controller*::http_response
    - c_str
    - std::string::find_first_of
    - Controller*::server
    - std::set::end
    - static_cast<Controller*>
    - std::vector::push_back
    - gridtable_style
    - TabsHead
    - std::set::insert
    - std::vector::begin
    - std::set::find
    - butil::IOBufBuilder::IOBufBuilder
    - PrintFlag
    - std::vector::empty
    - brpc::FlagsService::set_value_page
    - GFLAGS_NAMESPACE::SetCommandLineOption
    - std::set::begin
    - GFLAGS_NAMESPACE::GetAllFlags
    - UseHTML
    - Controller*::SetFailed
    - butil::StringMultiSplitter::field
    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: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    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: 125
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 125
    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:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 133
    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: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:136,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:137,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:141,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:154,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:156,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:158,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:181,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 184
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - auto::dismiss
    - PLOG_EVERY_SECOND
    - free
    - g_cb
    - LOG_EVERY_SECOND
    - butil::get_object<IdleNode>
    - butil::return_object<IdleNode>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolImpl(void* region_base, size_t region_size, int
      block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:204,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:207,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:208,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 213
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - PLOG_EVERY_SECOND
    - posix_memalign
    - LOG
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:217,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:221,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:224,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:225,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:234,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:235,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 237
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - auto::dismiss
    - free
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolByUser(void* region_base, size_t region_size,
      int block_type)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:245,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:279,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:287,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:294,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:297,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:298,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:301,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:302,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:307,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:313,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:316,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:317,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:322,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:323,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:329,1
    - Dst: brpc::rdma::GetRdmaBlockType
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:330,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 74
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 239
    functionDepth: 3
    functionLinenumber: 239
    functionLinenumberEnd: 334
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - butil::Mutex::Mutex
    - brpc::rdma::GetRdmaBlockType
    - LOG
    - GlobalInfo::GlobalInfo
    - size
    - resize
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - block_type
    - index
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 343
    functionName: brpc::rdma::MoveExpansionList2EmptyIdleList
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MoveExpansionList2EmptyIdleList(int block_type, size_t index)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:347,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:348,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:352,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:359,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:363,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:368,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:369,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:372,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:375,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:380,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:389,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:393,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:401,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 62
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 345
    functionDepth: 3
    functionLinenumber: 345
    functionLinenumberEnd: 430
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - BAIDU_SCOPED_LOCK
    - if
    - unlock
    - CHECK
    - brpc::rdma::MoveExpansionList2EmptyIdleList
    - LOG_EVERY_SECOND
    - lock
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    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:439,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 432
    functionDepth: 4
    functionLinenumber: 432
    functionLinenumberEnd: 443
    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:450,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:455,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 460
    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: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:468,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:474,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:476,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:487,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:492,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:493,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:500,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:501,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:525,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:534,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 540
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - if
    - brpc::rdma::GetRegion
    - PLOG_EVERY_SECOND
    - unlock
    - butil::get_object<IdleNode>
    - lock
    - BAIDU_UNLIKELY
    - butil::thread_atexit
    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: 544
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 544
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:550,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:554,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 558
    functionName: brpc::rdma::GetRdmaBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetBlockSize
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t GetRdmaBlockSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:568,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 572
    functionName: brpc::rdma::GetRdmaBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int GetRdmaBlockType()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:579,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:580,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:592,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 604
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::GetBlockSize
    - usleep
    - BAIDU_SCOPED_LOCK
    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:608,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:614,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:633,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 607
    functionDepth: 2
    functionLinenumber: 607
    functionLinenumberEnd: 638
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - free
    - brpc::rdma::RecycleAll
    - 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:642,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 647
    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: 660
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 660
    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: 665
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 665
    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: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    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: 125
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 125
    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:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 133
    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: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:136,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:137,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:141,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:154,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:156,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:158,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:181,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 184
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - auto::dismiss
    - PLOG_EVERY_SECOND
    - free
    - g_cb
    - LOG_EVERY_SECOND
    - butil::get_object<IdleNode>
    - butil::return_object<IdleNode>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolImpl(void* region_base, size_t region_size, int
      block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:204,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:207,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:208,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 213
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - PLOG_EVERY_SECOND
    - posix_memalign
    - LOG
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:217,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:221,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:224,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:225,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:234,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:235,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 237
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - auto::dismiss
    - free
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolByUser(void* region_base, size_t region_size,
      int block_type)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:245,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:279,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:287,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:294,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:297,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:298,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:301,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:302,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:307,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:313,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:316,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:317,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:322,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:323,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:329,1
    - Dst: brpc::rdma::GetRdmaBlockType
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:330,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 74
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 239
    functionDepth: 3
    functionLinenumber: 239
    functionLinenumberEnd: 334
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - butil::Mutex::Mutex
    - brpc::rdma::GetRdmaBlockType
    - LOG
    - GlobalInfo::GlobalInfo
    - size
    - resize
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - block_type
    - index
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 343
    functionName: brpc::rdma::MoveExpansionList2EmptyIdleList
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MoveExpansionList2EmptyIdleList(int block_type, size_t index)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:347,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:348,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:352,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:359,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:363,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:368,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:369,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:372,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:375,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:380,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:389,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:393,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:401,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 62
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 345
    functionDepth: 3
    functionLinenumber: 345
    functionLinenumberEnd: 430
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - BAIDU_SCOPED_LOCK
    - if
    - unlock
    - CHECK
    - brpc::rdma::MoveExpansionList2EmptyIdleList
    - LOG_EVERY_SECOND
    - lock
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    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:439,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 432
    functionDepth: 4
    functionLinenumber: 432
    functionLinenumberEnd: 443
    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:450,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:455,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 460
    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: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:468,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:474,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:476,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:487,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:492,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:493,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:500,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:501,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:525,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:534,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 540
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - if
    - brpc::rdma::GetRegion
    - PLOG_EVERY_SECOND
    - unlock
    - butil::get_object<IdleNode>
    - lock
    - BAIDU_UNLIKELY
    - butil::thread_atexit
    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: 544
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 544
    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: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:550,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:554,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 558
    functionName: brpc::rdma::GetRdmaBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetBlockSize
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t GetRdmaBlockSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:568,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 572
    functionName: brpc::rdma::GetRdmaBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int GetRdmaBlockType()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:579,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:580,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:592,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 604
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::GetBlockSize
    - usleep
    - BAIDU_SCOPED_LOCK
    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:608,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:614,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:633,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 607
    functionDepth: 2
    functionLinenumber: 607
    functionLinenumberEnd: 638
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - free
    - brpc::rdma::RecycleAll
    - 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:642,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 647
    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: 660
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 660
    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: 665
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 665
    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: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    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: 125
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 125
    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:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 133
    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: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:136,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:137,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:141,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:154,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:156,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:158,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:181,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 184
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached:
    - auto::dismiss
    - PLOG_EVERY_SECOND
    - free
    - g_cb
    - LOG_EVERY_SECOND
    - butil::get_object<IdleNode>
    - butil::return_object<IdleNode>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolImpl(void* region_base, size_t region_size, int
      block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:204,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:207,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:208,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 213
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached:
    - PLOG_EVERY_SECOND
    - posix_memalign
    - LOG
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:217,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:221,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:224,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:225,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:234,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:235,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 237
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - auto::dismiss
    - free
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolByUser(void* region_base, size_t region_size,
      int block_type)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:245,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:279,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:287,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:294,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:297,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:298,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:301,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:302,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:307,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:313,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:316,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:317,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:322,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:323,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:329,1
    - Dst: brpc::rdma::GetRdmaBlockType
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:330,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 74
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 239
    functionDepth: 3
    functionLinenumber: 239
    functionLinenumberEnd: 334
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - butil::Mutex::Mutex
    - brpc::rdma::GetRdmaBlockType
    - LOG
    - GlobalInfo::GlobalInfo
    - size
    - resize
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - block_type
    - index
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 343
    functionName: brpc::rdma::MoveExpansionList2EmptyIdleList
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MoveExpansionList2EmptyIdleList(int block_type, size_t index)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:347,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:348,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:352,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:359,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:363,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:368,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:369,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:372,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:375,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:380,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:389,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:393,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:401,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 62
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 345
    functionDepth: 3
    functionLinenumber: 345
    functionLinenumberEnd: 430
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 2
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - BAIDU_SCOPED_LOCK
    - if
    - unlock
    - CHECK
    - brpc::rdma::MoveExpansionList2EmptyIdleList
    - LOG_EVERY_SECOND
    - lock
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    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:439,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 432
    functionDepth: 4
    functionLinenumber: 432
    functionLinenumberEnd: 443
    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:450,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:455,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 460
    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: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:468,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:474,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:476,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:487,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:492,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:493,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:500,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:501,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:525,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:534,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 540
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - if
    - brpc::rdma::GetRegion
    - PLOG_EVERY_SECOND
    - unlock
    - butil::get_object<IdleNode>
    - lock
    - BAIDU_UNLIKELY
    - butil::thread_atexit
    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: 544
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 544
    functionName: brpc::rdma::GetBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBlockSize(int type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:550,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:554,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 558
    functionName: brpc::rdma::GetRdmaBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetBlockSize
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t GetRdmaBlockSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:568,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 572
    functionName: brpc::rdma::GetRdmaBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 3
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int GetRdmaBlockType()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:579,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:580,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:592,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 604
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::GetBlockSize
    - usleep
    - BAIDU_SCOPED_LOCK
    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:608,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:614,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:633,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 607
    functionDepth: 2
    functionLinenumber: 607
    functionLinenumberEnd: 638
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - free
    - brpc::rdma::RecycleAll
    - 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:642,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 647
    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: 660
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 660
    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: 665
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 665
    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: 65
      start: 65
    functionDepth: 0
    functionLinenumber: 65
    functionLinenumberEnd: 65
    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: 125
      start: 107
    functionDepth: 0
    functionLinenumber: 107
    functionLinenumberEnd: 125
    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:128,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 133
      start: 127
    functionDepth: 1
    functionLinenumber: 127
    functionLinenumberEnd: 133
    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: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:136,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:137,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:141,1
    - Dst: g_cb
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:146,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:154,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:156,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:158,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:181,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 37
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 135
    functionDepth: 1
    functionLinenumber: 135
    functionLinenumberEnd: 184
    functionName: brpc::rdma::ExtendBlockPoolImpl
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 6
    functionsReached:
    - auto::dismiss
    - PLOG_EVERY_SECOND
    - free
    - g_cb
    - LOG_EVERY_SECOND
    - butil::get_object<IdleNode>
    - butil::return_object<IdleNode>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolImpl(void* region_base, size_t region_size, int
      block_type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:194,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:204,1
    - Dst: posix_memalign
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:207,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:208,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:212,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 17
    argCount: 2
    argNames:
    - region_size
    - block_type
    argTypes:
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 213
      start: 187
    functionDepth: 2
    functionLinenumber: 187
    functionLinenumberEnd: 213
    functionName: brpc::rdma::ExtendBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 6
    functionsReached:
    - PLOG_EVERY_SECOND
    - posix_memalign
    - LOG
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPool(size_t region_size, int block_type)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: butil::MakeScopeGuard
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:216,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:217,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:221,1
    - Dst: reinterpret_cast<uintptr_t>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:224,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:225,1
    - Dst: auto::dismiss
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:234,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:235,1
    - Dst: brpc::rdma::ExtendBlockPoolImpl
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:236,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 17
    argCount: 3
    argNames:
    - region_base
    - region_size
    - block_type
    argTypes:
    - void*
    - size_t
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 237
      start: 215
    functionDepth: 2
    functionLinenumber: 215
    functionLinenumberEnd: 237
    functionName: brpc::rdma::ExtendBlockPoolByUser
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - auto::dismiss
    - free
    - brpc::rdma::ExtendBlockPoolImpl
    - LOG_EVERY_SECOND
    - reinterpret_cast<uintptr_t>
    - butil::MakeScopeGuard
    linkageType: ''
    returnType: void
    signature: void * ExtendBlockPoolByUser(void* region_base, size_t region_size,
      int block_type)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:245,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:279,1
    - Dst: GlobalInfo::GlobalInfo
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:287,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:293,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:294,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:297,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:298,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:301,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:302,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:307,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:312,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:313,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:316,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:317,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:322,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:323,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:329,1
    - Dst: brpc::rdma::GetRdmaBlockType
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:330,1
    CyclomaticComplexity: 21
    EdgeCount: 21
    ICount: 74
    argCount: 1
    argNames:
    - cb
    argTypes:
    - RegisterCallback
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 334
      start: 239
    functionDepth: 3
    functionLinenumber: 239
    functionLinenumberEnd: 334
    functionName: brpc::rdma::InitBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - butil::Mutex::Mutex
    - brpc::rdma::GetRdmaBlockType
    - LOG
    - GlobalInfo::GlobalInfo
    - size
    - resize
    linkageType: ''
    returnType: bool
    signature: bool InitBlockPool(RegisterCallback cb)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:337,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 6
    argCount: 2
    argNames:
    - block_type
    - index
    argTypes:
    - int
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 343
      start: 336
    functionDepth: 1
    functionLinenumber: 336
    functionLinenumberEnd: 343
    functionName: brpc::rdma::MoveExpansionList2EmptyIdleList
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 3
    functionsReached:
    - CHECK
    linkageType: ''
    returnType: void
    signature: void MoveExpansionList2EmptyIdleList(int block_type, size_t index)
  - BBCount: 12
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:347,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:348,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:352,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:353,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:359,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:363,1
    - Dst: butil::fast_rand
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:368,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:369,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:372,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:375,1
    - Dst: brpc::rdma::ExtendBlockPool
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:380,1
    - Dst: LOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:381,1
    - Dst: brpc::rdma::MoveExpansionList2EmptyIdleList
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:389,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:393,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:401,1
    CyclomaticComplexity: 16
    EdgeCount: 16
    ICount: 62
    argCount: 1
    argNames:
    - block_type
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 430
      start: 345
    functionDepth: 3
    functionLinenumber: 345
    functionLinenumberEnd: 430
    functionName: brpc::rdma::AllocBlockFrom
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 3
    functionsReached:
    - brpc::rdma::ExtendBlockPool
    - BAIDU_SCOPED_LOCK
    - if
    - unlock
    - CHECK
    - brpc::rdma::MoveExpansionList2EmptyIdleList
    - LOG_EVERY_SECOND
    - lock
    - butil::return_object<IdleNode>
    - BAIDU_UNLIKELY
    - butil::fast_rand
    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:439,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 12
    argCount: 1
    argNames:
    - size
    argTypes:
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 443
      start: 432
    functionDepth: 4
    functionLinenumber: 432
    functionLinenumberEnd: 443
    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:450,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:455,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 11
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 460
      start: 445
    functionDepth: 1
    functionLinenumber: 445
    functionLinenumberEnd: 460
    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: 10
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetRegion
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:468,1
    - Dst: butil::get_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:474,1
    - Dst: PLOG_EVERY_SECOND
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:476,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:487,1
    - Dst: lock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:488,1
    - Dst: if
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:492,1
    - Dst: unlock
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:493,1
    - Dst: butil::thread_atexit
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:500,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:501,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:525,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:534,1
    CyclomaticComplexity: 11
    EdgeCount: 11
    ICount: 56
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 540
      start: 462
    functionDepth: 1
    functionLinenumber: 462
    functionLinenumberEnd: 540
    functionName: brpc::rdma::DeallocBlock
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - if
    - brpc::rdma::GetRegion
    - PLOG_EVERY_SECOND
    - unlock
    - butil::get_object<IdleNode>
    - lock
    - BAIDU_UNLIKELY
    - butil::thread_atexit
    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: 544
      start: 542
    functionDepth: 0
    functionLinenumber: 542
    functionLinenumberEnd: 544
    functionName: brpc::rdma::GetBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 6
    functionsReached: []
    linkageType: ''
    returnType: size_t
    signature: size_t GetBlockSize(int type)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:548,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:550,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:552,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:554,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 558
      start: 546
    functionDepth: 1
    functionLinenumber: 546
    functionLinenumberEnd: 558
    functionName: brpc::rdma::GetRdmaBlockSize
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetBlockSize
    - LOG
    linkageType: ''
    returnType: size_t
    signature: size_t GetRdmaBlockSize()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:568,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 572
      start: 560
    functionDepth: 1
    functionLinenumber: 560
    functionLinenumberEnd: 572
    functionName: brpc::rdma::GetRdmaBlockType
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 4
    functionsReached:
    - LOG
    linkageType: ''
    returnType: int
    signature: int GetRdmaBlockType()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: usleep
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:579,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:580,1
    - Dst: brpc::rdma::GetBlockSize
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:592,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 25
    argCount: 1
    argNames:
    - ' os'
    argTypes:
    - std::ostream
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 604
      start: 574
    functionDepth: 1
    functionLinenumber: 574
    functionLinenumberEnd: 604
    functionName: brpc::rdma::DumpMemoryPoolInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::GetBlockSize
    - usleep
    - BAIDU_SCOPED_LOCK
    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:608,1
    - Dst: butil::return_object<IdleNode>
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:614,1
    - Dst: free
      Src: /src/brpc/src/brpc/rdma/block_pool.cpp:633,1
    CyclomaticComplexity: 6
    EdgeCount: 6
    ICount: 28
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 638
      start: 607
    functionDepth: 2
    functionLinenumber: 607
    functionLinenumberEnd: 638
    functionName: brpc::rdma::DestroyBlockPool
    functionSourceFile: /src/brpc/src/brpc/rdma/block_pool.cpp
    functionUses: 0
    functionsReached:
    - free
    - brpc::rdma::RecycleAll
    - 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:642,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - buf
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 647
      start: 641
    functionDepth: 1
    functionLinenumber: 641
    functionLinenumberEnd: 647
    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: 660
      start: 650
    functionDepth: 0
    functionLinenumber: 650
    functionLinenumberEnd: 660
    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: 665
      start: 663
    functionDepth: 0
    functionLinenumber: 663
    functionLinenumberEnd: 665
    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: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:96,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:99,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:102,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:105,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:108,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 110
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyQp
    - IbvDestroyCq
    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:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 150
    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:153,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp: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: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    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:158,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:160,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:167,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:169,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:181,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:182,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 157
    functionDepth: 1
    functionLinenumber: 157
    functionLinenumberEnd: 184
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - reset
    - store
    - clear
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:190,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:195,1
    - Dst: auto*::_rdma_ep::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:197,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:199,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:206,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:210,1
    - Dst: brpc::rdma::RdmaConnect::Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:213,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 186
    functionDepth: 4
    functionLinenumber: 186
    functionLinenumberEnd: 215
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - auto*::_rdma_ep::_state::store
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::rdma::RdmaConnect::Run
    - Socket*::id
    - static_cast<RdmaTransport*>
    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: 217
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 217
    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:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: auto*::GetRdmaEp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:225,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:226,1
    - Dst: RdmaEndpoint*::_state::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:232,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:237,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:238,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:240,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:250,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:251,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:258,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:259,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:260,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:261,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 268
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::_state::load
    - RdmaEndpoint*::_socket::description
    - auto*::GetRdmaEp
    - PLOG
    - RdmaEndpoint*::_read_butex::fetch_add
    - berror
    - CHECK
    - bthread::butex_wake
    - RdmaEndpoint*::_socket::fd
    - LOG
    - brpc::InputMessenger::OnNewMessages
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - RdmaEndpoint*::_socket::SetFailed
    - RdmaEndpoint*::_socket::SetEOF
    - read
    - static_cast<RdmaTransport*>
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:292,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:293,1
    - Dst: read_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:294,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 3
    argNames:
    - read_butex
    - len
    - ' read_once'
    argTypes:
    - butil::atomic<int>*
    - size_t
    - ReadOnce
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 288
    functionDepth: 4
    functionLinenumber: 288
    functionLinenumberEnd: 313
    functionName: brpc::rdma::ReadFromFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read_once
    - butil::atomic<int>*::load
    - butil::milliseconds_from_now
    - bthread::butex_wait
    linkageType: ''
    returnType: int
    signature: "int ReadFromFdLoop(butil::atomic<int>* read_butex,\n                          size_t
      len, ReadOnce&& read_once)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:316,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:318,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 322
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:327,1
    - Dst: butil::IOPortal*::append_from_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - butil::IOPortal*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 331
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal*::append_from_file_descriptor
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(butil::IOPortal* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:351,1
    - Dst: write_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:352,1
    - Dst: wait_writable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - len
    - ' write_once'
    - ' wait_writable'
    argTypes:
    - size_t
    - WriteOnce
    - WaitWritable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 366
    functionName: brpc::rdma::WriteToFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - write_once
    - wait_writable
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int WriteToFdLoop(size_t len, WriteOnce&& write_once, WaitWritable&&
      wait_writable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:369,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:371,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:372,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:374,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 379
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - CHECK
    - Socket*::fd
    - write
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:382,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:384,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - data
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 392
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - butil::IOBuf*::cut_into_file_descriptor
    - CHECK
    - Socket*::fd
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(butil::IOBuf* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:396,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:397,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:399,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' remote'
    argTypes:
    - ParsedHello
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 401
    functionName: brpc::rdma::RdmaEndpoint::ApplyRemoteHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - std::min
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::ApplyRemoteHello(const ParsedHello& remote)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:422,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:424,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:427,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: CreateClientHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:430,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:431,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:432,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:435,1
    - Dst: auto::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:436,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:438,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:441,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:449,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:460,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:463,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: auto::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:477,1
    - Dst: auto::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:479,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:480,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:488,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: auto::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:492,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:498,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:503,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:509,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:510,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 55
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 516
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::AllocateResources
    - auto::_state::store
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - butil::HostToNet32
    - static_cast<RdmaEndpoint*>
    - LOG_IF
    - PLOG
    - CHECK
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - auto::BringUpQp
    - std::unique_ptr::SendLocalHello
    - auto::ApplyRemoteHello
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - SocketUniquePtr::_transport::get
    - berror
    - CreateClientHandshake
    - std::unique_ptr::ProtocolVersion
    - auto::WriteToFd
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:536,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:540,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:541,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: CreateServerHandshakeByMagic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:549,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:553,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:554,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:557,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:559,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:562,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: RdmaEndpoint*::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:570,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:576,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:591,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:595,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:607,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:608,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:610,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:611,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:612,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:613,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:620,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:626,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:632,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:636,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:641,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:643,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:644,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:645,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 74
    argCount: 2
    argNames:
    - source
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 646
    functionName: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::BringUpQp
    - CreateServerHandshakeByMagic
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - Socket*::parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - CHECK
    - Socket*::reset_parsing_context
    - RdmaEndpoint*::ApplyRemoteHello
    - static_cast<RdmaTransport*>
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - RdmaEndpoint*::_state::store
    - std::unique_ptr::SendLocalHello
    - Socket*::_transport::get
    - Socket*::description
    - RdmaEndpoint*::AllocateResources
    - std::unique_ptr::ProtocolVersion
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RdmaEndpoint::ExecuteServerHandshake(butil::IOBuf* source,
      Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:654,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:655,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 656
    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:671,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:674,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:675,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:677,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:684,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:685,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:688,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,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: 710
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 710
    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
    - _ref_at
    - CHECK
    - LOG
    - GetLKey
    - _ref_num
    - GetRegionId
    - cutn
    - BAIDU_UNLIKELY
    - fetch1
    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,\n                                      size_t
      max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:715,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:721,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:722,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:727,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:729,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:731,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:746,1
    - Dst: RdmaIOBuf*::empty
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:754,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:764,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:779,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:780,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:821,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:826,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:843,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:844,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 83
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 714
    functionDepth: 1
    functionLinenumber: 714
    functionLinenumberEnd: 848
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaIOBuf*::empty
    - load
    - ibv_post_send
    - berror
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - fetch_sub
    - CHECK
    - LOG
    - std::ostringstream::str
    - memset
    - exchange
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - BAIDU_UNLIKELY
    - butil::HostToNet32
    - 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:851,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 856
      start: 850
    functionDepth: 1
    functionLinenumber: 850
    functionLinenumberEnd: 856
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    - exchange
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:864,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:866,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:871,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 858
    functionDepth: 1
    functionLinenumber: 858
    functionLinenumberEnd: 886
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - ibv_post_send
    - berror
    - LOG
    - memset
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - std::ostringstream::str
    - butil::HostToNet32
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:895,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:906,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:913,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:925,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:928,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:933,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:936,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:937,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:941,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:945,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:949,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:956,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 51
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 888
    functionDepth: 2
    functionLinenumber: 888
    functionLinenumberEnd: 961
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - load
    - clear
    - fetch_add
    - _read_buf::append
    - CHECK
    - cutn
    - WakeAsEpollOut
    - brpc::rdma::RdmaEndpoint::SendAck
    - brpc::rdma::RdmaEndpoint::PostRecv
    - butil::subtle::MemoryBarrier
    - CHECK_NE
    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:965,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:969,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 963
    functionDepth: 1
    functionLinenumber: 963
    functionLinenumberEnd: 980
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - berror
    - ibv_post_recv
    - LOG
    - memset
    - 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:986,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:990,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:998,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:999,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1009
      start: 982
    functionDepth: 2
    functionLinenumber: 982
    functionLinenumberEnd: 1009
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - static_cast<uint32_t>
    - PLOG
    - clear
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK_EQ
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1013,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1018,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 4
    argNames:
    - send_cq
    - recv_cq
    - sq_size
    - rq_size
    argTypes:
    - ibv_cq*
    - ibv_cq*
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1022
      start: 1011
    functionDepth: 1
    functionLinenumber: 1011
    functionLinenumberEnd: 1022
    functionName: brpc::rdma::AllocateQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - brpc::rdma::GetRdmaPd
    - brpc::rdma::GetRdmaMaxSge
    - memset
    - IbvCreateQp
    linkageType: ''
    returnType: ibv_qp
    signature: ibv_qp * AllocateQp(ibv_cq* send_cq, ibv_cq* recv_cq, uint32_t sq_size,
      uint32_t rq_size)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1025,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1029,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1034,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1038,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1043,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1045,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1052,1
    - Dst: brpc::rdma::AllocateQp
      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: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: brpc::rdma::AllocateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1068,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1072,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1077,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1024
    functionDepth: 2
    functionLinenumber: 1024
    functionLinenumberEnd: 1078
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - brpc::rdma::AllocateQp
    - IbvCreateCq
    - std::unique_ptr::release
    - butil::make_close_on_exec
    - IbvCreateCompChannel
    - butil::make_non_blocking
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DoAllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1086,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1087,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1089,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1080
    functionDepth: 1
    functionLinenumber: 1080
    functionLinenumberEnd: 1092
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::rdma::RdmaEndpoint::DoAllocateResources
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1095,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1097,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1104,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1115,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1124,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1127,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1136,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1137,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1144,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1145,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1151,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1155,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1156,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1159,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1160,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1165
      start: 1094
    functionDepth: 6
    functionLinenumber: 1094
    functionLinenumberEnd: 1165
    functionName: brpc::rdma::RdmaEndpoint::DoAllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - Socket::Create
    - PLOG
    - AllocateQpCq
    - CHECK
    - BAIDU_UNLIKELY
    - brpc::rdma::RdmaEndpoint::ReqNotifyCq
    - size
    - resize
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoAllocateResources()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1199,1
    - Dst: IbvSetEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1205,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1209,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1210,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1218,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1226,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1250,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1265,1
    - Dst: IbvQueryEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1271,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1272,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 63
    argCount: 2
    argNames:
    - ' remote'
    - is_server
    argTypes:
    - ParsedHello
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1277
      start: 1167
    functionDepth: 3
    functionLinenumber: 1167
    functionLinenumberEnd: 1277
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ece::has_value
    - PLOG
    - berror
    - IbvQueryEce
    - GetRdmaGidIndex
    - LOG
    - GetRdmaPortNum
    - IbvModifyQp
    - brpc::rdma::RdmaEndpoint::PostRecv
    - IbvSetEce
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(const ParsedHello& remote, bool is_server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1284,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1279
    functionDepth: 1
    functionLinenumber: 1279
    functionLinenumberEnd: 1286
    functionName: brpc::rdma::DeallocateCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - berror
    - IbvDestroyCq
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void DeallocateCq(ibv_cq* cq)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1301
      start: 1288
    functionDepth: 1
    functionLinenumber: 1288
    functionLinenumberEnd: 1301
    functionName: brpc::rdma::DrainCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_poll_cq
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: int DrainCq(ibv_cq* cq)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1308,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1316,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1322,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1325,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1337,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1338,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1339,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: _io_event::bthread_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1347,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1362,1
    - Dst: SocketUniquePtr::_io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1364,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1368,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1383,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1384,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1385,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1392,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1303
    functionDepth: 3
    functionLinenumber: 1303
    functionLinenumberEnd: 1405
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - IbvDestroyCompChannel
    - SocketUniquePtr::_io_event::RemoveConsumer
    - DrainCq
    - berror
    - DeallocateCq
    - BAIDU_SCOPED_LOCK
    - brpc::SetTrackMeAddress
    - _io_event::bthread_tag
    - SocketUniquePtr::SetFailed
    - IbvModifyQp
    - IbvAckCqEvents
    - GetGlobalEventDispatcher
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyQp
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1417,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1430,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1431,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1434,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1438,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1446
      start: 1409
    functionDepth: 1
    functionLinenumber: 1409
    functionLinenumberEnd: 1446
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - PLOG
    - berror
    - LOG
    - description
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents(SocketUniquePtr& s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1449,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1454,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1455,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1457,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1459,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - send_cq
    - fatal_on_error
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1448
    functionDepth: 1
    functionLinenumber: 1448
    functionLinenumberEnd: 1467
    functionName: brpc::rdma::RdmaEndpoint::ReqNotifyCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - ibv_req_notify_cq
    - SetFailed
    - PLOG
    - berror
    - description
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReqNotifyCq(bool send_cq, bool fatal_on_error)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1480,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1486,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1500,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1529,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1532,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1553,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1579,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1583,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1596,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1597,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1599,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1600,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 78
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1604
      start: 1469
    functionDepth: 3
    functionLinenumber: 1469
    functionLinenumberEnd: 1604
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::ReqNotifyCq
    - butil::gettimeofday_us
    - InputMessenger*::ProcessNewMessage
    - static_cast<InputMessenger*>
    - static_cast<RdmaEndpoint*>
    - PLOG
    - ibv_poll_cq
    - CHECK
    - Socket*::MoreReadEvents
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - RdmaEndpoint*::_socket::id
    - butil::cpuwide_time_us
    - SocketUniquePtr::description
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::_transport::get
    - SocketUniquePtr::Failed
    - berror
    - RdmaEndpoint*::HandleCompletion
    - SocketUniquePtr::user
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1606
    functionDepth: 0
    functionLinenumber: 1606
    functionLinenumberEnd: 1624
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - load
    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:1628,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1629,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1631,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1632,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - connector
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - load
    - static_cast<int>
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os, butil::StringPiece connector)
      const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetRdmaBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1647,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1653,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1665,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1669
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1669
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - GetRdmaBlockSize
    - butil::Mutex::Mutex
    - AllocateQpCq
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1673,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1684,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1687
      start: 1671
    functionDepth: 1
    functionLinenumber: 1671
    functionLinenumberEnd: 1687
    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:1702,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1717,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1720,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1721,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1723,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1725,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1730,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1736,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1739,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1744,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1750,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1754,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1758,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1760,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 48
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1691
    functionDepth: 4
    functionLinenumber: 1691
    functionLinenumberEnd: 1765
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_set::emplace
    - compare_exchange_strong
    - brpc::rdma::RdmaEndpoint::PollCq
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - auto::release_fn
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1774,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1776,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1778
      start: 1767
    functionDepth: 2
    functionLinenumber: 1767
    functionLinenumberEnd: 1778
    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:1781,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1782,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1786,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1788
      start: 1780
    functionDepth: 2
    functionLinenumber: 1780
    functionLinenumberEnd: 1788
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1791,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1792,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1796,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1798
      start: 1790
    functionDepth: 2
    functionLinenumber: 1790
    functionLinenumberEnd: 1798
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:96,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:99,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:102,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:105,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:108,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 110
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyQp
    - IbvDestroyCq
    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:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 150
    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:153,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp: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: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    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:158,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:160,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:167,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:169,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:181,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:182,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 157
    functionDepth: 4
    functionLinenumber: 157
    functionLinenumberEnd: 184
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - reset
    - store
    - clear
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:190,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:195,1
    - Dst: auto*::_rdma_ep::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:197,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:199,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:206,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:210,1
    - Dst: brpc::rdma::RdmaConnect::Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:213,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 186
    functionDepth: 4
    functionLinenumber: 186
    functionLinenumberEnd: 215
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - auto*::_rdma_ep::_state::store
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::rdma::RdmaConnect::Run
    - Socket*::id
    - static_cast<RdmaTransport*>
    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: 217
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 217
    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:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: auto*::GetRdmaEp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:225,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:226,1
    - Dst: RdmaEndpoint*::_state::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:232,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:237,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:238,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:240,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:250,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:251,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:258,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:259,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:260,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:261,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 268
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::_state::load
    - RdmaEndpoint*::_socket::description
    - auto*::GetRdmaEp
    - PLOG
    - RdmaEndpoint*::_read_butex::fetch_add
    - berror
    - CHECK
    - bthread::butex_wake
    - RdmaEndpoint*::_socket::fd
    - LOG
    - brpc::InputMessenger::OnNewMessages
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - RdmaEndpoint*::_socket::SetFailed
    - RdmaEndpoint*::_socket::SetEOF
    - read
    - static_cast<RdmaTransport*>
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:292,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:293,1
    - Dst: read_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:294,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 3
    argNames:
    - read_butex
    - len
    - ' read_once'
    argTypes:
    - butil::atomic<int>*
    - size_t
    - ReadOnce
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 288
    functionDepth: 4
    functionLinenumber: 288
    functionLinenumberEnd: 313
    functionName: brpc::rdma::ReadFromFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read_once
    - butil::atomic<int>*::load
    - butil::milliseconds_from_now
    - bthread::butex_wait
    linkageType: ''
    returnType: int
    signature: "int ReadFromFdLoop(butil::atomic<int>* read_butex,\n                          size_t
      len, ReadOnce&& read_once)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:316,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:318,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 322
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:327,1
    - Dst: butil::IOPortal*::append_from_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - butil::IOPortal*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 331
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal*::append_from_file_descriptor
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(butil::IOPortal* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:351,1
    - Dst: write_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:352,1
    - Dst: wait_writable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - len
    - ' write_once'
    - ' wait_writable'
    argTypes:
    - size_t
    - WriteOnce
    - WaitWritable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 366
    functionName: brpc::rdma::WriteToFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - write_once
    - wait_writable
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int WriteToFdLoop(size_t len, WriteOnce&& write_once, WaitWritable&&
      wait_writable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:369,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:371,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:372,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:374,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 379
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - CHECK
    - Socket*::fd
    - write
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:382,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:384,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - data
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 392
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - butil::IOBuf*::cut_into_file_descriptor
    - CHECK
    - Socket*::fd
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(butil::IOBuf* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:396,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:397,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:399,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' remote'
    argTypes:
    - ParsedHello
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 401
    functionName: brpc::rdma::RdmaEndpoint::ApplyRemoteHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - std::min
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::ApplyRemoteHello(const ParsedHello& remote)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:422,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:424,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:427,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: CreateClientHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:430,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:431,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:432,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:435,1
    - Dst: auto::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:436,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:438,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:441,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:449,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:460,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:463,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: auto::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:477,1
    - Dst: auto::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:479,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:480,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:488,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: auto::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:492,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:498,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:503,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:509,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:510,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 55
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 516
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::AllocateResources
    - auto::_state::store
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - butil::HostToNet32
    - static_cast<RdmaEndpoint*>
    - LOG_IF
    - PLOG
    - CHECK
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - auto::BringUpQp
    - std::unique_ptr::SendLocalHello
    - auto::ApplyRemoteHello
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - SocketUniquePtr::_transport::get
    - berror
    - CreateClientHandshake
    - std::unique_ptr::ProtocolVersion
    - auto::WriteToFd
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:536,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:540,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:541,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: CreateServerHandshakeByMagic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:549,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:553,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:554,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:557,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:559,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:562,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: RdmaEndpoint*::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:570,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:576,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:591,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:595,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:607,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:608,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:610,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:611,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:612,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:613,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:620,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:626,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:632,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:636,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:641,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:643,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:644,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:645,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 74
    argCount: 2
    argNames:
    - source
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 646
    functionName: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::BringUpQp
    - CreateServerHandshakeByMagic
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - Socket*::parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - CHECK
    - Socket*::reset_parsing_context
    - RdmaEndpoint*::ApplyRemoteHello
    - static_cast<RdmaTransport*>
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - RdmaEndpoint*::_state::store
    - std::unique_ptr::SendLocalHello
    - Socket*::_transport::get
    - Socket*::description
    - RdmaEndpoint*::AllocateResources
    - std::unique_ptr::ProtocolVersion
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RdmaEndpoint::ExecuteServerHandshake(butil::IOBuf* source,
      Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:654,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:655,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 656
    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:671,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:674,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:675,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:677,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:684,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:685,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:688,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,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: 710
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 710
    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
    - _ref_at
    - CHECK
    - LOG
    - GetLKey
    - _ref_num
    - GetRegionId
    - cutn
    - BAIDU_UNLIKELY
    - fetch1
    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,\n                                      size_t
      max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:715,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:721,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:722,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:727,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:729,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:731,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:746,1
    - Dst: RdmaIOBuf*::empty
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:754,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:764,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:779,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:780,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:821,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:826,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:843,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:844,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 83
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 714
    functionDepth: 2
    functionLinenumber: 714
    functionLinenumberEnd: 848
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaIOBuf*::empty
    - load
    - ibv_post_send
    - berror
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - fetch_sub
    - CHECK
    - LOG
    - std::ostringstream::str
    - memset
    - exchange
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - BAIDU_UNLIKELY
    - butil::HostToNet32
    - 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:851,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 856
      start: 850
    functionDepth: 2
    functionLinenumber: 850
    functionLinenumberEnd: 856
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    - exchange
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:864,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:866,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:871,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 858
    functionDepth: 2
    functionLinenumber: 858
    functionLinenumberEnd: 886
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - ibv_post_send
    - berror
    - LOG
    - memset
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - std::ostringstream::str
    - butil::HostToNet32
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:895,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:906,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:913,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:925,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:928,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:933,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:936,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:937,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:941,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:945,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:949,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:956,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 51
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 888
    functionDepth: 3
    functionLinenumber: 888
    functionLinenumberEnd: 961
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - load
    - clear
    - fetch_add
    - _read_buf::append
    - CHECK
    - cutn
    - WakeAsEpollOut
    - brpc::rdma::RdmaEndpoint::SendAck
    - brpc::rdma::RdmaEndpoint::PostRecv
    - butil::subtle::MemoryBarrier
    - CHECK_NE
    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:965,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:969,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 963
    functionDepth: 1
    functionLinenumber: 963
    functionLinenumberEnd: 980
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - berror
    - ibv_post_recv
    - LOG
    - memset
    - 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:986,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:990,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:998,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:999,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1009
      start: 982
    functionDepth: 2
    functionLinenumber: 982
    functionLinenumberEnd: 1009
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - static_cast<uint32_t>
    - PLOG
    - clear
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK_EQ
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1013,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1018,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 4
    argNames:
    - send_cq
    - recv_cq
    - sq_size
    - rq_size
    argTypes:
    - ibv_cq*
    - ibv_cq*
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1022
      start: 1011
    functionDepth: 1
    functionLinenumber: 1011
    functionLinenumberEnd: 1022
    functionName: brpc::rdma::AllocateQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - brpc::rdma::GetRdmaPd
    - brpc::rdma::GetRdmaMaxSge
    - memset
    - IbvCreateQp
    linkageType: ''
    returnType: ibv_qp
    signature: ibv_qp * AllocateQp(ibv_cq* send_cq, ibv_cq* recv_cq, uint32_t sq_size,
      uint32_t rq_size)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1025,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1029,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1034,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1038,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1043,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1045,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1052,1
    - Dst: brpc::rdma::AllocateQp
      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: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: brpc::rdma::AllocateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1068,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1072,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1077,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1024
    functionDepth: 2
    functionLinenumber: 1024
    functionLinenumberEnd: 1078
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - brpc::rdma::AllocateQp
    - IbvCreateCq
    - std::unique_ptr::release
    - butil::make_close_on_exec
    - IbvCreateCompChannel
    - butil::make_non_blocking
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DoAllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1086,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1087,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1089,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1080
    functionDepth: 7
    functionLinenumber: 1080
    functionLinenumberEnd: 1092
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::rdma::RdmaEndpoint::DoAllocateResources
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1095,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1097,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1104,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1115,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1124,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1127,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1136,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1137,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1144,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1145,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1151,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1155,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1156,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1159,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1160,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1165
      start: 1094
    functionDepth: 6
    functionLinenumber: 1094
    functionLinenumberEnd: 1165
    functionName: brpc::rdma::RdmaEndpoint::DoAllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - Socket::Create
    - PLOG
    - AllocateQpCq
    - CHECK
    - BAIDU_UNLIKELY
    - brpc::rdma::RdmaEndpoint::ReqNotifyCq
    - size
    - resize
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoAllocateResources()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1199,1
    - Dst: IbvSetEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1205,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1209,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1210,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1218,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1226,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1250,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1265,1
    - Dst: IbvQueryEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1271,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1272,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 63
    argCount: 2
    argNames:
    - ' remote'
    - is_server
    argTypes:
    - ParsedHello
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1277
      start: 1167
    functionDepth: 3
    functionLinenumber: 1167
    functionLinenumberEnd: 1277
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ece::has_value
    - PLOG
    - berror
    - IbvQueryEce
    - GetRdmaGidIndex
    - LOG
    - GetRdmaPortNum
    - IbvModifyQp
    - brpc::rdma::RdmaEndpoint::PostRecv
    - IbvSetEce
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(const ParsedHello& remote, bool is_server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1284,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1279
    functionDepth: 1
    functionLinenumber: 1279
    functionLinenumberEnd: 1286
    functionName: brpc::rdma::DeallocateCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - berror
    - IbvDestroyCq
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void DeallocateCq(ibv_cq* cq)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1301
      start: 1288
    functionDepth: 1
    functionLinenumber: 1288
    functionLinenumberEnd: 1301
    functionName: brpc::rdma::DrainCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_poll_cq
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: int DrainCq(ibv_cq* cq)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1308,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1316,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1322,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1325,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1337,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1338,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1339,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: _io_event::bthread_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1347,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1362,1
    - Dst: SocketUniquePtr::_io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1364,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1368,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1383,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1384,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1385,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1392,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1303
    functionDepth: 3
    functionLinenumber: 1303
    functionLinenumberEnd: 1405
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - IbvDestroyCompChannel
    - SocketUniquePtr::_io_event::RemoveConsumer
    - DrainCq
    - berror
    - DeallocateCq
    - BAIDU_SCOPED_LOCK
    - brpc::SetTrackMeAddress
    - _io_event::bthread_tag
    - SocketUniquePtr::SetFailed
    - IbvModifyQp
    - IbvAckCqEvents
    - GetGlobalEventDispatcher
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyQp
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1417,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1430,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1431,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1434,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1438,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1446
      start: 1409
    functionDepth: 1
    functionLinenumber: 1409
    functionLinenumberEnd: 1446
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - PLOG
    - berror
    - LOG
    - description
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents(SocketUniquePtr& s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1449,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1454,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1455,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1457,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1459,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - send_cq
    - fatal_on_error
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1448
    functionDepth: 1
    functionLinenumber: 1448
    functionLinenumberEnd: 1467
    functionName: brpc::rdma::RdmaEndpoint::ReqNotifyCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - ibv_req_notify_cq
    - SetFailed
    - PLOG
    - berror
    - description
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReqNotifyCq(bool send_cq, bool fatal_on_error)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1480,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1486,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1500,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1529,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1532,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1553,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1579,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1583,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1596,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1597,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1599,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1600,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 78
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1604
      start: 1469
    functionDepth: 3
    functionLinenumber: 1469
    functionLinenumberEnd: 1604
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - RdmaEndpoint*::ReqNotifyCq
    - butil::gettimeofday_us
    - InputMessenger*::ProcessNewMessage
    - static_cast<InputMessenger*>
    - static_cast<RdmaEndpoint*>
    - PLOG
    - ibv_poll_cq
    - CHECK
    - Socket*::MoreReadEvents
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - RdmaEndpoint*::_socket::id
    - butil::cpuwide_time_us
    - SocketUniquePtr::description
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::_transport::get
    - SocketUniquePtr::Failed
    - berror
    - RdmaEndpoint*::HandleCompletion
    - SocketUniquePtr::user
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1606
    functionDepth: 0
    functionLinenumber: 1606
    functionLinenumberEnd: 1624
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 1
    functionsReached:
    - load
    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:1628,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1629,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1631,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1632,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - connector
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - load
    - static_cast<int>
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os, butil::StringPiece connector)
      const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetRdmaBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1647,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1653,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1665,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1669
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1669
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - GetRdmaBlockSize
    - butil::Mutex::Mutex
    - AllocateQpCq
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1673,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1684,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1687
      start: 1671
    functionDepth: 3
    functionLinenumber: 1671
    functionLinenumberEnd: 1687
    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:1702,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1717,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1720,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1721,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1723,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1725,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1730,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1736,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1739,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1744,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1750,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1754,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1758,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1760,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 48
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1691
    functionDepth: 4
    functionLinenumber: 1691
    functionLinenumberEnd: 1765
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_set::emplace
    - compare_exchange_strong
    - brpc::rdma::RdmaEndpoint::PollCq
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - auto::release_fn
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1774,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1776,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1778
      start: 1767
    functionDepth: 2
    functionLinenumber: 1767
    functionLinenumberEnd: 1778
    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:1781,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1782,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1786,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1788
      start: 1780
    functionDepth: 2
    functionLinenumber: 1780
    functionLinenumberEnd: 1788
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1791,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1792,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1796,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1798
      start: 1790
    functionDepth: 2
    functionLinenumber: 1790
    functionLinenumberEnd: 1798
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:96,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:99,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:102,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:105,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:108,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 110
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyQp
    - IbvDestroyCq
    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:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 150
    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:153,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp: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: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    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:158,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:160,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:167,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:169,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:181,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:182,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 157
    functionDepth: 4
    functionLinenumber: 157
    functionLinenumberEnd: 184
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - reset
    - store
    - clear
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:190,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:195,1
    - Dst: auto*::_rdma_ep::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:197,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:199,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:206,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:210,1
    - Dst: brpc::rdma::RdmaConnect::Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:213,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 186
    functionDepth: 4
    functionLinenumber: 186
    functionLinenumberEnd: 215
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - auto*::_rdma_ep::_state::store
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::rdma::RdmaConnect::Run
    - Socket*::id
    - static_cast<RdmaTransport*>
    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: 217
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 217
    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:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: auto*::GetRdmaEp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:225,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:226,1
    - Dst: RdmaEndpoint*::_state::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:232,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:237,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:238,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:240,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:250,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:251,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:258,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:259,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:260,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:261,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 268
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::_state::load
    - RdmaEndpoint*::_socket::description
    - auto*::GetRdmaEp
    - PLOG
    - RdmaEndpoint*::_read_butex::fetch_add
    - berror
    - CHECK
    - bthread::butex_wake
    - RdmaEndpoint*::_socket::fd
    - LOG
    - brpc::InputMessenger::OnNewMessages
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - RdmaEndpoint*::_socket::SetFailed
    - RdmaEndpoint*::_socket::SetEOF
    - read
    - static_cast<RdmaTransport*>
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:292,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:293,1
    - Dst: read_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:294,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 3
    argNames:
    - read_butex
    - len
    - ' read_once'
    argTypes:
    - butil::atomic<int>*
    - size_t
    - ReadOnce
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 288
    functionDepth: 4
    functionLinenumber: 288
    functionLinenumberEnd: 313
    functionName: brpc::rdma::ReadFromFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read_once
    - butil::atomic<int>*::load
    - butil::milliseconds_from_now
    - bthread::butex_wait
    linkageType: ''
    returnType: int
    signature: "int ReadFromFdLoop(butil::atomic<int>* read_butex,\n                          size_t
      len, ReadOnce&& read_once)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:316,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:318,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 322
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:327,1
    - Dst: butil::IOPortal*::append_from_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - butil::IOPortal*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 331
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal*::append_from_file_descriptor
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(butil::IOPortal* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:351,1
    - Dst: write_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:352,1
    - Dst: wait_writable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - len
    - ' write_once'
    - ' wait_writable'
    argTypes:
    - size_t
    - WriteOnce
    - WaitWritable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 366
    functionName: brpc::rdma::WriteToFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - write_once
    - wait_writable
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int WriteToFdLoop(size_t len, WriteOnce&& write_once, WaitWritable&&
      wait_writable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:369,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:371,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:372,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:374,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 379
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - CHECK
    - Socket*::fd
    - write
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:382,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:384,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - data
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 392
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - butil::IOBuf*::cut_into_file_descriptor
    - CHECK
    - Socket*::fd
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(butil::IOBuf* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:396,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:397,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:399,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' remote'
    argTypes:
    - ParsedHello
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 401
    functionName: brpc::rdma::RdmaEndpoint::ApplyRemoteHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - std::min
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::ApplyRemoteHello(const ParsedHello& remote)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:422,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:424,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:427,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: CreateClientHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:430,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:431,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:432,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:435,1
    - Dst: auto::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:436,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:438,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:441,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:449,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:460,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:463,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: auto::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:477,1
    - Dst: auto::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:479,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:480,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:488,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: auto::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:492,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:498,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:503,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:509,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:510,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 55
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 516
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::AllocateResources
    - auto::_state::store
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - butil::HostToNet32
    - static_cast<RdmaEndpoint*>
    - LOG_IF
    - PLOG
    - CHECK
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - auto::BringUpQp
    - std::unique_ptr::SendLocalHello
    - auto::ApplyRemoteHello
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - SocketUniquePtr::_transport::get
    - berror
    - CreateClientHandshake
    - std::unique_ptr::ProtocolVersion
    - auto::WriteToFd
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:536,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:540,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:541,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: CreateServerHandshakeByMagic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:549,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:553,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:554,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:557,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:559,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:562,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: RdmaEndpoint*::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:570,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:576,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:591,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:595,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:607,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:608,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:610,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:611,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:612,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:613,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:620,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:626,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:632,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:636,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:641,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:643,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:644,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:645,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 74
    argCount: 2
    argNames:
    - source
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 646
    functionName: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::BringUpQp
    - CreateServerHandshakeByMagic
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - Socket*::parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - CHECK
    - Socket*::reset_parsing_context
    - RdmaEndpoint*::ApplyRemoteHello
    - static_cast<RdmaTransport*>
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - RdmaEndpoint*::_state::store
    - std::unique_ptr::SendLocalHello
    - Socket*::_transport::get
    - Socket*::description
    - RdmaEndpoint*::AllocateResources
    - std::unique_ptr::ProtocolVersion
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RdmaEndpoint::ExecuteServerHandshake(butil::IOBuf* source,
      Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:654,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:655,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 656
    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:671,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:674,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:675,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:677,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:684,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:685,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:688,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,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: 710
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 710
    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
    - _ref_at
    - CHECK
    - LOG
    - GetLKey
    - _ref_num
    - GetRegionId
    - cutn
    - BAIDU_UNLIKELY
    - fetch1
    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,\n                                      size_t
      max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:715,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:721,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:722,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:727,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:729,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:731,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:746,1
    - Dst: RdmaIOBuf*::empty
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:754,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:764,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:779,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:780,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:821,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:826,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:843,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:844,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 83
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 714
    functionDepth: 2
    functionLinenumber: 714
    functionLinenumberEnd: 848
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaIOBuf*::empty
    - load
    - ibv_post_send
    - berror
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - fetch_sub
    - CHECK
    - LOG
    - std::ostringstream::str
    - memset
    - exchange
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - BAIDU_UNLIKELY
    - butil::HostToNet32
    - 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:851,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 856
      start: 850
    functionDepth: 2
    functionLinenumber: 850
    functionLinenumberEnd: 856
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    - exchange
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:864,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:866,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:871,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 858
    functionDepth: 2
    functionLinenumber: 858
    functionLinenumberEnd: 886
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - ibv_post_send
    - berror
    - LOG
    - memset
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - std::ostringstream::str
    - butil::HostToNet32
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:895,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:906,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:913,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:925,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:928,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:933,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:936,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:937,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:941,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:945,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:949,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:956,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 51
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 888
    functionDepth: 3
    functionLinenumber: 888
    functionLinenumberEnd: 961
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - load
    - clear
    - fetch_add
    - _read_buf::append
    - CHECK
    - cutn
    - WakeAsEpollOut
    - brpc::rdma::RdmaEndpoint::SendAck
    - brpc::rdma::RdmaEndpoint::PostRecv
    - butil::subtle::MemoryBarrier
    - CHECK_NE
    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:965,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:969,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 963
    functionDepth: 1
    functionLinenumber: 963
    functionLinenumberEnd: 980
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - berror
    - ibv_post_recv
    - LOG
    - memset
    - 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:986,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:990,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:998,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:999,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1009
      start: 982
    functionDepth: 2
    functionLinenumber: 982
    functionLinenumberEnd: 1009
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 5
    functionsReached:
    - static_cast<uint32_t>
    - PLOG
    - clear
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK_EQ
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1013,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1018,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 4
    argNames:
    - send_cq
    - recv_cq
    - sq_size
    - rq_size
    argTypes:
    - ibv_cq*
    - ibv_cq*
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1022
      start: 1011
    functionDepth: 1
    functionLinenumber: 1011
    functionLinenumberEnd: 1022
    functionName: brpc::rdma::AllocateQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - brpc::rdma::GetRdmaPd
    - brpc::rdma::GetRdmaMaxSge
    - memset
    - IbvCreateQp
    linkageType: ''
    returnType: ibv_qp
    signature: ibv_qp * AllocateQp(ibv_cq* send_cq, ibv_cq* recv_cq, uint32_t sq_size,
      uint32_t rq_size)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1025,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1029,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1034,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1038,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1043,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1045,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1052,1
    - Dst: brpc::rdma::AllocateQp
      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: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: brpc::rdma::AllocateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1068,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1072,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1077,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1024
    functionDepth: 2
    functionLinenumber: 1024
    functionLinenumberEnd: 1078
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - brpc::rdma::AllocateQp
    - IbvCreateCq
    - std::unique_ptr::release
    - butil::make_close_on_exec
    - IbvCreateCompChannel
    - butil::make_non_blocking
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DoAllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1086,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1087,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1089,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1080
    functionDepth: 7
    functionLinenumber: 1080
    functionLinenumberEnd: 1092
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::rdma::RdmaEndpoint::DoAllocateResources
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1095,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1097,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1104,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1115,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1124,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1127,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1136,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1137,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1144,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1145,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1151,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1155,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1156,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1159,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1160,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1165
      start: 1094
    functionDepth: 6
    functionLinenumber: 1094
    functionLinenumberEnd: 1165
    functionName: brpc::rdma::RdmaEndpoint::DoAllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - Socket::Create
    - PLOG
    - AllocateQpCq
    - CHECK
    - BAIDU_UNLIKELY
    - brpc::rdma::RdmaEndpoint::ReqNotifyCq
    - size
    - resize
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoAllocateResources()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1199,1
    - Dst: IbvSetEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1205,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1209,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1210,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1218,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1226,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1250,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1265,1
    - Dst: IbvQueryEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1271,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1272,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 63
    argCount: 2
    argNames:
    - ' remote'
    - is_server
    argTypes:
    - ParsedHello
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1277
      start: 1167
    functionDepth: 3
    functionLinenumber: 1167
    functionLinenumberEnd: 1277
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ece::has_value
    - PLOG
    - berror
    - IbvQueryEce
    - GetRdmaGidIndex
    - LOG
    - GetRdmaPortNum
    - IbvModifyQp
    - brpc::rdma::RdmaEndpoint::PostRecv
    - IbvSetEce
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(const ParsedHello& remote, bool is_server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1284,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1279
    functionDepth: 1
    functionLinenumber: 1279
    functionLinenumberEnd: 1286
    functionName: brpc::rdma::DeallocateCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - berror
    - IbvDestroyCq
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void DeallocateCq(ibv_cq* cq)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1301
      start: 1288
    functionDepth: 1
    functionLinenumber: 1288
    functionLinenumberEnd: 1301
    functionName: brpc::rdma::DrainCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_poll_cq
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: int DrainCq(ibv_cq* cq)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1308,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1316,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1322,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1325,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1337,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1338,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1339,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: _io_event::bthread_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1347,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1362,1
    - Dst: SocketUniquePtr::_io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1364,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1368,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1383,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1384,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1385,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1392,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1303
    functionDepth: 3
    functionLinenumber: 1303
    functionLinenumberEnd: 1405
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 6
    functionsReached:
    - IbvDestroyCompChannel
    - SocketUniquePtr::_io_event::RemoveConsumer
    - DrainCq
    - berror
    - DeallocateCq
    - BAIDU_SCOPED_LOCK
    - brpc::SetTrackMeAddress
    - _io_event::bthread_tag
    - SocketUniquePtr::SetFailed
    - IbvModifyQp
    - IbvAckCqEvents
    - GetGlobalEventDispatcher
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyQp
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1417,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1430,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1431,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1434,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1438,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1446
      start: 1409
    functionDepth: 1
    functionLinenumber: 1409
    functionLinenumberEnd: 1446
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - PLOG
    - berror
    - LOG
    - description
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents(SocketUniquePtr& s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1449,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1454,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1455,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1457,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1459,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - send_cq
    - fatal_on_error
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1448
    functionDepth: 1
    functionLinenumber: 1448
    functionLinenumberEnd: 1467
    functionName: brpc::rdma::RdmaEndpoint::ReqNotifyCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - ibv_req_notify_cq
    - SetFailed
    - PLOG
    - berror
    - description
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReqNotifyCq(bool send_cq, bool fatal_on_error)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1480,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1486,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1500,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1529,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1532,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1553,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1579,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1583,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1596,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1597,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1599,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1600,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 78
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1604
      start: 1469
    functionDepth: 3
    functionLinenumber: 1469
    functionLinenumberEnd: 1604
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - RdmaEndpoint*::ReqNotifyCq
    - butil::gettimeofday_us
    - InputMessenger*::ProcessNewMessage
    - static_cast<InputMessenger*>
    - static_cast<RdmaEndpoint*>
    - PLOG
    - ibv_poll_cq
    - CHECK
    - Socket*::MoreReadEvents
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - RdmaEndpoint*::_socket::id
    - butil::cpuwide_time_us
    - SocketUniquePtr::description
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::_transport::get
    - SocketUniquePtr::Failed
    - berror
    - RdmaEndpoint*::HandleCompletion
    - SocketUniquePtr::user
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1606
    functionDepth: 0
    functionLinenumber: 1606
    functionLinenumberEnd: 1624
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 2
    functionsReached:
    - load
    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:1628,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1629,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1631,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1632,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - connector
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 6
    functionsReached:
    - load
    - static_cast<int>
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os, butil::StringPiece connector)
      const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetRdmaBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1647,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1653,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1665,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1669
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1669
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - GetRdmaBlockSize
    - butil::Mutex::Mutex
    - AllocateQpCq
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1673,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1684,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1687
      start: 1671
    functionDepth: 3
    functionLinenumber: 1671
    functionLinenumberEnd: 1687
    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:1702,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1717,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1720,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1721,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1723,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1725,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1730,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1736,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1739,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1744,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1750,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1754,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1758,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1760,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 48
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1691
    functionDepth: 4
    functionLinenumber: 1691
    functionLinenumberEnd: 1765
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_set::emplace
    - compare_exchange_strong
    - brpc::rdma::RdmaEndpoint::PollCq
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - auto::release_fn
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1774,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1776,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1778
      start: 1767
    functionDepth: 2
    functionLinenumber: 1767
    functionLinenumberEnd: 1778
    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:1781,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1782,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1786,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1788
      start: 1780
    functionDepth: 2
    functionLinenumber: 1780
    functionLinenumberEnd: 1788
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1791,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1792,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1796,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1798
      start: 1790
    functionDepth: 2
    functionLinenumber: 1790
    functionLinenumberEnd: 1798
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:96,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:99,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:102,1
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:105,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:108,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 16
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 94
    functionDepth: 0
    functionLinenumber: 94
    functionLinenumberEnd: 110
    functionName: RdmaResource::~RdmaResource()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IbvDestroyCompChannel
    - IbvDestroyQp
    - IbvDestroyCq
    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:149,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - s
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 150
      start: 112
    functionDepth: 0
    functionLinenumber: 112
    functionLinenumberEnd: 150
    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:153,1
    - Dst: bthread::butex_destroy
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp: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: RdmaEndpoint::~RdmaEndpoint()
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - Reset
    - bthread::butex_destroy
    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:158,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:160,1
    - Dst: reset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:162,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:167,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:168,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:169,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:181,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:182,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:183,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 26
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 184
      start: 157
    functionDepth: 4
    functionLinenumber: 157
    functionLinenumberEnd: 184
    functionName: brpc::rdma::RdmaEndpoint::Reset
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - reset
    - store
    - clear
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::Reset()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:189,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:190,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: Socket*::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:192,1
    - Dst: IsRdmaAvailable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:195,1
    - Dst: auto*::_rdma_ep::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:197,1
    - Dst: done
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:199,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:206,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:207,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:210,1
    - Dst: brpc::rdma::RdmaConnect::Run
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:211,1
    - Dst: SocketUniquePtr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:213,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 20
    argCount: 2
    argNames:
    - socket
    - data
    argTypes:
    - Socket*
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 215
      start: 186
    functionDepth: 4
    functionLinenumber: 186
    functionLinenumberEnd: 215
    functionName: brpc::rdma::RdmaConnect::StartConnect
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - IsRdmaAvailable
    - SocketUniquePtr::release
    - bthread_start_background
    - auto*::_rdma_ep::_state::store
    - brpc::SetTrackMeAddress
    - CHECK
    - bthread_attr_set_name
    - LOG
    - done
    - Socket*::_transport::get
    - brpc::rdma::RdmaConnect::Run
    - Socket*::id
    - static_cast<RdmaTransport*>
    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: 217
      start: 217
    functionDepth: 0
    functionLinenumber: 217
    functionLinenumberEnd: 217
    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:220,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 221
      start: 219
    functionDepth: 0
    functionLinenumber: 219
    functionLinenumberEnd: 221
    functionName: brpc::rdma::RdmaConnect::Run
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - _done
    linkageType: ''
    returnType: void
    signature: void RdmaConnect::Run()
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:224,1
    - Dst: auto*::GetRdmaEp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:225,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:226,1
    - Dst: RdmaEndpoint*::_state::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:232,1
    - Dst: RdmaEndpoint*::_read_butex::fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:237,1
    - Dst: bthread::butex_wake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:238,1
    - Dst: brpc::InputMessenger::OnNewMessages
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:240,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:244,1
    - Dst: RdmaEndpoint*::_socket::SetEOF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:246,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:250,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:251,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:252,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:258,1
    - Dst: RdmaEndpoint*::_socket::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:259,1
    - Dst: RdmaEndpoint*::_socket::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:260,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:261,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:264,1
    CyclomaticComplexity: 10
    EdgeCount: 10
    ICount: 32
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 268
      start: 223
    functionDepth: 4
    functionLinenumber: 223
    functionLinenumberEnd: 268
    functionName: brpc::rdma::RdmaEndpoint::OnNewDataFromTcp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::_state::load
    - RdmaEndpoint*::_socket::description
    - auto*::GetRdmaEp
    - PLOG
    - RdmaEndpoint*::_read_butex::fetch_add
    - berror
    - CHECK
    - bthread::butex_wake
    - RdmaEndpoint*::_socket::fd
    - LOG
    - brpc::InputMessenger::OnNewMessages
    - Socket*::MoreReadEvents
    - Socket*::_transport::get
    - RdmaEndpoint*::_socket::SetFailed
    - RdmaEndpoint*::_socket::SetEOF
    - read
    - static_cast<RdmaTransport*>
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::OnNewDataFromTcp(Socket* m)
  - BBCount: 6
    BranchProfiles: []
    Callsites:
    - Dst: butil::atomic<int>*::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:292,1
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:293,1
    - Dst: read_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:294,1
    - Dst: bthread::butex_wait
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:297,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 21
    argCount: 3
    argNames:
    - read_butex
    - len
    - ' read_once'
    argTypes:
    - butil::atomic<int>*
    - size_t
    - ReadOnce
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 313
      start: 288
    functionDepth: 4
    functionLinenumber: 288
    functionLinenumberEnd: 313
    functionName: brpc::rdma::ReadFromFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read_once
    - butil::atomic<int>*::load
    - butil::milliseconds_from_now
    - bthread::butex_wait
    linkageType: ''
    returnType: int
    signature: "int ReadFromFdLoop(butil::atomic<int>* read_butex,\n                          size_t
      len, ReadOnce&& read_once)"
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:316,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:317,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:318,1
    - Dst: read
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:320,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 322
      start: 315
    functionDepth: 1
    functionLinenumber: 315
    functionLinenumberEnd: 322
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - read
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:325,1
    - Dst: fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:326,1
    - Dst: ReadFromFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:327,1
    - Dst: butil::IOPortal*::append_from_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:329,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 5
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - butil::IOPortal*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 331
      start: 324
    functionDepth: 1
    functionLinenumber: 324
    functionLinenumberEnd: 331
    functionName: brpc::rdma::RdmaEndpoint::ReadFromFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::IOPortal*::append_from_file_descriptor
    - CHECK
    - ReadFromFdLoop
    - fd
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReadFromFd(butil::IOPortal* data, size_t len)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::milliseconds_from_now
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:351,1
    - Dst: write_once
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:352,1
    - Dst: wait_writable
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:361,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 14
    argCount: 3
    argNames:
    - len
    - ' write_once'
    - ' wait_writable'
    argTypes:
    - size_t
    - WriteOnce
    - WaitWritable
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 366
      start: 348
    functionDepth: 1
    functionLinenumber: 348
    functionLinenumberEnd: 366
    functionName: brpc::rdma::WriteToFdLoop
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - write_once
    - wait_writable
    - butil::milliseconds_from_now
    linkageType: ''
    returnType: int
    signature: int WriteToFdLoop(size_t len, WriteOnce&& write_once, WaitWritable&&
      wait_writable)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:369,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:371,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:372,1
    - Dst: write
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:374,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:377,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 2
    argNames:
    - data
    - len
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 379
      start: 368
    functionDepth: 1
    functionLinenumber: 368
    functionLinenumberEnd: 379
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - CHECK
    - Socket*::fd
    - write
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(void* data, size_t len)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:382,1
    - Dst: Socket*::fd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:384,1
    - Dst: WriteToFdLoop
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:385,1
    - Dst: butil::IOBuf*::cut_into_file_descriptor
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:387,1
    - Dst: Socket*::WaitEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:390,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 7
    argCount: 1
    argNames:
    - data
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 392
      start: 381
    functionDepth: 1
    functionLinenumber: 381
    functionLinenumberEnd: 392
    functionName: brpc::rdma::RdmaEndpoint::WriteToFd
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - WriteToFdLoop
    - Socket*::WaitEpollOut
    - butil::IOBuf*::cut_into_file_descriptor
    - CHECK
    - Socket*::fd
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::WriteToFd(butil::IOBuf* data)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:396,1
    - Dst: std::min
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:397,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:399,1
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:400,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 7
    argCount: 1
    argNames:
    - ' remote'
    argTypes:
    - ParsedHello
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 401
      start: 394
    functionDepth: 0
    functionLinenumber: 394
    functionLinenumberEnd: 401
    functionName: brpc::rdma::RdmaEndpoint::ApplyRemoteHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - store
    - std::min
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::ApplyRemoteHello(const ParsedHello& remote)
  - BBCount: 8
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:422,1
    - Dst: SocketUniquePtr::_app_connect::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:424,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:425,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:427,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:428,1
    - Dst: CreateClientHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:430,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:431,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:432,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:435,1
    - Dst: auto::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:436,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:437,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:438,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:441,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:446,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:447,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:449,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:450,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:451,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:452,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:453,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:458,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:460,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:463,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:464,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:465,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:466,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:467,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:472,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:473,1
    - Dst: auto::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:476,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:477,1
    - Dst: auto::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:478,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:479,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:480,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:488,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:491,1
    - Dst: auto::WriteToFd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:492,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:494,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:495,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:496,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:497,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:498,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:503,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:506,1
    - Dst: auto::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:508,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:509,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:510,1
    CyclomaticComplexity: 7
    EdgeCount: 7
    ICount: 55
    argCount: 1
    argNames:
    - arg
    argTypes:
    - void*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 516
      start: 421
    functionDepth: 1
    functionLinenumber: 421
    functionLinenumberEnd: 516
    functionName: brpc::rdma::RdmaEndpoint::ProcessHandshakeAtClient
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - auto::AllocateResources
    - auto::_state::store
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - butil::HostToNet32
    - static_cast<RdmaEndpoint*>
    - LOG_IF
    - PLOG
    - CHECK
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - auto::BringUpQp
    - std::unique_ptr::SendLocalHello
    - auto::ApplyRemoteHello
    - SocketUniquePtr::_app_connect::get
    - SocketUniquePtr::description
    - SocketUniquePtr::_transport::get
    - berror
    - CreateClientHandshake
    - std::unique_ptr::ProtocolVersion
    - auto::WriteToFd
    linkageType: ''
    returnType: void
    signature: void * RdmaEndpoint::ProcessHandshakeAtClient(void* arg)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: Socket*::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:534,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:536,1
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:538,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:540,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:541,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:544,1
    - Dst: CreateServerHandshakeByMagic
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:549,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:551,1
    - Dst: std::unique_ptr::ProtocolVersion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:553,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:554,1
    - Dst: std::unique_ptr::ReceiveAndParseRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:557,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:559,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:562,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:563,1
    - Dst: RdmaEndpoint*::ApplyRemoteHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:569,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:570,1
    - Dst: RdmaEndpoint*::AllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:571,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:572,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:573,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:576,1
    - Dst: RdmaEndpoint*::BringUpQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:577,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:578,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:579,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:591,1
    - Dst: std::unique_ptr::SendLocalHello
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:592,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:593,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:594,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:595,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:601,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:602,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:603,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:607,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:608,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:610,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:611,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:612,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:613,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:614,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:615,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::IOBuf*::cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:619,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:620,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:623,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:624,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:626,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:627,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:628,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:632,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:633,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:634,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:635,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:636,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:639,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:641,1
    - Dst: RdmaEndpoint*::_state::store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:643,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:644,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:645,1
    CyclomaticComplexity: 14
    EdgeCount: 14
    ICount: 74
    argCount: 2
    argNames:
    - source
    - s
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 646
      start: 533
    functionDepth: 1
    functionLinenumber: 533
    functionLinenumberEnd: 646
    functionName: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaEndpoint*::BringUpQp
    - CreateServerHandshakeByMagic
    - std::unique_ptr::ReceiveAndParseRemoteHello
    - LOG
    - Socket*::parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - LOG_IF
    - butil::NetToHost32
    - PLOG
    - CHECK
    - Socket*::reset_parsing_context
    - RdmaEndpoint*::ApplyRemoteHello
    - static_cast<RdmaTransport*>
    - butil::IOBuf*::cutn
    - MakeParseError
    - butil::IOBuf*::copy_to
    - RdmaEndpoint*::_state::store
    - std::unique_ptr::SendLocalHello
    - Socket*::_transport::get
    - Socket*::description
    - RdmaEndpoint*::AllocateResources
    - std::unique_ptr::ProtocolVersion
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult RdmaEndpoint::ExecuteServerHandshake(butil::IOBuf* source,
      Socket* s)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:649,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:654,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:655,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 656
      start: 648
    functionDepth: 1
    functionLinenumber: 648
    functionLinenumberEnd: 656
    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:671,1
    - Dst: _ref_at
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:674,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:675,1
    - Dst: fetch1
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:676,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:677,1
    - Dst: get_first_data_meta
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:679,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:684,1
    - Dst: GetLKey
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:685,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:688,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:706,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: 710
      start: 666
    functionDepth: 1
    functionLinenumber: 666
    functionLinenumberEnd: 710
    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
    - _ref_at
    - CHECK
    - LOG
    - GetLKey
    - _ref_num
    - GetRegionId
    - cutn
    - BAIDU_UNLIKELY
    - fetch1
    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,\n                                      size_t
      max_len)"
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:715,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:721,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:722,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:727,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:729,1
    - Dst: GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:731,1
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:746,1
    - Dst: RdmaIOBuf*::empty
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:754,1
    - Dst: RdmaIOBuf*::cut_into_sglist_and_iobuf
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:764,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:769,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:779,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:780,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:821,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:826,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:827,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:843,1
    - Dst: fetch_sub
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:844,1
    CyclomaticComplexity: 25
    EdgeCount: 25
    ICount: 83
    argCount: 2
    argNames:
    - from
    - ndata
    argTypes:
    - butil::IOBuf**
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 848
      start: 714
    functionDepth: 2
    functionLinenumber: 714
    functionLinenumberEnd: 848
    functionName: brpc::rdma::RdmaEndpoint::CutFromIOBufList
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - RdmaIOBuf*::empty
    - load
    - ibv_post_send
    - berror
    - RdmaIOBuf*::cut_into_sglist_and_iobuf
    - fetch_sub
    - CHECK
    - LOG
    - std::ostringstream::str
    - memset
    - exchange
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - BAIDU_UNLIKELY
    - butil::HostToNet32
    - 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:851,1
    - Dst: brpc::rdma::RdmaEndpoint::SendImm
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    - Dst: exchange
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:853,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 5
    argCount: 1
    argNames:
    - num
    argTypes:
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 856
      start: 850
    functionDepth: 2
    functionLinenumber: 850
    functionLinenumberEnd: 856
    functionName: brpc::rdma::RdmaEndpoint::SendAck
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - fetch_add
    - brpc::rdma::RdmaEndpoint::SendImm
    - exchange
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendAck(int num)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:864,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:866,1
    - Dst: ibv_post_send
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:871,1
    - Dst: brpc::rdma::RdmaEndpoint::DebugInfo
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:874,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    - Dst: std::ostringstream::str
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:877,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 16
    argCount: 1
    argNames:
    - imm
    argTypes:
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 886
      start: 858
    functionDepth: 2
    functionLinenumber: 858
    functionLinenumberEnd: 886
    functionName: brpc::rdma::RdmaEndpoint::SendImm
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - ibv_post_send
    - berror
    - LOG
    - memset
    - brpc::rdma::RdmaEndpoint::DebugInfo
    - std::ostringstream::str
    - butil::HostToNet32
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::SendImm(uint32_t imm)
  - BBCount: 14
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:895,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:901,1
    - Dst: butil::subtle::MemoryBarrier
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:906,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:908,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:909,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:913,1
    - Dst: CHECK_NE
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:923,1
    - Dst: cutn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:925,1
    - Dst: _read_buf::append
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:928,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:933,1
    - Dst: fetch_add
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:936,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:937,1
    - Dst: WakeAsEpollOut
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:941,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:945,1
    - Dst: brpc::rdma::RdmaEndpoint::SendAck
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:949,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:956,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 51
    argCount: 1
    argNames:
    - ' wc'
    argTypes:
    - ibv_wc
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 961
      start: 888
    functionDepth: 3
    functionLinenumber: 888
    functionLinenumberEnd: 961
    functionName: brpc::rdma::RdmaEndpoint::HandleCompletion
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - load
    - clear
    - fetch_add
    - _read_buf::append
    - CHECK
    - cutn
    - WakeAsEpollOut
    - brpc::rdma::RdmaEndpoint::SendAck
    - brpc::rdma::RdmaEndpoint::PostRecv
    - butil::subtle::MemoryBarrier
    - CHECK_NE
    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:965,1
    - Dst: GetRegionId
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:969,1
    - Dst: ibv_post_recv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:974,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:976,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 12
    argCount: 2
    argNames:
    - block
    - block_size
    argTypes:
    - void*
    - size_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 980
      start: 963
    functionDepth: 1
    functionLinenumber: 963
    functionLinenumberEnd: 980
    functionName: brpc::rdma::RdmaEndpoint::DoPostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - berror
    - ibv_post_recv
    - LOG
    - memset
    - 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:986,1
    - Dst: butil::IOBufAsZeroCopyOutputStream::Next
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:990,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:992,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:995,1
    - Dst: brpc::rdma::RdmaEndpoint::DoPostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:998,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:999,1
    CyclomaticComplexity: 5
    EdgeCount: 5
    ICount: 23
    argCount: 2
    argNames:
    - num
    - zerocopy
    argTypes:
    - uint32_t
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1009
      start: 982
    functionDepth: 2
    functionLinenumber: 982
    functionLinenumberEnd: 1009
    functionName: brpc::rdma::RdmaEndpoint::PostRecv
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 7
    functionsReached:
    - static_cast<uint32_t>
    - PLOG
    - clear
    - butil::IOBufAsZeroCopyOutputStream::Next
    - brpc::rdma::RdmaEndpoint::DoPostRecv
    - CHECK_EQ
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::PostRecv(uint32_t num, bool zerocopy)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: memset
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1013,1
    - Dst: brpc::rdma::GetRdmaMaxSge
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1018,1
    - Dst: IbvCreateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    - Dst: brpc::rdma::GetRdmaPd
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1021,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 10
    argCount: 4
    argNames:
    - send_cq
    - recv_cq
    - sq_size
    - rq_size
    argTypes:
    - ibv_cq*
    - ibv_cq*
    - uint32_t
    - uint32_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1022
      start: 1011
    functionDepth: 1
    functionLinenumber: 1011
    functionLinenumberEnd: 1022
    functionName: brpc::rdma::AllocateQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - brpc::rdma::GetRdmaPd
    - brpc::rdma::GetRdmaMaxSge
    - memset
    - IbvCreateQp
    linkageType: ''
    returnType: ibv_qp
    signature: ibv_qp * AllocateQp(ibv_cq* send_cq, ibv_cq* recv_cq, uint32_t sq_size,
      uint32_t rq_size)
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: RdmaResource::RdmaResource
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1025,1
    - Dst: IbvCreateCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1027,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1029,1
    - Dst: butil::make_close_on_exec
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1033,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1034,1
    - Dst: butil::make_non_blocking
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1037,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1038,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1042,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1043,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1045,1
    - Dst: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1049,1
    - Dst: brpc::rdma::GetRdmaCompVector
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1050,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1052,1
    - Dst: brpc::rdma::AllocateQp
      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: IbvCreateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: brpc::rdma::GetRdmaContext
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1063,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1065,1
    - Dst: brpc::rdma::AllocateQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1068,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1072,1
    - Dst: std::unique_ptr::release
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1077,1
    CyclomaticComplexity: 9
    EdgeCount: 9
    ICount: 43
    argCount: 2
    argNames:
    - sq_size
    - rq_size
    argTypes:
    - uint16_t
    - uint16_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1078
      start: 1024
    functionDepth: 2
    functionLinenumber: 1024
    functionLinenumberEnd: 1078
    functionName: brpc::rdma::AllocateQpCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - PLOG
    - brpc::rdma::AllocateQp
    - IbvCreateCq
    - std::unique_ptr::release
    - butil::make_close_on_exec
    - IbvCreateCompChannel
    - butil::make_non_blocking
    - RdmaResource::RdmaResource
    - brpc::rdma::GetRdmaCompVector
    - brpc::rdma::GetRdmaContext
    linkageType: ''
    returnType: RdmaResource
    signature: RdmaResource * AllocateQpCq(uint16_t sq_size, uint16_t rq_size)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::DoAllocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1081,1
    - Dst: brpc::rdma::RdmaEndpoint::DeallocateResources
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1086,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1087,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1088,1
    - Dst: clear
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1089,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 10
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1092
      start: 1080
    functionDepth: 7
    functionLinenumber: 1080
    functionLinenumberEnd: 1092
    functionName: brpc::rdma::RdmaEndpoint::AllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - clear
    - brpc::rdma::RdmaEndpoint::DoAllocateResources
    - brpc::rdma::RdmaEndpoint::DeallocateResources
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::AllocateResources()
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1095,1
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1097,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1104,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1108,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1115,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1124,1
    - Dst: brpc::rdma::RdmaEndpoint::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1127,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1136,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1137,1
    - Dst: Socket::Create
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1144,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1145,1
    - Dst: brpc::rdma::RdmaEndpoint::PollerAddCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1148,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1151,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1152,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1155,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1156,1
    - Dst: resize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1159,1
    - Dst: size
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1160,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 61
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1165
      start: 1094
    functionDepth: 6
    functionLinenumber: 1094
    functionLinenumberEnd: 1165
    functionName: brpc::rdma::RdmaEndpoint::DoAllocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - BAIDU_SCOPED_LOCK
    - Socket::Create
    - PLOG
    - AllocateQpCq
    - CHECK
    - BAIDU_UNLIKELY
    - brpc::rdma::RdmaEndpoint::ReqNotifyCq
    - size
    - resize
    - brpc::rdma::RdmaEndpoint::PollerAddCqSid
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::DoAllocateResources()
  - BBCount: 10
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_UNLIKELY
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1168,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1177,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1179,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1185,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1199,1
    - Dst: IbvSetEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1201,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1204,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1205,1
    - Dst: brpc::rdma::RdmaEndpoint::PostRecv
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1209,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1210,1
    - Dst: GetRdmaGidIndex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1218,1
    - Dst: GetRdmaPortNum
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1226,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1231,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1240,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1250,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1258,1
    - Dst: ece::has_value
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1265,1
    - Dst: IbvQueryEce
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1267,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1271,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1272,1
    CyclomaticComplexity: 13
    EdgeCount: 13
    ICount: 63
    argCount: 2
    argNames:
    - ' remote'
    - is_server
    argTypes:
    - ParsedHello
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1277
      start: 1167
    functionDepth: 3
    functionLinenumber: 1167
    functionLinenumberEnd: 1277
    functionName: brpc::rdma::RdmaEndpoint::BringUpQp
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ece::has_value
    - PLOG
    - berror
    - IbvQueryEce
    - GetRdmaGidIndex
    - LOG
    - GetRdmaPortNum
    - IbvModifyQp
    - brpc::rdma::RdmaEndpoint::PostRecv
    - IbvSetEce
    - BAIDU_UNLIKELY
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::BringUpQp(const ParsedHello& remote, bool is_server)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: IbvDestroyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1284,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1285,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1286
      start: 1279
    functionDepth: 1
    functionLinenumber: 1279
    functionLinenumberEnd: 1286
    functionName: brpc::rdma::DeallocateCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - berror
    - IbvDestroyCq
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void DeallocateCq(ibv_cq* cq)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1296,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1299,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 9
    argCount: 1
    argNames:
    - cq
    argTypes:
    - ibv_cq*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1301
      start: 1288
    functionDepth: 1
    functionLinenumber: 1288
    functionLinenumberEnd: 1301
    functionName: brpc::rdma::DrainCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - ibv_poll_cq
    - LOG_IF
    linkageType: ''
    returnType: int
    signature: int DrainCq(ibv_cq* cq)
  - BBCount: 15
    BranchProfiles: []
    Callsites:
    - Dst: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1308,1
    - Dst: IbvModifyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1316,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1322,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1325,1
    - Dst: IbvDestroyQp
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1332,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1333,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1337,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1338,1
    - Dst: DeallocateCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1339,1
    - Dst: GetGlobalEventDispatcher
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: _io_event::bthread_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1345,1
    - Dst: IbvDestroyCompChannel
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1347,1
    - Dst: LOG_IF
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1348,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1362,1
    - Dst: SocketUniquePtr::_io_event::RemoveConsumer
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1364,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1368,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1383,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1384,1
    - Dst: DrainCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1385,1
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1392,1
    CyclomaticComplexity: 17
    EdgeCount: 17
    ICount: 68
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1405
      start: 1303
    functionDepth: 3
    functionLinenumber: 1303
    functionLinenumberEnd: 1405
    functionName: brpc::rdma::RdmaEndpoint::DeallocateResources
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 8
    functionsReached:
    - IbvDestroyCompChannel
    - SocketUniquePtr::_io_event::RemoveConsumer
    - DrainCq
    - berror
    - DeallocateCq
    - BAIDU_SCOPED_LOCK
    - brpc::SetTrackMeAddress
    - _io_event::bthread_tag
    - SocketUniquePtr::SetFailed
    - IbvModifyQp
    - IbvAckCqEvents
    - GetGlobalEventDispatcher
    - brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    - IbvDestroyQp
    - LOG_IF
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DeallocateResources()
  - BBCount: 7
    BranchProfiles: []
    Callsites:
    - Dst: IbvGetCqEvent
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1413,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1416,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1417,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1418,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1430,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1431,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1434,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1438,1
    - Dst: IbvAckCqEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1442,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 29
    argCount: 1
    argNames:
    - ' s'
    argTypes:
    - SocketUniquePtr
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1446
      start: 1409
    functionDepth: 1
    functionLinenumber: 1409
    functionLinenumberEnd: 1446
    functionName: brpc::rdma::RdmaEndpoint::GetAndAckEvents
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - SetFailed
    - PLOG
    - berror
    - LOG
    - description
    - IbvGetCqEvent
    - IbvAckCqEvents
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GetAndAckEvents(SocketUniquePtr& s)
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: ibv_req_notify_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1449,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1454,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1455,1
    - Dst: SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1457,1
    - Dst: description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1458,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1459,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 11
    argCount: 2
    argNames:
    - send_cq
    - fatal_on_error
    argTypes:
    - bool
    - bool
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1467
      start: 1448
    functionDepth: 1
    functionLinenumber: 1448
    functionLinenumberEnd: 1467
    functionName: brpc::rdma::RdmaEndpoint::ReqNotifyCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - ibv_req_notify_cq
    - SetFailed
    - PLOG
    - berror
    - description
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::ReqNotifyCq(bool send_cq, bool fatal_on_error)
  - BBCount: 20
    BranchProfiles: []
    Callsites:
    - Dst: static_cast<RdmaEndpoint*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: Socket*::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1470,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: RdmaEndpoint*::_socket::id
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1476,1
    - Dst: static_cast<RdmaTransport*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: SocketUniquePtr::_transport::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1479,1
    - Dst: CHECK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1480,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1486,1
    - Dst: ibv_poll_cq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1500,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1503,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1504,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1505,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1529,1
    - Dst: RdmaEndpoint*::ReqNotifyCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1532,1
    - Dst: Socket*::MoreReadEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1549,1
    - Dst: RdmaEndpoint*::GetAndAckEvents
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1553,1
    - Dst: SocketUniquePtr::Failed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1567,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1572,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1573,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1574,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1575,1
    - Dst: RdmaEndpoint*::HandleCompletion
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1579,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1582,1
    - Dst: SocketUniquePtr::SetFailed
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1583,1
    - Dst: SocketUniquePtr::description
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: berror
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1584,1
    - Dst: butil::cpuwide_time_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1596,1
    - Dst: butil::gettimeofday_us
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1597,1
    - Dst: static_cast<InputMessenger*>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: SocketUniquePtr::user
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1598,1
    - Dst: InputMessenger*::ProcessNewMessage
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1599,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1600,1
    CyclomaticComplexity: 27
    EdgeCount: 27
    ICount: 78
    argCount: 1
    argNames:
    - m
    argTypes:
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1604
      start: 1469
    functionDepth: 3
    functionLinenumber: 1469
    functionLinenumberEnd: 1604
    functionName: brpc::rdma::RdmaEndpoint::PollCq
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - RdmaEndpoint*::ReqNotifyCq
    - butil::gettimeofday_us
    - InputMessenger*::ProcessNewMessage
    - static_cast<InputMessenger*>
    - static_cast<RdmaEndpoint*>
    - PLOG
    - ibv_poll_cq
    - CHECK
    - Socket*::MoreReadEvents
    - SocketUniquePtr::SetFailed
    - static_cast<RdmaTransport*>
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - RdmaEndpoint*::_socket::id
    - butil::cpuwide_time_us
    - SocketUniquePtr::description
    - RdmaEndpoint*::GetAndAckEvents
    - SocketUniquePtr::_transport::get
    - SocketUniquePtr::Failed
    - berror
    - RdmaEndpoint*::HandleCompletion
    - SocketUniquePtr::user
    - Socket*::user
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollCq(Socket* m)
  - BBCount: 16
    BranchProfiles: []
    Callsites:
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1607,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 33
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1624
      start: 1606
    functionDepth: 0
    functionLinenumber: 1606
    functionLinenumberEnd: 1624
    functionName: brpc::rdma::RdmaEndpoint::GetStateStr
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 3
    functionsReached:
    - load
    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:1628,1
    - Dst: static_cast<int>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1629,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1631,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1632,1
    - Dst: load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1638,1
    CyclomaticComplexity: 0
    EdgeCount: 0
    ICount: 2
    argCount: 2
    argNames:
    - ' os'
    - connector
    argTypes:
    - std::ostream
    - butil::StringPiece
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1642
      start: 1626
    functionDepth: 1
    functionLinenumber: 1626
    functionLinenumberEnd: 1642
    functionName: brpc::rdma::RdmaEndpoint::DebugInfo
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 8
    functionsReached:
    - load
    - static_cast<int>
    - brpc::rdma::RdmaEndpoint::GetStateStr
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::DebugInfo(std::ostream& os, butil::StringPiece connector)
      const
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: GetRdmaBlockSize
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1645,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1647,1
    - Dst: butil::Mutex::Mutex
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1653,1
    - Dst: AllocateQpCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1655,1
    - Dst: std::vector<PollerGroup>
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1665,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 19
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1669
      start: 1644
    functionDepth: 1
    functionLinenumber: 1644
    functionLinenumberEnd: 1669
    functionName: brpc::rdma::RdmaEndpoint::GlobalInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::vector<PollerGroup>
    - GetRdmaBlockSize
    - butil::Mutex::Mutex
    - AllocateQpCq
    - LOG
    linkageType: ''
    returnType: int
    signature: int RdmaEndpoint::GlobalInitialize()
  - BBCount: 3
    BranchProfiles: []
    Callsites:
    - Dst: BAIDU_SCOPED_LOCK
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1673,1
    - Dst: brpc::rdma::RdmaEndpoint::PollingModeRelease
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1684,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1687
      start: 1671
    functionDepth: 3
    functionLinenumber: 1671
    functionLinenumberEnd: 1687
    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:1702,1
    - Dst: auto::init_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1717,1
    - Dst: auto::load
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1720,1
    - Dst: auto::op_queue::Dequeue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1721,1
    - Dst: std::unordered_set::emplace
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1723,1
    - Dst: std::unordered_set::erase
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1725,1
    - Dst: brpc::SetTrackMeAddress
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1730,1
    - Dst: brpc::rdma::RdmaEndpoint::PollCq
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: SocketUniquePtr::get
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1733,1
    - Dst: auto::callback
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1736,1
    - Dst: bthread_yield
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1739,1
    - Dst: auto::release_fn
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1744,1
    - Dst: FnArgs::FnArgs
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1750,1
    - Dst: bthread_attr_set_name
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1754,1
    - Dst: bthread_start_background
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1758,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1760,1
    CyclomaticComplexity: 15
    EdgeCount: 15
    ICount: 48
    argCount: 4
    argNames:
    - tag
    - callback
    - init_fn
    - release_fn
    argTypes:
    - bthread_tag_t
    - std::function<void()>
    - std::function<void()>
    - std::function<void()>
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1765
      start: 1691
    functionDepth: 4
    functionLinenumber: 1691
    functionLinenumberEnd: 1765
    functionName: brpc::rdma::RdmaEndpoint::PollingModeInitialize
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 0
    functionsReached:
    - std::unordered_set::emplace
    - compare_exchange_strong
    - brpc::rdma::RdmaEndpoint::PollCq
    - SocketUniquePtr::get
    - brpc::SetTrackMeAddress
    - auto::release_fn
    - bthread_attr_set_name
    - LOG
    - std::unordered_set::erase
    - auto::callback
    - auto::op_queue::Dequeue
    - auto::init_fn
    - FnArgs::FnArgs
    - auto::load
    - bthread_start_background
    - bthread_yield
    linkageType: ''
    returnType: int
    signature: "int RdmaEndpoint::PollingModeInitialize(bthread_tag_t tag,\n                                        std::function<void()>
      callback,\n                                        std::function<void()> init_fn,\n
      \                                       std::function<void()> release_fn)"
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: store
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1774,1
    - Dst: bthread_join
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1776,1
    CyclomaticComplexity: 2
    EdgeCount: 2
    ICount: 8
    argCount: 1
    argNames:
    - tag
    argTypes:
    - bthread_tag_t
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1778
      start: 1767
    functionDepth: 2
    functionLinenumber: 1767
    functionLinenumberEnd: 1778
    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:1781,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1782,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1786,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1788
      start: 1780
    functionDepth: 2
    functionLinenumber: 1780
    functionLinenumberEnd: 1788
    functionName: brpc::rdma::RdmaEndpoint::PollerAddCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerAddCqSid()
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: fmix32
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1791,1
    - Dst: bthread_self_tag
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1792,1
    - Dst: op_queue::Enqueue
      Src: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp:1796,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 4
    argCount: 0
    argNames: []
    argTypes: []
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 1798
      start: 1790
    functionDepth: 2
    functionLinenumber: 1790
    functionLinenumberEnd: 1798
    functionName: brpc::rdma::RdmaEndpoint::PollerRemoveCqSid
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_endpoint.cpp
    functionUses: 4
    functionsReached:
    - fmix32
    - bthread_self_tag
    - op_queue::Enqueue
    linkageType: ''
    returnType: void
    signature: void RdmaEndpoint::PollerRemoveCqSid()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ServerHandshakeContext>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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::rdma::ServerHandshakeContext::Create
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 4
    functionsReached:
    - butil::get_object<ServerHandshakeContext>
    linkageType: ''
    returnType: ServerHandshakeContext
    signature: ServerHandshakeContext * ServerHandshakeContext::Create()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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: brpc::rdma::ServerHandshakeContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void ServerHandshakeContext::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:64,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:72,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:77,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: brpc::rdma::DrainClientHelloV2
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::copy_to
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV2(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:90,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:97,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:98,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:104,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 110
    functionName: brpc::rdma::DrainClientHelloV3
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf*::copy_to
    - reinterpret_cast<const uint32_t*>
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV3(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:116,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:122,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:124,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:126,1
    - Dst: RdmaHello::set_block_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:131,1
    - Dst: RdmaHello::set_sq_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:132,1
    - Dst: RdmaHello::set_rq_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:133,1
    - Dst: RdmaHello::set_lid
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:134,1
    - Dst: RdmaHello::set_gid
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:135,1
    - Dst: RdmaHello::set_qp_num
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:136,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:137,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: RdmaHello::ByteSizeLong
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:140,1
    - Dst: RdmaHello::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:143,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:148,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:149,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 2
    argNames:
    - socket
    - version
    argTypes:
    - Socket*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 153
    functionName: brpc::rdma::SendUnnegotiableHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::HostToNet32
    - RdmaHello::set_rq_size
    - static_cast<uint32_t>
    - RdmaHello::set_gid
    - PLOG
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - RdmaHello::set_lid
    - std::string
    - Socket*::Write
    - butil::IOBuf::append
    - LOG
    - RdmaHello::set_sq_size
    - butil::IOBuf::IOBuf
    - RdmaHello::ByteSizeLong
    - RdmaHello::set_qp_num
    - RdmaHello::SerializeToZeroCopyStream
    - Socket*::description
    - RdmaHello::set_block_size
    linkageType: ''
    returnType: int
    signature: int SendUnnegotiableHello(Socket* socket, int version)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:157,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:159,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:163,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:163,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:166,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:171,1
    - Dst: brpc::rdma::DrainClientHelloV2
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:174,1
    - Dst: brpc::rdma::DrainClientHelloV3
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:174,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:177,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:180,1
    - Dst: brpc::rdma::SendUnnegotiableHello
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:182,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:183,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:186,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:187,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:191,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:192,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:194,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:194,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:198,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 199
    functionName: brpc::rdma::FallbackServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::rdma::DrainClientHelloV3
    - brpc::rdma::SendUnnegotiableHello
    - brpc::rdma::DrainClientHelloV2
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - memcmp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult FallbackServerHandshake(butil::IOBuf* source, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::socket_mode
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:206,1
    - Dst: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:207,1
    - Dst: brpc::rdma::FallbackServerHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 201
    functionDepth: 3
    functionLinenumber: 201
    functionLinenumberEnd: 211
    functionName: brpc::rdma::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::FallbackServerHandshake
    - Socket*::socket_mode
    - brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult ExecuteServerHandshake(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ServerHandshakeContext>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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::rdma::ServerHandshakeContext::Create
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 5
    functionsReached:
    - butil::get_object<ServerHandshakeContext>
    linkageType: ''
    returnType: ServerHandshakeContext
    signature: ServerHandshakeContext * ServerHandshakeContext::Create()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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: brpc::rdma::ServerHandshakeContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void ServerHandshakeContext::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:64,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:72,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:77,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: brpc::rdma::DrainClientHelloV2
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 1
    functionsReached:
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::copy_to
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV2(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:90,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:97,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:98,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:104,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 110
    functionName: brpc::rdma::DrainClientHelloV3
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 1
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf*::copy_to
    - reinterpret_cast<const uint32_t*>
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV3(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:116,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:122,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:124,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:126,1
    - Dst: RdmaHello::set_block_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:131,1
    - Dst: RdmaHello::set_sq_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:132,1
    - Dst: RdmaHello::set_rq_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:133,1
    - Dst: RdmaHello::set_lid
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:134,1
    - Dst: RdmaHello::set_gid
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:135,1
    - Dst: RdmaHello::set_qp_num
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:136,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:137,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: RdmaHello::ByteSizeLong
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:140,1
    - Dst: RdmaHello::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:143,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:148,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:149,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 2
    argNames:
    - socket
    - version
    argTypes:
    - Socket*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 153
    functionName: brpc::rdma::SendUnnegotiableHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 1
    functionsReached:
    - butil::HostToNet32
    - RdmaHello::set_rq_size
    - static_cast<uint32_t>
    - RdmaHello::set_gid
    - PLOG
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - RdmaHello::set_lid
    - std::string
    - Socket*::Write
    - butil::IOBuf::append
    - LOG
    - RdmaHello::set_sq_size
    - butil::IOBuf::IOBuf
    - RdmaHello::ByteSizeLong
    - RdmaHello::set_qp_num
    - RdmaHello::SerializeToZeroCopyStream
    - Socket*::description
    - RdmaHello::set_block_size
    linkageType: ''
    returnType: int
    signature: int SendUnnegotiableHello(Socket* socket, int version)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:157,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:159,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:163,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:163,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:166,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:171,1
    - Dst: brpc::rdma::DrainClientHelloV2
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:174,1
    - Dst: brpc::rdma::DrainClientHelloV3
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:174,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:177,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:180,1
    - Dst: brpc::rdma::SendUnnegotiableHello
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:182,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:183,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:186,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:187,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:191,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:192,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:194,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:194,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:198,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 199
    functionName: brpc::rdma::FallbackServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 1
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::rdma::DrainClientHelloV3
    - brpc::rdma::SendUnnegotiableHello
    - brpc::rdma::DrainClientHelloV2
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - memcmp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult FallbackServerHandshake(butil::IOBuf* source, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::socket_mode
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:206,1
    - Dst: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:207,1
    - Dst: brpc::rdma::FallbackServerHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 201
    functionDepth: 3
    functionLinenumber: 201
    functionLinenumberEnd: 211
    functionName: brpc::rdma::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::FallbackServerHandshake
    - Socket*::socket_mode
    - brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult ExecuteServerHandshake(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ServerHandshakeContext>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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::rdma::ServerHandshakeContext::Create
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 6
    functionsReached:
    - butil::get_object<ServerHandshakeContext>
    linkageType: ''
    returnType: ServerHandshakeContext
    signature: ServerHandshakeContext * ServerHandshakeContext::Create()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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: brpc::rdma::ServerHandshakeContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void ServerHandshakeContext::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:64,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:72,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:77,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: brpc::rdma::DrainClientHelloV2
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 2
    functionsReached:
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::copy_to
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV2(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:90,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:97,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:98,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:104,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 110
    functionName: brpc::rdma::DrainClientHelloV3
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 2
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf*::copy_to
    - reinterpret_cast<const uint32_t*>
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV3(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf::IOBuf
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:116,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:122,1
    - Dst: brpc::policy::SofaRawPacker::SofaRawPacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:124,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:126,1
    - Dst: RdmaHello::set_block_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:131,1
    - Dst: RdmaHello::set_sq_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:132,1
    - Dst: RdmaHello::set_rq_size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:133,1
    - Dst: RdmaHello::set_lid
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:134,1
    - Dst: RdmaHello::set_gid
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:135,1
    - Dst: std::string
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:135,1
    - Dst: RdmaHello::set_qp_num
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:136,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:137,1
    - Dst: butil::HostToNet32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: static_cast<uint32_t>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: RdmaHello::ByteSizeLong
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:139,1
    - Dst: butil::IOBuf::append
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:140,1
    - Dst: RdmaHello::SerializeToZeroCopyStream
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:142,1
    - Dst: LOG
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:143,1
    - Dst: Socket*::Write
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:148,1
    - Dst: PLOG
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:149,1
    - Dst: Socket*::description
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:149,1
    CyclomaticComplexity: 3
    EdgeCount: 3
    ICount: 24
    argCount: 2
    argNames:
    - socket
    - version
    argTypes:
    - Socket*
    - int
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 153
      start: 115
    functionDepth: 1
    functionLinenumber: 115
    functionLinenumberEnd: 153
    functionName: brpc::rdma::SendUnnegotiableHello
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 2
    functionsReached:
    - butil::HostToNet32
    - RdmaHello::set_rq_size
    - static_cast<uint32_t>
    - RdmaHello::set_gid
    - PLOG
    - brpc::policy::SofaRawPacker::SofaRawPacker
    - RdmaHello::set_lid
    - std::string
    - Socket*::Write
    - butil::IOBuf::append
    - LOG
    - RdmaHello::set_sq_size
    - butil::IOBuf::IOBuf
    - RdmaHello::ByteSizeLong
    - RdmaHello::set_qp_num
    - RdmaHello::SerializeToZeroCopyStream
    - Socket*::description
    - RdmaHello::set_block_size
    linkageType: ''
    returnType: int
    signature: int SendUnnegotiableHello(Socket* socket, int version)
  - BBCount: 9
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:157,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:158,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:159,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:163,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:163,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:166,1
    - Dst: memcmp
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:168,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:171,1
    - Dst: brpc::rdma::DrainClientHelloV2
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:174,1
    - Dst: brpc::rdma::DrainClientHelloV3
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:174,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:177,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:180,1
    - Dst: brpc::rdma::SendUnnegotiableHello
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:182,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:183,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:186,1
    - Dst: brpc::rdma::ServerHandshakeContext::Create
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:186,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:187,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:191,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:192,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:194,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:194,1
    - Dst: Socket*::reset_parsing_context
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:197,1
    - Dst: MakeParseError
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:198,1
    CyclomaticComplexity: 8
    EdgeCount: 8
    ICount: 32
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 199
      start: 156
    functionDepth: 2
    functionLinenumber: 156
    functionLinenumberEnd: 199
    functionName: brpc::rdma::FallbackServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 2
    functionsReached:
    - butil::IOBuf*::pop_front
    - brpc::rdma::DrainClientHelloV3
    - brpc::rdma::SendUnnegotiableHello
    - brpc::rdma::DrainClientHelloV2
    - MakeParseError
    - butil::IOBuf*::copy_to
    - Socket*::parsing_context
    - Socket*::reset_parsing_context
    - CHECK_EQ
    - brpc::rdma::ServerHandshakeContext::Create
    - butil::IOBuf*::size
    - memcmp
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult FallbackServerHandshake(butil::IOBuf* source, Socket* socket)
  - BBCount: 2
    BranchProfiles: []
    Callsites:
    - Dst: Socket*::socket_mode
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:206,1
    - Dst: brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:207,1
    - Dst: brpc::rdma::FallbackServerHandshake
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:210,1
    CyclomaticComplexity: 1
    EdgeCount: 1
    ICount: 5
    argCount: 2
    argNames:
    - source
    - socket
    argTypes:
    - butil::IOBuf*
    - Socket*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 211
      start: 201
    functionDepth: 3
    functionLinenumber: 201
    functionLinenumberEnd: 211
    functionName: brpc::rdma::ExecuteServerHandshake
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 4
    functionsReached:
    - brpc::rdma::FallbackServerHandshake
    - Socket*::socket_mode
    - brpc::rdma::RdmaEndpoint::ExecuteServerHandshake
    linkageType: ''
    returnType: ParseResult
    signature: ParseResult ExecuteServerHandshake(butil::IOBuf* source, Socket* socket)
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::get_object<ServerHandshakeContext>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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::rdma::ServerHandshakeContext::Create
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 7
    functionsReached:
    - butil::get_object<ServerHandshakeContext>
    linkageType: ''
    returnType: ServerHandshakeContext
    signature: ServerHandshakeContext * ServerHandshakeContext::Create()
  - BBCount: 1
    BranchProfiles: []
    Callsites:
    - Dst: butil::return_object
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.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: brpc::rdma::ServerHandshakeContext::Destroy
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 0
    functionsReached:
    - butil::return_object
    linkageType: ''
    returnType: void
    signature: void ServerHandshakeContext::Destroy()
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:64,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:69,1
    - Dst: brpc::policy::SofaRawUnpacker::SofaRawUnpacker
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:72,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:77,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:81,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 14
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 83
      start: 62
    functionDepth: 1
    functionLinenumber: 62
    functionLinenumberEnd: 83
    functionName: brpc::rdma::DrainClientHelloV2
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 3
    functionsReached:
    - brpc::policy::SofaRawUnpacker::SofaRawUnpacker
    - butil::IOBuf*::copy_to
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV2(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:90,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::IOBuf*::copy_to
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:95,1
    - Dst: butil::NetToHost32
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:97,1
    - Dst: reinterpret_cast<const uint32_t*>
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:98,1
    - Dst: butil::IOBuf*::size
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:104,1
    - Dst: CHECK_EQ
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    - Dst: butil::IOBuf*::pop_front
      Src: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp:108,1
    CyclomaticComplexity: 4
    EdgeCount: 4
    ICount: 13
    argCount: 1
    argNames:
    - source
    argTypes:
    - butil::IOBuf*
    assertStmts: []
    constantsTouched: []
    func_position:
      end: 110
      start: 88
    functionDepth: 1
    functionLinenumber: 88
    functionLinenumberEnd: 110
    functionName: brpc::rdma::DrainClientHelloV3
    functionSourceFile: /src/brpc/src/brpc/rdma/rdma_handshake_server.cpp
    functionUses: 3
    functionsReached:
    - butil::NetToHost32
    - butil::IOBuf*::copy_to
    - reinterpret_cast<const uint32_t*>
    - CHECK_EQ
    - butil::IOBuf*::pop_front
    - butil::IOBuf*::size
    linkageType: ''
    returnType: int
    signature: int DrainClientHelloV3(butil::IOBuf* source)
  - BBCount: 4
    BranchProfiles: []
    Callsites:
    - D